Вычислительные методы линейной алгебры. Горбаченко В.И - 60 стр.

UptoLike

60
вычисляется коэффициент
β
, что нашло отражение при построении соответ-
ствующего графика.
function iter(A,b,x0)
% Функция выбора метода решения, запроса исходных данных, обработки вывода
% результатов.
% Выводится номер эксперимента с каким-либо методом.
% Графическое окно с результатами эксперимента имеет тот же номер.
H=0; % номер эксперимента
while 1
p=menu('Решение СЛАУ итерационными методами', 'Метод Ричардсона',…
'Метод Якоби','Метод Зейделя','SOR-метод',…
'Метод минимальных невязок','Метод сопряженных градиентов',…
'
Выход');
switch p
case 1 % Метод Ричардсона
H=H+1;
fprintf(1,'\nЭксперимент %u\n', H)
disp('Метод Ричардсона')
tol = input('Введите требуемую точность решения: ');
maxit = input('Введите максимальное число итераций: ');
% для матрицы из sam3_01 оптимальное значение
% итерационного параметра равно 0.1774
tau = input ('Введите итерационный параметр: ');
[x,flag,relres,iter,resvec] = richardson(A,b,tol,maxit,x0, tau);
if flag == 0 % Решение не достигнуто
disp ('Решение не достигнуто')
fprintf(1, '\nДостигнута относительная норма невязки
%e за %u итераций\n', relres, iter)
end
if flag == 1 % Решение достигнуто
disp ('Решение достигнуто')
fprintf(1, '\nДостигнута
относительная норма невязки
%e за %u итераций\n', relres, iter)
disp('Решение методом Ричардсона');
x
figure;
% График изменения относительной нормы невязки
semilogy(0:iter, resvec / norm (b,inf))
grid on;
title('Метод Ричардсона')% заголовок окна
xlabel ('Номер итерации');
ylabel ('Относительная норма невязки');
end
disp('Нажмите Enter')
pause
case 2 % Метод Якоби
H=H+1;
fprintf(1,'\nЭксперимент %u\n', H)
disp('Метод Якоби')
tol = input('Введите требуемую точность решения: ');
maxit = input('Введите максимальное число итераций: ');
[x,flag,relres,iter,resvec] = jacobi(A,b,tol,maxit,x0);
if flag == 0 % Решение не достигнуто
disp ('Решение не достигнуто
')
fprintf(1, '\nДостигнута относительная норма невязки
%e за %u итераций\n', relres, iter)
end
if flag == 1 % Решение достигнуто
disp ('Решение достигнуто')
fprintf(1, '\nДостигнута относительная норма невязки
вычисляется коэффициент β , что нашло отражение при построении соответ-
ствующего графика.
function iter(A,b,x0)
% Функция выбора метода решения, запроса исходных данных, обработки вывода
% результатов.
% Выводится номер эксперимента с каким-либо методом.
% Графическое окно с результатами эксперимента имеет тот же номер.

H=0; % номер эксперимента
while 1
    p=menu('Решение СЛАУ итерационными методами', 'Метод Ричардсона',…
            'Метод Якоби','Метод Зейделя','SOR-метод',…
            'Метод минимальных невязок','Метод сопряженных градиентов',…
            'Выход');
    switch p
        case 1 % Метод Ричардсона
            H=H+1;
            fprintf(1,'\nЭксперимент %u\n', H)
            disp('Метод Ричардсона')
            tol = input('Введите требуемую точность решения: ');
            maxit = input('Введите максимальное число итераций: ');
            % для матрицы из sam3_01 оптимальное значение
            % итерационного параметра равно 0.1774
            tau = input ('Введите итерационный параметр: ');
            [x,flag,relres,iter,resvec] = richardson(A,b,tol,maxit,x0, tau);
            if flag == 0 % Решение не достигнуто
                disp ('Решение не достигнуто')
                fprintf(1, '\nДостигнута относительная норма невязки …
                %e за %u итераций\n', relres, iter)
            end
            if flag == 1 % Решение достигнуто
                disp ('Решение достигнуто')
                fprintf(1, '\nДостигнута относительная норма невязки …
                %e за %u итераций\n', relres, iter)
                disp('Решение методом Ричардсона');
                x
                figure;
                % График изменения относительной нормы невязки
                semilogy(0:iter, resvec / norm (b,inf))
                grid on;
                title('Метод Ричардсона')% заголовок окна
                xlabel ('Номер итерации');
                ylabel ('Относительная норма невязки');
            end
            disp('Нажмите Enter')
            pause
        case 2 % Метод Якоби
            H=H+1;
            fprintf(1,'\nЭксперимент %u\n', H)
            disp('Метод Якоби')
            tol = input('Введите требуемую точность решения: ');
            maxit = input('Введите максимальное число итераций: ');
            [x,flag,relres,iter,resvec] = jacobi(A,b,tol,maxit,x0);
            if flag == 0 % Решение не достигнуто
                disp ('Решение не достигнуто')
                fprintf(1, '\nДостигнута относительная норма невязки …
                %e за %u итераций\n', relres, iter)
            end
            if flag == 1 % Решение достигнуто
                disp ('Решение достигнуто')
                fprintf(1, '\nДостигнута относительная норма невязки …


                                                                             60