К содержанию
Решение систем нелинейных уравнений методом простых итераций
>
restart;
>
epsilon:=0.00001;
Задаем точность вычисления.
>
with(linalg):
Активизируем пакет линейной алгебры.
Warning, the protected names norm and trace have been redefined and unprotected
Задаем систему уравнений.
>
eqn1:=cos(y+0.5)-x=2; eqn2:= sin(x)-2*y=1;
>
eqn11:=x=cos(y+0.5)-2; eqn22:= y= (sin(x)-1)/2;
Рисуем график для определения первого приближения.
>
plot({cos(y+0.5)-2,arcsin(2*y+1)},y=-1..-0.9);
Задаем нулевое приближение.
>
x0:=-1.; y0:=-0.9;
Задаем матрицы и функции.
>
X:=matrix(2,1,[x,y]);
>
x:=y-> cos(y+.5)-2; y:=x->1/2*sin(x)-1/2;
Задаем матрицу F
(x) :
>
Phi:=matrix(2,1,[x(y),y(x)]);
Задаем матрицу Якоби:
>
J:=matrix(2,2,[diff(Phi[1,1],x),diff(Phi[1,1],y),diff(Phi[2,1],x),diff(Phi[2,1],y)]);
Задаем ф-ию для проверки условия сходимости метода:
>
JJ:= (u,t)->sqrt((-sin(t+.5))^2+(1/2*cos(u))^2);
Условие сходимости метода:
>
JJ(x0,y0)<1;
Матрица X0 :
>
X0:=matrix(2,1,[x0,y0]);
>
X1:=matrix(2,1,[x(y),y(x)]);
Задаем любое p>
e :
>
p:=10000*epsilon;k:=0;
Задаем цикл для вычисления корней с заданной точностью:
>
while p>epsilon do k:=k+1; X0:=matrix(2,1,[x0,y0]); X1:= matrix(2,1,[x(y0),y(x0)]); p:=abs(norm(evalm(X1-X0)));print(______________________СЛЕДУЮЩАЯ_ИТЕРАЦИЯ_____________________); x0:=X1[1,1]; y0:=X1[2,1];end;
>
...
где p - погрешность вычисления на каждой итерации в цикле (по нему выполняется условие остановки цикла)!
>
solve({eqn1,eqn2},{x,y});
Находим корни системы средствами Maple
Проверяем
>
is(abs(-1.097394140-x0)<epsilon);
>
is(abs(-.9450111638-y0)<epsilon);
Заданная точность достигнута на 9-ой итерации.
Наверх
К содержанию
|