Метод Гаусса-Зейделя
If retcode = 1 then writeln ('Решение неуспещно'). Входные данные: n — размер матрицы,. Получаем корни: x1=0.999 999 999 999 815. Получаем корни: x1=0.9 999 995 843 072. Получаем корни: x1=0.9 999 766 912. Write ('Введите погрешность eps='); Write ('Введите погрешность eps='); Writeln ('Расширенная матрица:'); Writeln ('Расширенная матрица:'); Biзначения свободных членов. Readln (maxiter); (ввод… Читать ещё >
Метод Гаусса-Зейделя (реферат, курсовая, диплом, контрольная)
Министерство образования РФ ВСГУТУ Отчет о проделанной работе № 4
Метод Гаусса-Зейделя Выполнил: Чебунина Е.
гр. Б631−2
Проверил: Кривошеин М.Ю.
г. Улан-Удэ Спецификация Целью программы: нахождение XI-неизвестные и определение количества ITERитераций, зная AIJ-коэффициенты при неизвестных, BIсвободные члены и размер матрицы N. Необходимо решить заданные системы уравнений методом итераций и методом Зейделя с точностью
Дана матрица A размером n, b свободные члены. Нужно составить программу для вычисления матриц методом Гаусса-Зейделя.
Входные данные: n — размер матрицы,
epsпогрешность,
maxiterмаксимальное значение итераций,
aij-значения коэффициентов при неизвестных,
biзначения свободных членов.
Выходные данные: xi-значения неизвестных.
Таблица разработки
Шаги разработки | Примечание | |
Gausszeidel > begin ввод входных данных вычисление значений выражения вывод результата end. | ||
ввод входных данных> begin write ('Введите количество уравнений n='); readln (n); write ('Введите погрешность eps='); readln (eps); write ('Введите максимальное кол-во итераций maxiter='); readln (maxiter); (ввод переменных) for i := 1 to n do begin for j := 1 to n do begin Write ('a[', i, ',', j, ']='); Read (a[i, j]); end; Write ('b[', i, ']='); Readln (b[i]); Writeln; end; (ввод матрицы) Writeln ('Расширенная матрица:'); | Переменныеi, j, n, maxiter: integer Переменная eps, rmax: real | |
вычислениекорней > for i := 1 to n do begin for j := 1 to n do write (a[i, j]: 8); write (b[i]:8); writeln; end; (вывод матрицы) retcode := 1; for iter := 1 to maxiter DO begin rmax := 0; for i := 1 to n DO begin r[i] := b[i]; for j := 1 to n do r[i] := r[i] - a[i, j] * x[j]; if abs (r[i]) > rmax then rmax := abs (r[i]); x[i] := x[i] + r[i] / A[i, i]; end; if rmax < eps THEN begin Retcode := 0; goto 11; end; end; 11: if retcode = 1 then writeln ('Решение неуспещно') else begin for i := 1 to n do | Переменные iter, retcode: integer Переменная max, c, s, M: real | |
Текст программы
1. program Gausszeidel;
2. label 11;
3. var
4. a: array [1.100, 1.100] of real;
5. b: array [1.100] of real;
6. r: array[1.100] of real;
7. x: array[1.100] of real;
8. eps, rmax: real; (эпсилон, rmax)
9. n, maxiter, i, j, iter, retcode: integer; (кол-во уровней, макс итераций, колво строк, столбцов, итерации, релаксиционный коэф.)
10. begin
11. write ('Введите количество уравнений n=');
12. readln (n);
13. write ('Введите погрешность eps=');
14. readln (eps);
15. write ('Введите максимальное кол-во итераций maxiter=');
16. readln (maxiter); (ввод переменных)
17. for i := 1 to n do
18. begin
19. for j := 1 to n do
20. begin
21. Write ('a[', i, ',', j, ']=');
22. Read (a[i, j]);
23. end;
24. Write ('b[', i, ']=');
25. Readln (b[i]);
26. Writeln;
27. end; (ввод матрицы)
28. Writeln ('Расширенная матрица:');
29. for i := 1 to n do
30. begin
31. for j := 1 to n do
32. write (a[i, j]: 8);
33. write (b[i]: 8);
34. writeln;
35. end; (вывод матрицы)
36. retcode := 1;
37. for iter := 1 to maxiter DO
38. begin
39. rmax := 0;
40. for i := 1 to n DO
41. begin
42. r[i] := b[i];
43. for j := 1 to n do
44. r[i] := r[i] - a[i, j] * x[j];
45. if abs (r[i]) > rmax then
46. rmax := abs (r[i]);
47. x[i] := x[i] + r[i] / A[i, i];
48. end;
49. if rmax < eps THEN
50. begin
51. Retcode := 0;
52. goto 11;
53. end;
54. end;
55. 11:
56. if retcode = 1 then writeln ('Решение неуспещно')
57 else
58. begin
59. for i := 1 to n do
60. Writeln ('корень x', i, '=', x[i]);
61. writeln (iter)
62. end;
63. end.
Экспериментальная часть Итерационный метод применим только тогда, когда диагональные элементы матрицы, А ненулевые.
Пример1:
В этом случае программа выводит на экран сообщение: «Решение неуспешно».
Выбор количества итераций. Одно действие приближения к решению, это и есть итерация. Оптимальной и эффективной является программа, для которой требуется наименьшее количество итераций.
Пример2:
А=
eps=0.0001
Введем максимальное количество итераций maxiter=7
Получаем корни: x1=1.233 388
x2=0.999 999 979 105 219
x3=0.999 999 999 511 196
Выводится сообщение о количестве затраченных итераций: 6.
Если вести максимальное количество итераций maxiter=4
Выводится сообщение, что решение неуспешно. Это значит, что заданных точности и количества итераций программе не хватает для успешного решения матрицы.
3. На Примере2 рассмотрим и выбор заданной точности (eps) :
А=
1). eps=0.001
Введем максимальное количество итераций maxiter=7
Получаем корни: x1=0.9 999 995 843 072
x2=0.99 999 960 434 176
x3=1.16 227 021
Выводится сообщение о количестве затраченных итераций: 5.
2). eps=0.01
Введем максимальное количество итераций maxiter=7
Получаем корни: x1=0.9 999 766 912
x2=0.99 999 936 896
x3=1.4 787 968
Выводится сообщение о количестве затраченных итераций: 4.
3). eps=0.1
Введем максимальное количество итераций maxiter=10
Получаем корни: x1=0.999 999 999 999 815
x2=1.191
x3=0.999 999 999 999 655
Выводится сообщение о количестве затраченных итераций: 9.
Вывод: Количество итераций зависит от точности (eps). С умением точность возрастает количество итераций.