GAECHKA
Твоя помощница в решении задач

Система нелинейных уравнений

Добрый День!!! Помогите Пожалуйста используя метод Ньютона, решить систему нелинейных уравнений с точностью до 0.001.
Система:
sin(y+1)-x = 1.2
2y+cosx = 2
0
вопрос задан

Источник


2 ответа
Метод Ньютона решения систем нелинейных уравнений состоит в линеаризации исходных уравнений, когда их решение сводится к итерационному процессу решения системы линейных уравнений. В данном случае задача сводится к решению системы двух линейных уравнений. Запишем исходную систему в виде
F(X,Y) = sin(Y+1) - X - 1,2 = 0, (1)
G(X,Y) = 2Y + cos(X) - 2 = 0. (2)
Найдем первые (линеаризация) частные производные от функций F(X,Y) и G(X,Y) по X и Y:
F'x(X,Y) = -1, F'y(X,Y) = cos(Y+1),
G'x(X,Y) = -sin(X), G'y(X,Y) = 2.
Система линейных уравнений для итерационного процесса имеет вид
F'x(Xk,Yk) Xk+1 + F'y(Xk,Yk)Yk+1 + F(Xk,Yk) - F'x(Xk,Yk) Xk - F'y(Xk,Yk)Yk = 0,
G'x(Xk,Yk) Xk+1 + G'y(Xk,Yk)Yk+1 + G(Xk,Yk) - G'x(Xk,Yk) Xk - G'y(Xk,Yk)Yk = 0.
Здесь Xk,Yk - решение системы на предыдущем шаге, а Xk+1,Yk+1 - очередное приближение.
Многое зависит от выбора нулевого приближения, а еще надо обеспечить сходимость. Из (1) и (2) видно, что неизвестная X находится в пределах отрезка [-2,2; -0,2], а неизвестная Y - в пределах отрезка [0,5; 1,5]. В качестве нулевого приближения можно взять середины этих отрезков. Ну а дальше сама программа:

Uses ………..;
Const  eps = 0.001;        // Требуемая точность
Var x0, x1, y0, y1, F, G, dFdx, dFdy, dGdx, dGdy, b1, b2 : Real;
Begin
  y1:=( 0.5 + 1.5)/2;       // Нулевые приближения
  x1:=sin(y1+1)-1.2;
  dFdx:= -1.0;               // Неизменяемые первые частные
  dGdy:= 2.0;               // производные
 
// Итерационный цикл
  Repeat
    x0:=x1; y0:=y1;              // Предыдущее приближение
    dFdy:= cos(y0+1);         // Изменяемые первые частные
    dGdx:=-sin(x0);             // производные
    F:=sin(y0+1) - x0 - 1.2;
    G:=2*y0 + cos(x0) - 2;
    b1:=F - dFdx*x0 - dFdy*y0;
    b2:=G - dGdx*x0 - dGdy*y0;
    //Вычисление следующего приближения (решение системы двух линейных уравнений)
    x1:=(b2*dFdy-b1*dGdy)/(dGdy*dFdx - dFdy*dGdx);
    y1:=-(b1+dFdx*x1)/dFdy;
  // Итерации заканчиваются, когда следующие приближения отличаются
  // по модулю от предыдущих не более, чем на заданную точность
  Until (Abs(x0-x1)=eps) and (Abs(y0-y1)=eps);
 
  WriteLn('  X= ',x1:6:4,'; Y= ',y1:6:4);
  WriteLn('  Проверка: ');
  b1:=sin(y1+1) - x1;
  b2:=2*y1 + cos(x1);
  WriteLn('  sin(Y+1) - X =',b1:6:4);
  WriteLn('  2Y + cos(x) =',b2:6:4);
 
End.
Будь добр, скинь программу файлом
Не могу скомпилировать