%% Задание 1. Работа с матрицами format compact clear; clc; close all; rng(42); % для воспроизводимости % 1) Формирование квадратной матрицы порядка n n = randi([4,10]) * 2; % чётное от 8 до 20 fprintf('=== Задание 1 ===\n n = %d\n', n); A = -n + (2*n) * rand(n); % равномерное распределение от -n до n disp('Исходная матрица A:'); disp(A); % 2) Вектор отрицательных чисел neg_vals = A(A < 0); disp('Отрицательные числа:'); disp(neg_vals(:)'); % 3) Вектор чисел, больших n/2 large_vals = A(A > n/2); fprintf('Числа > %g:\n', n/2); disp(large_vals(:)'); % 4) Среднее арифметическое mean_val = mean(A, 'all'); fprintf('Среднее арифметическое: %g\n', mean_val); % 5) Замена выше главной диагонали на 100+n A_upd = A; upper_mask = triu(true(n), 1); A_upd(upper_mask) = 100 + n; disp('Матрица после замены выше главной диагонали:'); disp(A_upd); % 6) Удаление последних m столбцов (m < n) cols_to_remove = floor(n/2); % например, половина столбцов if cols_to_remove < n A_less_cols = A(:, 1:end-cols_to_remove); fprintf('Матрица после удаления последних %d столбцов:\n', cols_to_remove); disp(A_less_cols); else disp('Ошибка: m должно быть меньше n'); end % 7) Замена строк с k по m на -n^2 row_start = 2; row_end = n - 2; % должно выполняться k < m < n if row_start < row_end && row_end < n A_rows_mod = A; A_rows_mod(row_start:row_end, :) = -n^2; fprintf('Матрица после замены строк %d–%d на %g:\n', row_start, row_end, -n^2); disp(A_rows_mod); else disp('Некорректные k, m для данного n'); end % 8) Преобразование в матрицу из двух строк и n столбцов (первые две строки) A_two_rows = A(1:2, :); disp('Первые две строки исходной матрицы (2 x n):'); disp(A_two_rows); % 9) Преобразование в матрицу с n/2 столбцами (reshape) new_cols = n/2; new_rows = n^2 / new_cols; % = 2n A_reshaped = reshape(A, new_rows, new_cols); fprintf('Матрица после reshape в %g строк и %g столбцов:\n', new_rows, new_cols); disp(A_reshaped); % 10) Диагональ, сумма и произведение diag_A = diag(A); sum_diag = sum(diag_A); prod_diag = prod(diag_A); disp('Диагональ исходной матрицы:'); disp(diag_A(:)'); fprintf('Сумма диагонали: %g\n', sum_diag); fprintf('Произведение диагонали: %g\n', prod_diag); % 11) Ранг rank_A = rank(A); fprintf('Ранг матрицы A: %d\n', rank_A); % 12) Обратная матрица и проверка if rank_A == n A_inv = inv(A); disp('Обратная матрица:'); disp(A_inv); I_check = A * A_inv; err_inv = max(abs(I_check - eye(n)), [], 'all'); fprintf('Максимальное отклонение от единичной матрицы: %e\n', err_inv); else disp('Матрица A вырождена, обратной не существует.'); A_inv = []; end % 13) Решение СЛАУ Ax = b с помощью обратной матрицы b = -10 + 20*rand(n,1); disp('Вектор свободных членов b:'); disp(b'); if ~isempty(A_inv) x = A_inv * b; disp('Решение x (через обратную матрицу):'); disp(x'); b_check = A * x; residual = norm(b_check - b); fprintf('Невязка ||Ax - b|| = %e\n', residual); else disp('Обратная матрица не вычислена, решение невозможно.'); end % 14) Собственные значения и векторы [V, D] = eig(A); eigvals = diag(D); disp('Собственные значения:'); disp(eigvals'); disp('Собственные вектора (столбцы матрицы V):'); disp(V); % Проверка для первого собственного вектора v1 = V(:,1); lambda1 = eigvals(1); check1 = A*v1 - lambda1*v1; fprintf('Проверка для первого собственного вектора: норма ||A*v1 - λ1*v1|| = %e\n', norm(check1)); % Общая проверка: V \ A * V ≈ D fprintf('Максимальное отклонение V\\A*V от D: %e\n', max(abs(V\A*V - D), [], 'all')); %% Задание 2. Два графика в одних осях figure('Name', 'Задание 2', 'NumberTitle', 'off'); x = linspace(-5, 5, 100); f = x.^2; g = x; plot(x, f, 'LineWidth', 2); hold on; plot(x, g, 'LineWidth', 2); hold off; xlabel('x'); ylabel('y'); title('Задание 2: f(x)=x^2, g(x)=x'); legend('x^2', 'x', 'Location', 'northwest'); grid on; %% Задание 3. График в логарифмических осях (semilogy) figure('Name', 'Задание 3', 'NumberTitle', 'off'); t = linspace(0, 10, 200); k = 0.5; y = exp(k * t); semilogy(t, y, 'LineWidth', 2); xlabel('Время t'); ylabel('Численность y'); title('Задание 3: Экспоненциальный рост популяции'); grid on; %% Задание 4. Параметрическая поверхность figure('Name', 'Задание 4', 'NumberTitle', 'off'); u = linspace(-pi, pi, 50); v = linspace(-pi, pi, 50); [U, V] = meshgrid(u, v); X = U; Y = V; Z = sin(U) .* cos(V) / 2; surf(X, Y, Z, 'EdgeColor', 'none'); xlabel('x = u'); ylabel('y = v'); zlabel('z'); title('Задание 4: Модулированная синусоида'); colorbar; shading interp; axis equal; view(3); %% Задание 5. 3D кривая figure('Name', 'Задание 5', 'NumberTitle', 'off'); t = linspace(0, 3*pi, 500); x = t .* cos(t); y = t .* sin(t); z = t.^3; plot3(x, y, z, 'LineWidth', 2); xlabel('x = t cos(t)'); ylabel('y = t sin(t)'); zlabel('z = t^3'); title('Задание 5: Параметрическая кривая'); grid on; view(45, 30); %% Задание 6. Команда subplot (графики из заданий 2-5 в одном окне) figure('Name', 'Задание 6: subplot (2-5)', 'NumberTitle', 'off'); % Подграфик 1: задание 2 subplot(2,2,1); x = linspace(-5, 5, 100); f = x.^2; g = x; plot(x, f, 'LineWidth', 2); hold on; plot(x, g, 'LineWidth', 2); hold off; xlabel('x'); ylabel('y'); title('Задание 2'); legend('x^2', 'x', 'Location', 'northwest'); grid on; % Подграфик 2: задание 3 subplot(2,2,2); t = linspace(0, 10, 200); k = 0.5; y = exp(k * t); semilogy(t, y, 'LineWidth', 2); xlabel('Время t'); ylabel('Численность y'); title('Задание 3'); grid on; % Подграфик 3: задание 4 subplot(2,2,3); u = linspace(-pi, pi, 50); v = linspace(-pi, pi, 50); [U, V] = meshgrid(u, v); X = U; Y = V; Z = sin(U) .* cos(V) / 2; surf(X, Y, Z, 'EdgeColor', 'none'); xlabel('x = u'); ylabel('y = v'); zlabel('z'); title('Задание 4'); colorbar; shading interp; axis equal; view(3); % Подграфик 4: задание 5 subplot(2,2,4); t = linspace(0, 3*pi, 500); x = t .* cos(t); y = t .* sin(t); z = t.^3; plot3(x, y, z, 'LineWidth', 2); xlabel('x = t cos(t)'); ylabel('y = t sin(t)'); zlabel('z = t^3'); title('Задание 5'); grid on; view(45, 30);