|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.12.2011, 17:39 | #1 |
Регистрация: 04.12.2011
Сообщений: 6
|
Метод Зейделя Якоби
Доброго времени суток. Проверьте пожалуйста код на наличие ошибок.. В методе Зейделя затаилась ошибка.. Ее надо найти.. Не верно считается количество итераций...
[PASCAL]const n=40; type mass=array [1..n,1..n] of real; vect=array [1..n] of real; procedure yakobi(const a:mass;b:vect;e:real; var x1 : vect); var x2,pogr:vect; m,v,max,s,f:real; i,j,l:integer; begin for i := 1 to n do x1[i] := 0; l := 0; repeat for i:=1 to n do begin x2[i]:=b[i]; for j:=1 to n do if i<>j then x2[i]:=x2[i]-a[i,j]*x1[j]; x2[i]:=x2[i]/a[i,i]; end; max:=0; for i:=1 to n do if abs(x1[i]-x2[i])>max then max:=abs(x1[i]-x2[i]); m:=max; x1:=x2; l:=l+1; until m<e; f:=0; max:=0; for i:= 1 to n do begin f:=0; for j:=1 to n do f:=f+a[i,j]*x1[j]; pogr[i]:=b[i]-f; if max<pogr[i] then max:=pogr[i] end; writeln('iter(yakobi)=',l,'max=',ma x); end; procedure zeidel(const a:mass;b:vect;e:real;var x3:vect); var pogr:vect; m,s,v,max,f:real; i,j,l,it:integer; begin it := 0; for i:=1 to n do x3[i]:=0; repeat m:=0; for i:=1 to n do begin s:=0; for j:=1 to n do if i<>j then s:=s+a[i,j]*x3[j]; v:=x3[i]; x3[i]:=(b[i]-s)/a[i,i]; pogr[i]:=abs(x3[i])-abs(v); if pogr[i]>m then begin max:=pogr[i]; m:=pogr[i]; end; end; it:=it+1; until m<e; f:=0; max:=0; for i:= 1 to n do begin f:=0; for j:=1 to n do f:=f+a[i,j]*x3[j]; pogr[i]:=b[i]-f; if max<pogr[i] then max:=pogr[i] end; writeln('iter(zeidel)=',it,'max=',m ax); end; var a:mass; b,x,x1,x3:vect; m,e,s,v,max,pogr,sum:real; i,j,l,iter_yakobi,iter_zeidel:integ er; begin randomize; for i:=1 to n do begin for j:=1 to n do begin a[i,j]:=random*50-10; b[i]:=random*50-10; end; end; for i:=1 to n do begin sum:=0; for j:=1 to n do if i<>j then sum:=sum+abs(a[i,j]); if sum>abs(a[i,i]) then a[i,i]:=sum+10; end; readln(e); yakobi(a,b,e,x1); zeidel(a,b,e,x3); readln; end.[/PASCAL] |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Метод Зейделя с++ | Fackey | Помощь студентам | 3 | 29.01.2011 16:26 |
Паскаль. Метод Якоби | Flashmob | Помощь студентам | 0 | 23.12.2010 05:13 |
Метод Зейделя | True_girl | Помощь студентам | 1 | 19.04.2010 16:16 |
СЛАР метод Зейделя | maloy-rom | Общие вопросы C/C++ | 4 | 17.02.2010 23:03 |
Метод итераций и метод Зейделя | prikolist | Общие вопросы C/C++ | 40 | 18.06.2009 17:40 |