Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб 3 / z1

.m
Скачиваний:
41
Добавлен:
24.04.2023
Размер:
5 Кб
Скачать

% Задача 1. С помощью программы сгенерировать матрицу A и вектор b
n1=input('Номер группы:');
n2=input('Номер в списке группы:');
n=n1+n2;
rand('seed',n);
A=rand(7);
b=10*rand(7,1);
Au=triu(A);
Al=tril(A);
Ad=diag(diag(A));
su=sum(sum(abs(Au)));
sl=sum(sum(abs(Al)));
Su=sum(abs(Au));
Sl=sum(abs(Al));
sigma=5;
O=ones(7);
Ou=triu(O);
S6=diag(sigma*(Su./Sl));
At=sigma*((Al+Ou)./(Au'+Ou));
neo=rem(n2,2);
mode=rem(n2,3);
if (mode==0) Al=(sigma*su/sl)*Al; end
if (mode==1) Al=S6*Al; end
if (mode==2) Al=At.*Al; end
A=Al+Ad+Au;
ma=max(max(abs(A)));
if (ma>1000) A=0.08*A; end
A=0.5*A+2.75*diag(diag(A)); b;

% Задача 2. Проверить условия сходимости итерационных методов для матрицы A.
% При необходимости преобразовать матрицу A к виду, позволяющему вычислить решения.
for i1=1:7
    S=0;
    for j1=1:7
        S=S+abs(A(i1,j1));
    end
    A(i1,i1)=S;
end

% Вывод преобразованной матрицы
A
b

% Задача 3-5. Вычислить решения с помощью метода простой итерации и Зейделя,
% количество итерации n = 20. Построить графики зависимости xi от n.
% Вычислить вектор невязки решения и ее норму.Получить точное решение СЛАУ,
% вычислить вектор погрешности решений по методам простой итерации Зейделя и их нормы.
% Оценить относительную погрешность решения СЛАУ, если ?A определяется
% десятипроцентным увеличением диагональных элементов, а ?b таким же уменьшением всех
% элементов.

% Простая итерация
% Найдем обратную матрицу к матрице диагональных элементов А
D = diag(diag(A))
T = A - D
D_inv=inv(D)

% Найдем элементы B по формуле x = Bx + c
B = -D_inv * T
g = D_inv * b

% Найдем вектор начальных приближений
x0_iteratsii = zeros(7,1)

% Постоим матрицу для графика
x_plot_iteratsii = zeros(7,1)

for i1=1:20
    % Находим новые приближения по формуле метода
    x0_iteratsii = B * x0_iteratsii + g
    % Добавляем новые значения в график
    x_plot_iteratsii = [x_plot_iteratsii x0_iteratsii]
end

% Ось для графика
n=0:20
% График для метода простых итераций
figure(1)
plot(n,x_plot_iteratsii)

% Итоговый вектор
x_pr_iteratsii = x0_iteratsii

% Невязка решения
nevazka_pr_iteratsii = A * x_pr_iteratsii - b
% Норма невязки
norm_nevazki_pr_iteratsii = norm(nevazka_pr_iteratsii)
% Получим точное решение методом Гауса
x_t_gaussa = A \ b
% Найдем погрешность решения
pogreshnost_pr_iteratsii = x_pr_iteratsii - x_t_gaussa
% Норма погрешности
norm_pogreshnosti_pr_iteratsii = norm(pogreshnost_pr_iteratsii)

% Метод Зейделя для решения СЛАУ
% Отделяем треугольные части матрицы метода итераций
B_l = tril(B)
B_u = triu(B)
% Единична матрица размера 7
E = eye(7)
% Обратная к разности матрицу
G = inv(E - B_l)
% По формуле x^(k+1)=B_l*x^(k+1)+B_u*x^(k)+c, в которой с=h, F=B_l*x+B_u
F_zeydel = G * B_u
h=G*g
% Добавим вектор начальных приближений
x0_zeydel = zeros(7,1)
% Добавим матрицу значений, переносимых на график
x_plot_zeydel = zeros(7,1)

for i2=1:20
    % Заполняем вектор значений по формуле метода для новых приближений
    x0_zeydel = F_zeydel * x0_zeydel + h
    % Заносим точки приближения на график
    x_plot_zeydel = [x_plot_zeydel x0_zeydel]
end

% Иторой график для метода зейделя
figure(2)
plot(n,x_plot_zeydel)

% Итоговый вектор после решения
x_zeydel = x0_zeydel
% Невязка метода
nevazka_zeydel = A * x_zeydel - b

nevazka_pr_iteratsii
% Норма невязки
norm_nevazki_zeydel = norm(nevazka_zeydel)
% Погрешность
pogreshnost_zeydel=x_zeydel-x_t_gaussa
% Норма погрешности
norm_pogreshnosti_zeydel = norm(pogreshnost_zeydel)

Соседние файлы в папке Лаб 3