# Отчет по теме 1 Комаров Егор, А-03-24 ## 1 Изучение среды GNU Octave GUI GNU Octave запущен, произведено общее ознакомление с интерфейсом программы. ![Скриншот](assets/ph1.png) ## 2 Настройка текущего каталога С помощью **Set path...** установил путь к папке ТЕМА1: ![Скриншот](assets/ph2.png) ## 3 Настройка рабочего пространства Во вкладке Window активируем показ командного окна, журнала выполненных команд, диспетчера файлов, области переменных и редактора. После этого в интерфейсе среды появляются соответствующие окна. ![Скриншот](assets/ph3.png) ## 4 Установка пути к рабочим репозиториям. С помощью **Set path...** установливаем путь к папкам ТЕМА1 и ТЕМА2. Включаем отображение списка файлов в текущей папке. ![Скриншот](assets/ph4.png) ## 5 Работа с системой помощи. Просматриваем документацию по программе **(GNU Octave Manual)**. ![Скриншот](assets/ph5.png) Просматриваем список встроенных функций **Function Index**. ![Скриншот](assets/ph6.png) Используем команду **help** для получения информации по функции **randn**. ![Скриншот](assets/ph7.png) ```matlab help randn 'randn' is a built-in function from the file libinterp/corefcn/rand.cc -- X = randn (N) -- X = randn (M, N, ...) -- X = randn ([M N ...]) -- X = randn (..., "single") -- X = randn (..., "double") -- V = randn ("state") -- randn ("state", V) -- randn ("state", "reset") -- V = randn ("seed") -- randn ("seed", V) -- randn ("seed", "reset") Return a matrix with normally distributed random elements having zero mean and variance one. The arguments are handled the same as the arguments for ‘rand’. By default, ‘randn’ uses the Marsaglia and Tsang "Ziggurat technique" to transform from a uniform to a normal distribution. The class of the value returned can be controlled by a trailing "double" or "single" argument. These are the only valid classes. Reference: G. Marsaglia and W.W. Tsang, ‘Ziggurat Method for Generating Random Variables’, J. Statistical Software, vol 5, 2000, See also: rand, rande, randg, randp. Additional help for built-in functions and operators is available in the online version of the manual. Use the command 'doc ' to search the manual index. Help and information about Octave is also available on the WWW at https://www.octave.org and https://octave.discourse.group/c/help/ ``` ## 6 Способы задания матриц и векторов. Создание нормально распределённой матрицы: ```matlab >> A=randn(4,6) A = -0.487249 1.500163 -0.058514 0.447870 -0.831425 0.230160 0.042227 0.690096 -0.052365 1.305950 -0.379213 -0.269474 0.654921 0.941014 0.093497 0.561096 0.212812 -0.410104 -0.148194 -0.678435 -1.008628 1.425202 0.760093 -2.166047 ``` Создание равномерно распределённой матрицы: ```matlab >> B=rand(4,7) B = 0.345536 0.704204 0.316431 0.818448 0.340374 0.749643 0.774945 0.126996 0.730145 0.664247 0.153328 0.237525 0.663924 0.288564 0.019296 0.989218 0.222881 0.216879 0.223590 0.603890 0.498865 0.719244 0.753689 0.380854 0.641714 0.662913 0.353391 0.594957 ``` Создание вектора: ```matlab >>C=4:27 C = Columns 1 through 19: 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Columns 20 through 24: 23 24 25 26 27 ``` Задание текста (символьного вектора): ```matlab >> H='This is a symbols vector' H = This is a symbols vector ``` Задание вектора с комплексными числами: ```matlab >> L=[-2+23.1j, 3-5.6j] L = -2.0000 + 23.1000i 3.0000 - 5.6000i ``` ## 7 Базовые операции с матрицами. Формирование матрицы из вектора C. Количество строк – результат деления длины вектора на заданное количество столбцов матрицы. ```matlab >> D=reshape(C,[],6) D = 4 8 12 16 20 24 5 9 13 17 21 25 6 10 14 18 22 26 7 11 15 19 23 27 ``` Умножение транспонированной матрицы на матрицу: ```matlab >> E=B'*A E = 0.488550 0.011549 1.000897 2.699564 -0.504726 1.819611 -0.151361 0.254209 0.624697 1.512441 0.183915 0.725667 0.072425 0.313477 1.110223 2.959277 0.309335 1.753866 0.333663 0.135882 1.735861 4.354475 -0.273429 1.707147 0.038203 0.340325 1.835803 4.116933 -1.331504 2.154751 -0.258805 0.328323 0.793725 1.274550 -1.792678 1.396500 -0.015348 0.371355 1.553848 3.350191 -1.666793 2.328455 ``` Горизонтальная конкатенация матриц: ```matlab >> F=[A,B] F = Columns 1 through 8: 1.148943 -0.660449 0.505361 2.144800 0.874353 -0.061676 0.831759 0.168296 0.073393 -0.083308 1.300502 1.839412 -3.915271 0.771531 0.413143 0.094149 -0.439376 0.422486 0.877189 2.021633 0.628780 0.429597 0.288750 0.547413 -0.485810 0.620539 -0.275356 -0.561242 0.267499 1.872348 0.762738 0.228719 Columns 9 through 13: 0.632518 0.858376 0.634046 0.031583 0.540918 0.232844 0.454478 0.678126 0.535694 0.709084 0.770984 0.976534 0.934923 0.240303 0.664854 0.684711 0.528709 0.677770 0.471018 0.816684 ``` Поэлементное умножение: ```matlab >> G=A.*D G = 4.5958 -5.2836 6.0643 34.3168 17.4871 -1.4802 0.3670 -0.7498 16.9065 31.2700 -82.2207 19.2883 -2.6363 4.2249 12.2806 36.3894 13.8332 11.1695 -3.4007 6.8259 -4.1303 -10.6636 6.1525 50.5534 ``` Поэлементное деление: ```matlab M=G./4.5 M = 1.0213e+00 -1.1741e+00 1.3476e+00 7.6260e+00 3.8860e+00 -3.2894e-01 8.1547e-02 -1.6662e-01 3.7570e+00 6.9489e+00 -1.8271e+01 4.2863e+00 -5.8583e-01 9.3886e-01 2.7290e+00 8.0865e+00 3.0740e+00 2.4821e+00 -7.5570e-01 1.5169e+00 -9.1785e-01 -2.3697e+00 1.3672e+00 1.1234e+01 ``` Поэлементное возведение в степень: ```matlab >> DDD=D.^3 DDD = 64 512 1728 4096 8000 13824 125 729 2197 4913 9261 15625 216 1000 2744 5832 10648 17576 343 1331 3375 6859 12167 19683 ``` Поэлементное сравнение. Формирование логической матрицы: элементы <20 соответствуют 0, а >=20 соответствуют 1: ```matlab >> DL=D>=20 DL = 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 ``` Преобразование матрицы в столбец: ```matlab >> Dstolb=D(:) Dstolb = 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ``` ## 8 Примеры использования стандартных математических функций. Поэлементное взятие корня: ```matlab >> B1=sqrt(B) B1 = Columns 1 through 5: 0.9120 0.4102 0.7953 0.9265 0.7963 0.6428 0.3068 0.4825 0.6742 0.8235 0.5374 0.7399 0.8781 0.9882 0.9669 0.8733 0.4782 0.8275 0.7271 0.8233 Columns 6 and 7: 0.1777 0.7355 0.7319 0.8421 0.4902 0.8154 0.6863 0.9037 ``` Поэлементное взятие логорифма: ```matlab >> B2=log(B) B2 = Columns 1 through 4: -0.184212 -1.782031 -0.458047 -0.152714 -0.883960 -2.362875 -1.457387 -0.788605 -1.242194 -0.602552 -0.260088 -0.023746 -0.270841 -1.475262 -0.378758 -0.637316 Columns 5 through 7: -0.455633 -3.455126 -0.614488 -0.388422 -0.624192 -0.343782 -0.067292 -1.425857 -0.408188 -0.388948 -0.752859 -0.202503 ``` Поэлементное взятие синуса: ```matlab >> B3=sin(B) B3 = Columns 1 through 4: 0.739117 0.167503 0.591177 0.756782 0.401490 0.094010 0.230746 0.438994 0.284754 0.520480 0.696841 0.828562 0.690903 0.226730 0.632450 0.504419 Columns 5 through 7: 0.592410 0.031578 0.514923 0.627335 0.510438 0.651139 0.804553 0.237996 0.616944 0.627057 0.453794 0.728880 ``` Количество столбцов матрицы: ```matlab >> k=length(B1) k = 7 ``` Количество строк и столбцов матрицы: ```matlab >> nm=size(B1) nm = 4 7 ``` Количество элементов матрицы: ```matlab >> elem=numel(B1) elem = 28 ``` Генерация вектора из 20 линейно расположенных точек между указанными значениями: ```matlab >> NN=linspace(11.5,34.1,20) NN = Columns 1 through 8: 11.500 12.689 13.879 15.068 16.258 17.447 18.637 19.826 Columns 9 through 16: 21.016 22.205 23.395 24.584 25.774 26.963 28.153 29.342 Columns 17 through 20: 30.532 31.721 32.911 34.100 ``` Генерация матрицы из единиц: ```matlab >> FF=ones(2,4) FF = 1 1 1 1 1 1 1 1 ``` Генерация квадратной матрицы из нулей: ```matlab >> GG=zeros(5) GG = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ``` Формирование столбца из значений диагонали матрицы: ```matlab >> B1D=diag(B1) B1D = 0.9120 0.3068 0.8781 0.7271 ``` Формирование матрицы с указанной в векторе диагональю: ```matlab >> DB=diag(B1D) DB = Diagonal Matrix 0.9120 0 0 0 0 0.3068 0 0 0 0 0.8781 0 0 0 0 0.7271 ``` Сортировка матрицы по столбцам: ```matlab >> BS1=sort(B) BS1 = 0.288750 0.094149 0.232844 0.454478 0.634046 0.031583 0.540918 0.413143 0.168296 0.632518 0.528709 0.677770 0.240303 0.664854 0.762738 0.228719 0.684711 0.858376 0.678126 0.471018 0.709084 0.831759 0.547413 0.770984 0.976534 0.934923 0.535694 0.816684 ``` Сортировка матрицы по строкам: ```matlab >> BS2=sortrows(B,2) BS2 = 0.413143 0.094149 0.232844 0.454478 0.678126 0.535694 0.709084 0.831759 0.168296 0.632518 0.858376 0.634046 0.031583 0.540918 0.762738 0.228719 0.684711 0.528709 0.677770 0.471018 0.816684 0.288750 0.547413 0.770984 0.976534 0.934923 0.240303 0.664854 ``` Суммирование матрицы по столбцам: ```matlab >> DS1=sum(D) DS1 = 22 38 54 70 86 102 ``` Суммирование матрицы по строкам. Такие вводные функции означают, что матрица суммируется по второй размерности: ```matlab >> DS2=sum(D,2) DS2 = 84 90 96 102 ``` Произведение элементов по столбцам: ```matlab >> DP1=prod(D) DP1 = 840 7920 32760 93024 212520 421200 ``` Определитель произведения матрицы и транспонированной матрицы: ```matlab >> dt=det(A*A') dt = 1388.8 ``` Обратная матрица произведения матрицы и транспонированной матрицы: ```matlab >> dinv=inv(A*A') dinv = 0.374568 0.025819 -0.305610 0.189828 0.025819 0.053005 -0.044695 0.025517 -0.305610 -0.044695 0.432459 -0.163317 0.189828 0.025517 -0.163317 0.317169 ``` ## 9 Работа с индексацией. Извлечение элемента из 3 строки 5 столбца: ```matlab >> D1=D(3,5) D1 = 22 ``` Извлечение элементов из 3 строки 4, 5 и 6 столбцов: ```matlab >> D2=D(3,4:end) D2 = 18 22 26 ``` Извлечение элементов из 2 и 3 строк 3, 4 и 5 столбцов: ```matlab >> D3=D(2:3,3:5) D3 = 13 17 21 14 18 22 ``` Извлечение элементов под номерами 16-20: ```matlab >> D4=D(16:20) D4 = 19 20 21 22 23 ``` Извлечение элементов 3 и 4 строк 1, 3 и 6 столбцов: ```matlab >> D5=D(3:4,[1,3,6]) D5 = 6 14 26 7 15 27 ``` ## 10 Создание запуск базовой программы на m-языке. Программный код: ```matlab - цикл по перечислению Dsum=0 for i=1:6 Dsum=Dsum+sqrt(D(2,i)) endfor - цикл пока выполняется условие Dsum2=0;i=1 while (D(i)<22) Dsum2=Dsum2+sin(D(i)) i=i+1 endwhile - условие if if (D(3,5)>=20) printf('D(3,5)>=20') else printf('D(3,5)<20') endif ``` Результат работы программы: ```matlab Dsum = 0 Dsum = 2.2361 Dsum = 5.2361 Dsum = 8.8416 Dsum = 12.965 Dsum = 17.547 Dsum = 22.547 i = 1 Dsum2 = -0.7568 i = 2 Dsum2 = -1.7157 i = 3 Dsum2 = -1.9951 i = 4 Dsum2 = -1.3382 i = 5 Dsum2 = -0.3488 i = 6 Dsum2 = 0.063321 i = 7 Dsum2 = -0.4807 i = 8 Dsum2 = -1.4807 i = 9 Dsum2 = -2.0173 i = 10 Dsum2 = -1.5971 i = 11 Dsum2 = -0.6065 i = 12 Dsum2 = 0.043799 i = 13 Dsum2 = -0.2441 i = 14 Dsum2 = -1.2055 i = 15 Dsum2 = -1.9565 i = 16 Dsum2 = -1.8066 i = 17 Dsum2 = -0.8937 i = 18 Dsum2 = -0.057011 i = 19 D(3,5)>=20 ``` # 11 Создание графических функций. Воспользуемся функцией построения графиков **plot()** в виде **plot(D(1,:),B([2,4],1:6))**: ![Скриншот](assets/ph8.png) Воспользуемся функцией расчёта и построена гистрограммы **hist()** в виде **hist(A(:),6)**: ![Скриншот](assets/ph9.png) Воспользуемся функцией расчёта и построена гистрограммы **pie()** в виде **pie(C1)**: ![Скриншот](assets/ph10.png) Воспользуемся функцией расчёта и построена гистрограммы **bar()** в виде **bar(K)**: ![Скриншот](assets/ph11.png) # 12 Использование текстового редактора среды. Создадим новый сценарий и запустим с его помощью команды пункта 9. Скрипт сохраним под названием Prog1. Запустим скрипт через командную строку, введя название файла: ```matlab >> Prog1 D1 = 22 D2 = 18 22 26 D3 = 13 17 21 14 18 22 D4 = 19 20 21 22 23 D5 = 6 14 26 7 15 27 ``` # 13 Сохранение области переменных. Сохраним существующую область переменным под названием Perem. Завершим сеанс и для нового загрузим файл Perem. ## Контрольное задание. 1 Создайте переменную ММ – матрицу 5х7 со случайными нормально распределенными элементами с математическим ожиданием 10 и стандартным отклонением 8: ```matlab >> MM=randn(5,7)*8+10 MM = 28.1527 13.4458 10.9555 7.6667 12.6378 9.2147 9.8023 16.6164 11.8658 5.7105 -1.6662 0.9891 7.4128 12.2133 29.7457 23.3815 7.9986 11.5438 4.6299 20.8105 0.8708 13.6755 8.2890 24.7054 11.2460 16.5975 1.2757 8.0440 9.6014 20.2747 11.7695 13.9071 13.0849 -0.4976 9.4186 ``` 2 Рассчитайте среднее значение SR по всем элементам матрицы ММ: ```matlab >> SR = sum(sum(MM))/numel(MM) SR = 11.583 ``` 3 Замените в ММ все значения, превышающие SR+8, на значение SR+8, а значения, меньшие, чем SR-8, - на SR-8. ```matlab >> MM(MM> MM(MM>SR+8)=SR+8 MM = 19.5826 13.4458 10.9555 7.6667 12.6378 9.2147 9.8023 16.6164 11.8658 5.7105 3.5826 3.5826 7.4128 12.2133 19.5826 19.5826 7.9986 11.5438 4.6299 19.5826 3.5826 13.6755 8.2890 19.5826 11.2460 16.5975 3.5826 8.0440 9.6014 19.5826 11.7695 13.9071 13.0849 3.5826 9.4186 ``` 4 Превратите ММ в вектор – столбец ММС. ```matlab >> MMC=MM(:) MMC = 19.5826 16.6164 19.5826 13.6755 9.6014 13.4458 11.8658 19.5826 8.2890 19.5826 10.9555 5.7105 7.9986 19.5826 11.7695 7.6667 3.5826 11.5438 11.2460 13.9071 12.6378 3.5826 4.6299 16.5975 13.0849 9.2147 7.4128 19.5826 3.5826 3.5826 9.8023 12.2133 3.5826 8.0440 9.4186 ``` 5 Упорядочьте его элементы по возрастанию. ```matlab >> MMC=sort(MMC) MMC = 3.5826 3.5826 3.5826 3.5826 3.5826 4.6299 5.7105 7.4128 7.6667 7.9986 8.0440 8.2890 9.2147 9.4186 9.6014 9.8023 10.9555 11.2460 11.5438 11.7695 11.8658 12.2133 12.6378 13.0849 13.4458 13.6755 13.9071 16.5975 16.6164 19.5826 19.5826 19.5826 19.5826 19.5826 19.5826 ``` 6 Определите значение медианы, в качестве которого возьмите серединное по порядку индексов значение в упорядоченном векторе. ```matlab >> MED=(MMC(17)+MMC(18))/2 MED = 11.101 >> MED=(MMC(17)+MMC(18))/2 MED = 11.101 ``` Рассчитайте матрицу ММ1 с элементами, равными натуральным логарифмам от значений соответствующих элементов из матрицы ММ. ```matlab >> MM1 = log(MM) MM1 = 2.9746 2.5987 2.3938 2.0369 2.5367 2.2208 2.2826 2.8104 2.4737 1.7423 1.2761 1.2761 2.0032 2.5025 2.9746 2.9746 2.0793 2.4461 1.5325 2.9746 1.2761 2.6156 2.1149 2.9746 2.4200 2.8093 1.2761 2.0849 2.2619 2.9746 2.4655 2.6324 2.5715 1.2761 2.2427 ```