
- •Пояснительная записка
- •1.1Графическое решение
- •2. Обзор методов решения систем нелинейных уравнений
- •2.1 Решение систем нелинейных уравнений
- •2.1.1 Метод простых итераций
- •2.1.2 Решение систем нелинейных уравнений методом Ньютона
- •2.1.3Определение матрицы Якоби
- •3.Разработка и отладка программы
- •4. Блок-схема рабочей программы
- •5. Листинг программы
- •6. Решение контрольного примера
- •7. Список литературы
3.Разработка и отладка программы
Будем представлять систему (*) в виде:
(11)
Представим правые части уравнения в виде:
(12)
Для метода простой итерации
(13)
Для метода Зейделя
Для поиска коэффициентов λiј решим систему
(14)
Далее будем использовать систему на рис. (13) для поиска корней уравнения. В программе g1(x1,x2)=y1 и g2(x1,x2)=y2. [3]
4. Блок-схема рабочей программы
При
разработке программы
использовались методы
простой итерации и Зейделя. На вход
подаются начальные значения корней
x1и x2, просчитанные при
помощи графического решения рис. (1а).
Так же необходимо привести систему
уравнений (1)к системе вида(13)вручную,
для использование ее в программе.
Блок-схема метода простой итерации
Блок-схема метода Зейделя
5. Листинг программы
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.
6. Решение контрольного примера
Метод простой итерации:
Начальное приближение
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