Задача с модифицированным методом Ньютона-Рафсона на Mathematica - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь получить корни функции с помощью модифицированного метода Ньютона-Рафсона, но на второй итерации значение для xi + 1 увеличивается до -393, разве это не должно приближаться к ожидаемому значению root? (что составляет 0,34997). Также я пытаюсь получить root с ошибкой ниже критерия "eS". Просьба помочь

n = 50;
eS = 10^-4;
f[x_] := (x^2 - 10 x + 25) (x - Exp[-3 x])
Plot[f[x], {x, -1, 2}]
xi = 0.5;
Do[
 f[xi]; f'[xi]; f''[xi];
 xi1 = xi - (f[xi]*f'[xi]/(f'[xi])^2 - f[xi]*f''[xi]);
 If[Abs[f[xi]] < 10^-7,
  Print["The root is approx= ", xi1 // N, " iterations needed: ", i];
  Break[]];
 eA = Abs[(xi1 - xi)/xi1];
 If[eA < eS,
  Print["The root is approx= ", xi1 // N, " iterations needed: ", i];
  Break[]];
 xi = xi1;
 If[i == n, Print["Did not converge in ", n, " iteration(s)"]];
 , {i, 1, n}
 ]

1 Ответ

0 голосов
/ 25 февраля 2020

Существует много разных методов «Модифицированного Ньютона Рафсона». Я знаком с

u[x_] := f[x]/f'[x]

Do[
 xi1 = xi - u[xi]/u'[xi];
 If[Abs[f[xi]] < 10^-7, 
  Print["The root is approx= ", xi1 // N, " iterations needed: ", i];
  Break[]];
 eA = Abs[(xi1 - xi)/xi1];
 If[eA < eS, 
  Print["The root is approx= ", xi1 // N, " iterations needed: ", i];
  Break[]];
 xi = xi1;
 If[i == n, Print["Did not converge in ", n, " iteration(s)"]];, {i, 1, n}]

Вот более функциональный способ (нет Do l oop)

FixedPointList[# - u[#]/u'[#] &, .5]
(* {0.5, 0.372215, 0.350544, 0.34997, 0.34997, 0.34997, 0.34997} *)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...