Метод Ньютона возвращает NaN

Я написал простую рекурсивную версию метода Ньютона:

#include <cmath>

using namespace std;

double DeriveAt(double (*f)(double), double x){
return( (f(x+0.001)-f(x-0.001))/0.002 );
};

double FindRoot(double (*f)(double), double x0){
double corr=f(x0)/DeriveAt(f,x0);
if(abs(corr) > 1.E-7)
FindRoot(f, x0-corr);
else return(x0);
};

Если я вызываю свою функцию, например, FindRoot(sin, 4), NaN возвращается Я проверил функцию, напечатав значение x0 после каждого шага, и все, кажется, работает до последней итерации. По какой-то причине, функция вызывает себя еще раз, чем на самом деле, вероятно, создавая что-то вроде 0/0 при расчете последнего corr,

0

Решение

Если я изменю

if(abs(corr) > 1.E-7)
FindRoot(f, x0-corr);

в

if(abs(corr) > 1.E-7)
return FindRoot(f, x0-corr);

затем FindRoot(sin, 4) возвращает что-то, приближающее Пи.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]