|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
27.12.2009, 13:54 | #1 |
Пользователь
Регистрация: 04.10.2009
Сообщений: 23
|
Пояснение по методу Зейделя.
Есть программа, она работает, но я не знаю какая переменная что означает и как происходит само вычесление (в программе, с математикой я вроде разобрался) в функции реализующей метод (Seidel). Прошу добавить в эту программу коментарии, поясняющие где что.
# Program Zeidel; Uses CRT; Const maxn = 8; 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[i]); end; End; { Процедура вывода результатов } Procedure WriteX(n :Integer; x: Vector); Var i: Integer; Begin For i := 1 to n do Writeln('x', i, ' = ', x[i]); End; { Функция, реализующая метод Зейделя } Function Seidel(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 Seidel := 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[i]; x[i] := x[i] - (1 / a[i, i]) * (s1 + s2 - b[i]); If Abs(v - x[i]) > m then m := Abs(v - x[i]); end; Until m < e; Seidel := true; End; Var n, i: Integer; a: Matrix; b, x: Vector; e: Data; m_file: text; Begin ClrScr; assign(m_file,'rez.txt'); Writeln('Programa dly resheniy lineinih system uravneniy metodom Zeidely'); Writeln; Writeln('Vvedite poryadok systemy, ot 2 do 8'); Write('>'); Read(n); if (n>=2) and (n<=8) then writeln('Dannie vvedini korrektno') else begin writeln('Programma ne prednaznachena dly etih dannih'); exit; end; Writeln; Writeln('Vvedite tochnost vichisleniy'); Repeat Write('>'); Read(e); Until (e > 0) and (e < 1); Writeln; Writeln('Vvedite rashirennuy matricu'); ReadSystem(n, a, b); Writeln; { Предполагаем начальное приближение равным нулю } ReWrite(m_file); For i := 1 to n do x[i] := 0; If Seidel(n, a, b, x, e) then begin Writeln('Rezultat vichisleniy, viveden na ekran i sohranen v fail'); WriteX(n, x); for i:=1 to n do Begin writeln(m_file, x[i]); end; Close(m_file); readln; end else Writeln('Metod Zeidely ne shoditsy dly vvedenoy systemy'); Writeln; readln; end. # -------------------------------------------- С уважением, Антон. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос по методу Perform | voron29 | Общие вопросы Delphi | 1 | 03.06.2008 11:20 |
Передача данных Access Word (пояснение) | Dryuks | Microsoft Office Access | 1 | 28.01.2008 06:06 |
Помогите дописать пояснение | RECREATOR | Помощь студентам | 4 | 10.12.2007 09:07 |