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

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Система нелинейных уравнений»

textual
Листинг программы
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.

Объяснение кода листинга программы

  1. Объявлены переменные x0, x1, y0, y1, F, G, dFdx, dFdy, dGdx, dGdy, b1, b2: Real;
  2. Задана требуемая точность eps = 0.001;
  3. Начальные приближения для x1 и y1 вычисляются как (0.5 + 1.5)/2 = 1.0 и sin(1.0 + 1) - 1.2 = 0.8303;
  4. Вычисляются первые неизменяемые частные dFdx = -1.0 и dGdy = 2.0;
  5. Запускается итерационный цикл;
  6. В цикле переменные x0, y0, dFdy, dGdx пересчитываются с использованием предыдущих значений x1, y1;
  7. Вычисляются значения F и G;
  8. Вычисляются значения b1 и b2;
  9. Следующие приближения x1 и y1 вычисляются как (b2dFdy - b1dGdy) / (dGdydFdx - dFdydGdx) = 0.8303 и -(b1 + dFdx*x1) / dFdy = 1.0;
  10. Цикл продолжается, пока следующие приближения не будут отличаться от предыдущих не более чем на eps = 0.001;
  11. Когда условия выполняются, выводится текущее значение x1 и y1;
  12. Вычисляются значения b1 и b2 для проверки;
  13. Выводятся значения b1 и b2.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы