Я пытаюсь запрограммировать алгоритм Ньютона-Рафсона, чтобы найти root функции. Чтобы иметь достаточную точность, я ввожу интервал «eps», так что root будет выдан только после того, как ошибка будет меньше, чем «eps». Исходная начальная точка x установлена мной на 1,5.
double func(double x) {
return x * x * x - 4 * x + 1;
}
double funcprime(double x) {
return 3 * x * x - 4;
}
int main()
{
double x_start = 1.5;
double x0= x_start - ((func(x_start)) / (funcprime(x_start)));
double eps = abs(x_start - x0);
while (eps > 0.000001) {
x0 = x_start - ((func(x_start)) / (funcprime(x_start)));
double eps = abs(x_start - x0);
//Following line is there to analyze the problem
cout << "x0= " << x0 <<" " << "x_start= " << x_start << " "<< "eps= " << eps << endl;
x_start = x0;
}
cout << x0;
return 0;
}
Проблема, с которой я столкнулся, заключается в том, что l oop. Хотя после примерно 4 итераций eps уже меньше 0,000001 и даже показан мне как eps = 0, в то время как l oop не отменяется и продолжается вечно. Я надеюсь, что кто-то может помочь мне с этим.