i | x | y | z |
0,5 | 0,5 | 0,5 | |
0,875 | 0,5 | 0,375 | |
0,78981 | 0,49662 | 0,36993 | |
0,78521 | 0,49662 | 0,36992 |
Останавливаясь на приближении x (3), будем иметь:
x = 0,7852; y = 0,4966; z =0,3699.
Мы получили систему линейных уравнений, неизвестными в которой выступают величины . Решив ее, например, методом Гаусса, мы получим некое новое приближение к , т.е. . Выражение (3) можно представить как обобщение на систему уравнений итерационного метода Ньютона, рассмотренного в предыдущей главе:
, (4)
где в данном случае
– матрица Якоби, которая считается для каждого (s) приближения.
Критерием окончания итерационного процесса является условие (Можем принять под как норму , так и ). Достоинством метода является высокая скорость сходимости. Сходимость метода зависит от выбора начального приближения: если , то итерации сходятся к корню. Недостатком метода является вычислительная сложность: на каждой итерации требуется находить матрицу частных производных и решать систему линейных уравнений. Кроме того, если аналитический вид частных производных неизвестен, их надо считать численными методами.
Метод простых итераций.
Метод простых итераций для решения (1) аналогичен методу, рассмотренному при решении нелинейных уравнений с одним неизвестным. Прежде всего, выбирается начальное приближение , а исходная система уравнений преобразуется к эквивалентной системе вида
, (5)
и по ней осуществляется итерационный цикл. Если итерации сходятся, то они сходятся к решению уравнения (1). Обозначим . Достаточным условием сходимости является . Скорость сходимости метода сильно зависит от вида конкретно подбираемых функций , которые должны одновременно удовлетворять условиям эквивалентности (5) и (1), и обеспечивать сходимость итерационного процесса.
Например, для исходной системы уравнений эквивалентная итерационная система (5) может быть представлена в следующем виде:
,
где множители = –0.15 и = –0.1 подбираются из анализа условий сходимости.
Листинг программы решения системы 2 х 2 (Паскаль)
uses crt;
var
d,e,x1,x2,y1,y2:real;
c,k,p:integer;
ch:char;
function f1(x1,x2:real):real;
begin
f1:=x1*sin(x1)-x2;
end;
function f2(x1,x2:real):real;
begin
f2:=x1*x1+x2*x2-1;
end;
procedure fun_y1_1_y2;
begin
y1:= x1-f1(x1,x2)/2+f2(x1,x2)/8;
y2:= x2+f1(y1,x2)/2-f2(x1,x2)/2;
end;
procedure fun_y1_y2;
begin
y1:= x1-f1(x1,x2)/2+f2(x1,x2)/8;
y2:= x2+f1(x1,x2)/2-f2(x1,x2)/2;
end;
procedure outputofresult;
begin
clrscr;
writeln('Korni uravnenia:');
writeln('x1 = ', y1:1:5);
writeln('x2 = ', y2:1:5);
writeln('Pogreshnosty priblegenia = ', d:1:7);
writeln;
writeln('Kolichestwo iteraziy = ',k);
writeln('Dlia prodolgenia nagmite lubui klavishu...');
repeat ch:= readkey until ch <> '';
k:=k+1;
end;
begin
repeat
k:=0; e:=0.001;
clrscr;
writeln('Reshenie sistem nelineinyh uravneni');
writeln('');
writeln('1 - Metod prostoiq iterazy');
writeln('2 - Metod Zeydely');
writeln('0 - Exit');
writeln('');
write('Enter: ');
readln(p);
c:=0;
if p=1 then c:=1;
if p=2 then c:=2;
if p=0 then c:=0;
case c of
0:begin
exit;
end;
1:begin
writeln('Vvedite nachalnoe priblegenie:');
write('x1 = ');
readln(x1);
write('x2 = ');
readln(x2);
repeat
fun_y1_y2;
d:= abs(y1-x1);
if abs(y2-x2)>d then d:= abs(y2-x2);
outputofresult;
x1:= y1; x2:= y2;
until d<e;
end;
2:begin
writeln('Vvedite nachalnoe priblegenie:');
write('x1 = ');
readln(x1);
write('x2 = ');
readln(x2);
repeat
fun_y1_1_y2;
d:= abs(y1-x1);
if abs(y2-x2)>d then d:= abs(y2-x2);
outputofresult;
x1:= y1; x2:= y2;
until d<e;
end;
end;
until (p<1) or (p>2);
end.
Решение контрольного примера
Метод простой итерации:
Начальное приближение
x1 = 0.9
x2 = 0.6
Корни уравнения
x1 = 0.80992
x2 = 0.58662
Погрешность приближения = 0.0006517
Количество итераций = 4
Метод Зейделя:
Начальное приближение
x1 = 0.9
x2 = 0.6
Корни уравнения
x1 = 0.80928
x2 = 0.58648
Погрешность приближения = 0.0006042
Количество итераций =11
Проверка:
0.80928*sin(0.80928) - 0.58648 0
(0.58648)2 + (0.80928)2 -1 0