![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 09.12.2010
Сообщений: 1
|
![]()
РЕШЕНИЕ СЛАУ МЕТОДОМ ГАУССА-ЗЕЙДЕЛЯ.
НУЖНО ВПИСАТЬ ПОДПРОГРАММУ КОТОРАЯ ОПРЕДЕЛЯЕТ МАКСИМАЛЬНЫЙ ЭЛЕМЕНТ СТРОКИ УРАВНЕНИЯ И МЕНЯЕТ СТОЛБЦЫ ТАК ЧТОТБЫ МАКСИМАЛЬНЫЕ ЭЛЕМЕНТЫ НАХОДИЛИСЬ НА ГЛАВНОЙ ДИАГОНАЛИ! Uses CRT; Const maxn = 10; Type Data = Real; Matrix = Array[1..maxn, 1..maxn] of Data; Vector = Array[1..maxn] of Data; { Процедура ввода расширенной матрицы системы } Procedure ReadSystem(n: Integer; var a: Matrix; var b: Vector); Var i, j, r: Integer; Begin r := WhereY; GotoXY(2, r); Write('A'); For i := 1 to n do begin GotoXY(i * 6 + 2, r); Write(i); GotoXY(1, r + i + 1); Write(i:2); end; GotoXY((n + 1) * 6 + 2, r); Write('b'); For i := 1 to n do begin For j := 1 to n do begin GotoXY(j * 6 + 2, r + i + 1); Read(a[i, j]); end; GotoXY((n + 1) * 6 + 2, r + i + 1); Read(b); end; End; { Процедура вывода результатов } Procedure WriteX(n :Integer; x: Vector); Var i: Integer; Begin For i := 1 to n do Writeln('x', i, ' = ', x); End; { Функция, реализующая метод Гаусса-Зейделя } Function Zeidel(n: Integer; a: Matrix; b: Vector; var x: Vector; e: Data) :Boolean; Var i, j: Integer; s1, s2, s, v, m: Data; Begin { Исследуем сходимость } {For i := 1 to n do begin s := 0; For j := 1 to n do If j <> i then s := s + Abs(a[i, j]); If s >= Abs(a[i, i]) then begin Zeidel := false; Exit; end; end;} Repeat m := 0; For i := 1 to n do begin { Вычисляем суммы } s1 := 0; s2 := 0; For j := 1 to i - 1 do s1 := s1 + a[i, j] * x[j]; For j := i to n do s2 := s2 + a[i, j] * x[j]; { Вычисляем новое приближение и погрешность } v := x; x := x - (1 / a[i, i]) * (s1 + s2 - b); If Abs(v - x) > m then m := Abs(v - x); end; Until m < e; Zeidel := true; End; Var n, i: Integer; a: Matrix; b, x: Vector; e: Data; Begin ClrScr; Writeln('Программа решения систем линейных уравнений по методу Гаусса-Зейделя'); Writeln; Writeln('Введите порядок матрицы системы (макс. 10)'); Repeat Write('>'); Read(n); Until (n > 0) and (n <= maxn); Writeln; readln; Writeln('Введите точность вычислений'); Repeat Write('>'); Read(e); Until (e > 0) and (e < 1); Writeln; readln; Writeln('Введите расширенную матрицу системы'); ReadSystem(n, a, b); Writeln; readln; { Предполагаем начальное приближение равным нулю } For i := 1 to n do x := 0; If Zeidel(n, a, b, x, e) then begin Writeln('Результат вычислений по методу Гаусса-Зейделя'); WriteX(n, x); readln; end else Writeln('Метод Гаусса-Зейделя не сходится для данной системы'); Writeln; readln; Writeln('Press Enter to exit'); readln; End. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C дополните | TRAY | Помощь студентам | 0 | 17.06.2010 23:21 |
дополните задачу! | Alexsey1991 | Помощь студентам | 5 | 15.12.2009 19:20 |
как ппеределать обычную прогу в прогу из функциональных блоков | серг | Помощь студентам | 0 | 07.12.2009 22:08 |
Написать прогу | Ддмитрий | Помощь студентам | 4 | 08.01.2009 19:06 |