Математическое моделирование и численные методы в решении технических задач
4.3. Метод Зейделя
Теоретические сведения
Метод Зейделя (иногда называемый методом Гаусса-Зейделя) является модификацией метода простой итерации, заключающейся в том, что при вычислении очередного приближения x(k+1) его уже полученные компоненты x1(k+1), ...,xi - 1(k+1) сразу же используются для вычисления xi(k+1).
В координатной форме записи метод Зейделя имеет вид:
x1(k+1) = c11x1(k) + c12x2(k) + ... + c1n-1xn-1(k) + c1nxn(k) + d1 x2(k+1) = c21x1(k+1) + c22x2(k) + ... + c2n-1xn-1(k) + c2nxn(k) + d2 ... xn(k+1) = cn1x1(k+1) + cn2x2(k+1) + ... + cnn-1xn-1(k+1) + cnnxn(k) + dn где x(0) - некоторое начальное приближение к решению.
Таким образом i-тая компонента (k+1)-го приближения вычисляется по формуле
xi(k+1) = ? j=1i-1 cijxj(k+1) + ? nj=i cijxj(k) + di , i = 1, ..., n
Условие окончания итерационного процесса Зейделя при достижении точности е в упрощенной форме имеет вид:
|| x (k+1) - x (k) || ? е.
Блок схема
Текст задачи
var a:array[1..100,1..100] of integer;
t:text;
i,j,m,n,k:byte;
e,ed,alfa:real;d:boolean; x:array[1..100] of real;
begin
ed:=0.001;
assign(t,H:Phoenix4.txt);
reset(t);
while not eof(t) do
begin
i:=i+1;
j:=0;
while not eoln(t) do
begin
j:=j+1;
read(t,a[i,j]);
end;
readln(t);
end;
close(t);
n:=i;
m:=j;
for i:=1 to n do begin
for j:=1 to m do
write(a[i,j], );
writeln;
end;
repeat
k:=k+1;
writeln(k=,k, );
for i:=1 to n do
begin
x[i]:=a[i,n+1]/a[i,i];
for j:=1 to n do
if j<>i then x[i]:=x[i]-(a[i,j]*x[j])/a[i,i];
write(x[,i,]=,x[i]:0:5, );
end;
d:=false;
for i:=1 to n-1 do
begin
alfa:=0;
for j:=1 to n do
alfa:=alfa+(a[i,j]*x[j]);
e:=abs((alfa-a[i,n+1])/(a[i,n+1]));
write(e=,e:2:9, );
if e>=ed then d:=true;
end;
writeln;
until not d;
end.
Результаты
2 |
4 |
3 |
7 |
|
1 |
8 |
0 |
2 |
Корни уравнений х1=2; х2=-1; х3=0; х4=4;
Вывод
Достоинства метода Зейделя в том, что он достаточно прост в написании текста программы, недостатки метода в том, что объем текста программы большой и громоздкие операции.