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

UptoLike

62
title('SOR-метод')% заголовок окна
xlabel ('Номер итерации');
ylabel ('Относительная норма невязки');
end
disp('Нажмите Enter')
pause
case 5 % Метод минимальных невязок
H=H+1;
fprintf(1,'\nЭксперимент %u\n', H)
disp('Метод минимальных невязок')
tol = input('Введите требуемую точность решения: ');
maxit = input('Введите максимальное число итераций: ');
[x,flag,relres,iter,resvec,t] = min_residual(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Достигнута
относительная норма невязки
%e за %u итераций\n', relres, iter)
disp('Решение методом минимальных невязок');
x
figure;
subplot(2,1,1);
% График изменения относительной нормы невязки
semilogy (0:iter, resvec / norm (b,inf))
grid on;
title('Метод минимальных невязок')% заголовок окна
xlabel ('Номер итерации');
ylabel ('Относительная норма невязки');
subplot(2,1,2);
plot(1:iter,t);
grid on;
xlabel ('Номер итерации');
ylabel ('Итерационный параметр');
end
disp('Нажмите Enter')
pause
case 6 % Метод сопряженных градиентов
H=H+1;
fprintf(1,'\nЭксперимент %u\n', H)
disp('Метод сопряженных градиентов')
tol = input('Введите требуемую точность решения: ');
maxit = input('
Введите максимальное число итераций: ');
[x,flag,relres,iter,resvec,alpha,beta] =
con_grad(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Достигнута относительная норма невязки
%e за %u итераций\n', relres, iter)
disp('Решение методом сопряженных градиентов');
x
figure;
subplot(3,1,1);
% График изменения относительной нормы невязки
semilogy(0:iter, resvec / norm (b,inf))
grid on
               title('SOR-метод')% заголовок окна
               xlabel ('Номер итерации');
               ylabel ('Относительная норма невязки');
            end
            disp('Нажмите Enter')
            pause
        case 5 % Метод минимальных невязок
            H=H+1;
            fprintf(1,'\nЭксперимент %u\n', H)
            disp('Метод минимальных невязок')
            tol = input('Введите требуемую точность решения: ');
            maxit = input('Введите максимальное число итераций: ');
            [x,flag,relres,iter,resvec,t] = min_residual(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Достигнута относительная норма невязки …
                %e за %u итераций\n', relres, iter)
                disp('Решение методом минимальных невязок');
                x
                figure;
                subplot(2,1,1);
                % График изменения относительной нормы невязки
                semilogy (0:iter, resvec / norm (b,inf))
                grid on;
                title('Метод минимальных невязок')% заголовок окна
                xlabel ('Номер итерации');
                ylabel ('Относительная норма невязки');
                subplot(2,1,2);
                plot(1:iter,t);
                grid on;
                xlabel ('Номер итерации');
                ylabel ('Итерационный параметр');
            end
            disp('Нажмите Enter')
            pause
        case 6 % Метод сопряженных градиентов
            H=H+1;
            fprintf(1,'\nЭксперимент %u\n', H)
            disp('Метод сопряженных градиентов')
            tol = input('Введите требуемую точность решения: ');
            maxit = input('Введите максимальное число итераций: ');
            [x,flag,relres,iter,resvec,alpha,beta] =
con_grad(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Достигнута относительная норма невязки …
                %e за %u итераций\n', relres, iter)
                disp('Решение методом сопряженных градиентов');
                x
                figure;
                subplot(3,1,1);
                % График изменения относительной нормы невязки
                semilogy(0:iter, resvec / norm (b,inf))
                grid on

                                                                              62