%% % Лекция 1. MATLAB %% clc clear d = 'Think vetorized!- Думай векторно!' D = 'Think vetorized!- Думай векторно!'; %;-запрет вывода на экран %% Help help elfun % элементарные функции %% help > % арифметические функции %% help matfun % функции со специальными матрицами help ops %операторы MATLAB % F1 %% Ввод векторов и матриц a=123 %% % Вектор - строка a1 = [1 2 3] % Вектор - строка a2 = [1, 2, 3] % Вектор - столбец a3 = [1; 2; 3] %% % Задание матриц % Матрица, размера 2х3 b1 = [1 2 3; 4 5 6] % Матрица, размера 3х2 b2 = [1 2; 3 4; 5 6] %%[нач.знач.:шаг: кон.знач.] % Задаем вектор x x = 0:5 %% % Вычисляем вектор y y = sin(x) %% linspace % Вектор из 100 компонент clc clear c1 = linspace(1, 20); size(c1) a=5 size(a) %% % Вектор из 5 компонент c2 = linspace(1, 10, 5) size(c2) %% Выделение элементов матрицы % Очистка экрана clc % Очистка переменных clear % Задание матрицы A = [1 2 3; 4 5 6; 7 8 9] %% % Изменение 1- го элемента матрицы A(1, 1) = 100 %% % Изменение 3- й столбца матрицы A(:, 3) = 50 %% % Изменение 2- го строки матрицы A(2, :) = 33 %% 2 % Изменение фрагмента матрицы clc % Очистка переменной A clear A % Задание квадратной матрицы 7- го порядка из единиц A = ones(7) % Изменение фрагмента матрицы A(2:6, 2:6) = 55 %% % Использование ключевого слова end clear A A = ones(7) % Изменение фрагмента матрицы A(4:end, 4:end) =-21 %% Удаление элементов матрицы % Задание матрицы clc A = [5 5 5; 2 10 2; 2 10 2] % Удаление 1- й строки матрицы A(1, :) = [] % Удаление 2- го столбца матрицы A(:, 2) = [] %% % Удаление нескольких строк матрицы % Задание матрицы clc A = [1 1 1; 2 2 2; 7 3 3] % Удаление 2- х строк матрицы A(1:2, : ) = [] % Удаление двух последних элементов матрицы A(2:end) = [] %% % Матрица из единиц % Матрица из единиц 5- го порядка clc A = ones(5) % Матрица из единиц, в которой 2 строки и 3 столбца B = ones(2, 3) %% % Матрица из нулей 3- го порядка C = zeros(3) % Матрица из нулей, в которой 2 строки и 6 столбцов D = zeros(2, 6) %% % Единичная матрица 3- го порядка E = eye(3) % Единичная матрица, в которой 3 строки и 4 столбца F = eye(3, 4) %% % Матрица Дюрера 3- го порядка M3 = magic(3) sum(M3) sum(M3,2) sum(diag(M3)) sum(diag(fliplr(M3))) % Матрица Дюрера 5- го порядка M5 = magic(5) %% % Матрица 5- го порядка, % заполненная вещественными случайными числами % с равномерным распределением из открытого интервала(0, 1) clc clear A = rand(100) % равномерное распределение %% %%%%%%%%% % Генерация данных A_rand = rand(1000, 1); % 1000 равномерных чисел B_randn = randn(1000, 1); % 1000 нормальных чисел % Подготовка фигуры figure('Position', [100, 100, 900, 400]); % Гистограмма для rand subplot(1,2,1); histogram(A_rand, 20, 'FaceColor', [0.2 0.6 0.9], 'Normalization', 'pdf'); hold on; xline(mean(A_rand), 'r--', 'LineWidth', 1.5); title('rand — равномерное распределение'); xlabel('Значение'); ylabel('Плотность'); ylim([0, 1.5]); grid on; text(0.1, 1.2, sprintf('Mean = %.3f', mean(A_rand))); % Гистограмма для randn subplot(1,2,2); histogram(B_randn, 20, 'FaceColor', [0.9 0.4 0.3], 'Normalization', 'pdf'); hold on; xline(mean(B_randn), 'r--', 'LineWidth', 1.5); xline(mean(B_randn)+std(B_randn), 'g--', 'LineWidth', 1); xline(mean(B_randn)-std(B_randn), 'g--', 'LineWidth', 1); title('randn — нормальное распределение'); xlabel('Значение'); ylabel('Плотность'); grid on; text(-3, 0.35, sprintf('Mean = %.3f\nStd = %.3f', mean(B_randn), std(B_randn))); %% %%%%%%%%%%%% % Матрица 2x3, A = rand([2 3]) %% B=randn(5) %% % Используем функцию округления round % Заполняем матрицу случайными целыми числами от 0 до 10 A = round(rand(8) * 10) % Заполняем матрицу случайными целыми числами от -5 до 5 B = round(rand(8) * 10-5) %% % Поэлементные операции с векторами % Заполнение векторов.Вектора одинаковой длины!!! v1 = 10:10:50, v2 =1:5 % Поэлементное умножение векторов r_1 = v1.*v2 % Поэлементное деление векторов r_2 = v1./v2 % Поэлементное суммирование векторов и умножение на число % Точку в данном случае ставить необязательно r_3 = 0.1*v1 + 100*v2 %% % Заполнение матриц. Матрицы одинаковой размерности !!! m1 = [2 4 6; 3 7 9], m2 = [6 4 2; 9 7 3] % Поэлементное умножение матриц z_1 = m1.*m2 % Поэлементное деление матриц z_2 = m2./m2 % Поэлементное суммирование матриц и умножение на число % Точку в данном случае ставить необязательно z_3 = m1 + 10 * m2 %% % Заполнение векторов. Векторы одинаковой размерности q1 = [1 2 3 4], q2 = [10 20 30 40] % Поэлементное прямое деление векторов p_1 = q1./q2 % Поэлементное обратное деление векторов p_2 = q1.\q2 % Заполнение матриц. Матрицы одинаковой размерности h1 = [10 20; 30 40], h2 = [5 10; 15 20] % Поэлементное прямое деление матриц w_1 = h1./h2 % каждый элемент h1 делится на элемент h2 % Поэлементное обратное деление матриц w_2 = h1.\h2 % каждый элемент h2 делится на элемент h1 % h1 \ h2 — решение системы линейных уравнений h1 * x = h2 % h1 / h2 — решение системы линейных уравнений x * h2 = h1 %% %%%%%%%%%%%%%%%%% clear clc % Исходные данные x = 1:10; % [1 2 3 ... 10] y1 = x.^2; % квадратичная функция y2 = 50 * exp(-x/5); % убывающая экспонента % Поэлементное обратное деление: y2 ./ y1 ratio_left = y1 .\ y2; % эквивалентно y2 ./ y1 ratio_right = y1 ./ y2; % обычное правое деление % Вывод в командное окно disp('y1 = '); disp(y1); disp('y2 = '); disp(y2); disp('y1 .\ y2 (обратное деление) = '); disp(ratio_left); disp('y1 ./ y2 (обычное деление) = '); disp(ratio_right); % График figure('Position', [100 100 800 400]); subplot(1,2,1); plot(x, y1, 'b-o', x, y2, 'r-s', 'LineWidth', 1.5); legend('y1 = x^2', 'y2 = 50·e^{-x/5}', 'Location', 'northwest'); title('Исходные функции'); xlabel('x'); ylabel('y'); grid on; subplot(1,2,2); plot(x, ratio_left, 'g-^', x, ratio_right, 'm-d', 'LineWidth', 1.5); legend('y1 .\\ y2 (обратное)', 'y1 ./ y2 (прямое)', 'Location', 'northwest'); title('Поэлементное деление'); xlabel('x'); ylabel('Отношение'); grid on; %% %%%%%%%%%%%%%%%%% %% % Матричное умножение % Задание матриц clc M1 = [1 1 1; 2 2 2] M2 = [3 4; 3 5; 3 6] % Матричное умножение M1*M2 %% % Вектор - строка из 5 элементов M3 = [1 2 3 4 5] M5 = [1 2 3 4 5] % Вектор - столбец из 5 элементов M4 = [1; 2; 3; 4; 5] % Матричное умножение M3*M4 M3*M5' % Задание квадратных матриц %% %% Матричное обратное деление - решение системы уравнений Ax=b clear, clc % Задание матрицы A и столбца свободных членов b A = [1 0 0; 0 2 0; 0 0 3] b = [10; 40; 150] % Решение системы Ax = b x = A\b % или x = A^(-1)*b % или x = inv(A)*b %% % Возведение матрицы в степень clear, clc % Задание матрицы A A = [1 2 3; 0 2 0; 0 0 3] % Возведение матрицы в степень A^2 %% % Транспонирование вещественной матрицы clear, clc A = [1 1 1; 2 2 2; 4 5 6] % Транспонирование матрицы A' % Транспонирование матрицы A.' %% % Транспонирование матрицы, содержащей комплексные элементы clear, clc % Задание матрицы A A = [1 - i 1 + i; 2 + 3i 2 - 3i] % Транспонирование матрицы c комплексными значениями A.' %% % Приоритет матричных операций. Транспонирование и умножение clear clc A = [1 1; 2 2] % Вычисление значения выражения без скобок A*A' % Вычисление значения выражения со скобками (A*A)' %% % Приоритет матричных операций.Возведение в степень и деление clear, clc A = [1 3; 0 5] % Вычисление значения выражения без скобок A/A^2 % Вычисление значения выражения со скобками (A/A)^ 2 %% % Объединение матриц по горизонтали clear, clc % Задание матриц M1 = [1 2; 3 4], M2 = [5 6 7; 8 9 10] % Объединение по горизонтали с помощью % квадратных скобок [M1 M2] % Объединение по горизонтали с помощью функции cat cat(2, M1, M2) %% % Объединение матриц по вертикали clear, clc % Задание матриц M3 = [1 2 3], M4 = [5 6 7; 8 9 10] % Объединение по горизонтали с помощью % квадратных скобок [M3; M4] % Объединение по горизонтали с помощью функции cat cat(1, M3, M4) %% clear, clc % Задание матриц M5 = [1 2; 3 4], M6 = [5 6; 8 9] % Сложение в «стопку» с помощью функции cat cat(3, M5, M6) %% % Нахождение обратной матрицы A = [1 2; 0 2] inv(A) A^(-1) %% Часто используемые матричные функции clear clc A = [1 2; 3 4] sum(A) sum(A,2) sum(sum(A)) %% % Выделение диагоналей матрицы clear, clc A = [1 2 3; 11 22 33; 101 202 303] % Выделение главной диагонали diag(A) diag(diag(A)) %% % Выделение диагонали, расположенной ниже главной diag(A,-1) % Выделение диагонали, расположенной выше главной diag(A, 1) %% % Построение матрицы на основе заданной диагонали clear, clc d1 = [1 2 3] % элементы d1 будут располагаться на главной диагонали diag(d1) % элементы d1 будут располагаться ниже % главной диагонали diag(d1(2:3),-1) % элементы d1 будут располагаться выше % главной диагонали diag(d1(2:3),1) %% %Функции fliplr и rot90 clc, clear d1=[1 2 3], d2=[11 12 13] rot90(d1) %fliplr(d2) %% fliplr flipud clc clear a1 = [10 2 3; 40 5 6; 70 8 9] fliplr_=fliplr(a1) flipud_=flipud(a1) %% a2 = [10 20 30; 4 5 6; 7 8 9] rot90(a2) %% % Функция reshape clc, clear d = 1:12 size(d) d = reshape(d, 3, 4) size(d) d = reshape(d, 4, []) size(d) %% % Функции size, numel, length clc, clear v1 = [1; 2; 3; 4], v2 = [1 2 3 4] size(v1), size(v2) %% length(v1), length(v2) %% numel(v1), numel(v2) M = [1 2 3; 4 5 6] size(M), length(M), numel(M) %% Логические операции с матрицами clc clear v1 = [1 2 3 4] v2 = [1 2 303 4] v1==v2 v1~=v2 %v1>v2 % Равно == % Не равно ~= % Больше > % Больше или равно >= % Меньше < % Меньше или равно <= %% % Логическое И & % Логическое ИЛИ | clc clear v1=[0 1 1] v2=[0 0 1] v1&v2 v1|v2 %% ГРАФИКИ % Построение графика функции % задание вектора x x = [0:0.005:5]; % расчет значений функции y = exp(-x).*sin(10 * x); % построение графика функции plot(x, y,LineWidth=4) %% % Два графика функции в одних осях с помощью hold on x = [0:0.005 : 5]; y1 = exp(-x).*sin(10 * x); y2 = exp(-x).*cos(10 * x); % построение первого графика функции plot(x, y1,LineWidth=4) % продолжать построение в этом же окне hold on % построение второго графика функции plot(x, y2,LineWidth=4) %% % Два графика функции в одних осях с помощью plot x =[0:0.005:5]; y1 = exp(-x).*sin(10 * x); y2 = exp(-x).*cos(10 * x); % построение сразу двух графиков функций plot(x, y1, x, y2,LineWidth=4,LineStyle=':') %% % Задание цвета и типа линии для графика x = [0:0.005 : 5]; y = exp(-x).*sin(10 * x); plot(x, y, 'g:',LineWidth=4) %% % Использование легенды и подписи осей % создание графического окна clc clear figure x = [0:0.005 : 5]; y1 = exp(-x).*sin(10 * x); y2 = sin(10 * x); % построение графиков двух функций plot(x, y1, 'b-', x, y2, 'r:',LineWidth=3) % создание легенды legend('y1=exp(-x)*sin(10*x)', 'y2=sin(10*x)') % создание подписей к осям xlabel('x') ylabel('y') %% % Начиная с MATLAB R2016b рекомендуется использовать fimplicit вместо ezplot % Использование функции ezplot % построение графика функции, заданной неявно p=ezplot('x^2+(y-abs(x)^(1/2))^2=16') p.LineWidth = 4; % Найти все line-объекты среди дочерних % hLine = findobj(p, 'Type', 'line'); % set(hLine, 'LineWidth', 2); %% % fimplicit(@(x,y) x.^2 + (y - abs(x)).^(1/2).^2 - 1, 'LineWidth', 2); %% % построение графика функции, заданной явно % c заданием отрезка, на котором выполняется построение %% p=ezplot('sin(x)', [0 2*pi]) p.LineWidth = 4; %% % Использование функций axis и text p=ezplot('sin(x)') p.LineWidth = 4; axis([0 2*pi -1.4 1.4]) text(0.25, 1.2, 'text & axis') %% % Использование функции subplot % Гипоциклоиды clear, clc % Задание вектора- параметра t t = 0:0.001 : 8 * pi; % Данные и вектора для 1- го окна subplot k = 5; x11 = (k- 1)*(cos(t) + cos((k- 1)*t) / (k- 1)); y11 = (k- 1)*(sin(t)- sin((k- 1)*t) / (k- 1)); x12 = k * cos(t); y12 = k * sin(t); % Данные и вектора для 2- го окна subplot k = 5.5; x21 = (k- 1)*(cos(t) + cos((k- 1)*t) / (k- 1)); y21 = (k- 1)*(sin(t)- sin((k- 1)*t) / (k- 1)); x22 = k * cos(t); y22 = k * sin(t); % Данные и вектора для 3- го окна subplot k = 6; x31 = (k- 1)*(cos(t) + cos((k- 1)*t) / (k- 1)); y31 = (k- 1)*(sin(t)- sin((k- 1)*t) / (k- 1)); x32 = k * cos(t); y32 = k * sin(t); % Данные и вектора для 4- го окна subplot k = 3.6; x41 = (k- 1)*(cos(t) + cos((k- 1)*t) / (k- 1)); y41 = (k- 1)*(sin(t)- sin((k- 1)*t) / (k- 1)); x42 = k * cos(t); y42 = k * sin(t); % Построение графиков в 1- м окне subplot subplot(2, 2, 1) plot(x11, y11, x12, y12, LineWidth=4) legend('k=5') % Построение графиков во 2- м окне subplot subplot(2, 2, 2) plot(x21, y21, x22, y22,LineWidth=4) legend('k=5.5') % Построение графиков в 3- м окне subplot subplot(2, 2, 3) plot(x31, y31, x32, y32,LineWidth=4) legend('k=6') % Построение графиков в 4- м окне subplot subplot(2, 2, 4) plot(x41, y41, x42, y42,LineWidth=4) legend('k=3.6') %% % Использование логарифмической шкалы для оси x clear, clc x = [1e+0, 1e+1, 1e+2, 1e+3, 1e+4, 1e+5, 1e+6] y = [1, 2, 4, 8, 16, 32, 64]; p = semilogx(x, y), set(p, 'LineWidth', 2); title('Логарифмическая шкала по оси x') %% clear, clc x = [1e+0, 1e+1, 1e+2, 1e+3, 1e+4, 1e+5, 1e+6] y = [1e+1, 1e+4, 1e+1, 1e+3, 1e+1, 1e+4, 1e+1]; p = loglog(x, y) set(p, 'LineWidth', 2); title('Логарифмическая шкала для обеих осей') grid on % задание сетки %% % График в полярных координатах theta = 0:0.01 : 2 * pi; rho = sin(2 * theta).*cos(2 * theta); figure p=polar(theta, rho, '--r') p.LineWidth = 4; %% help graph2d %% help specgraph %%