Зацикливание в поиске корня методом касательных (ньютона)
Я написала код, но происходит зацикливание. Объясните, где и почему.
#include <math.h>
#include <iostream>
using namespace std;
double f(double z)
{
return pow(z,3) + pow(z,2) - 9*z + 9; // функция
}
double f1 (double z)
{
return 3*pow(z,2) + 2*z - 9; // производная
}
double e=0.001;
double x;
// Метод Ньютона
int main()
{
int n=0;
double a, b;
cout<<"enter the beginning of the segment ";
cin>> a;
cout<<"enter the end of the segment ";
cin>> b;
if (f(a)*f1(a)<0)
{
x = a;
}
else
{
x = b;
}
while (fabs(f1(x)) > e)
{
x = x - (f(x) / f1(x));
n += 1;
}
cout <<"f( "<<x << ") = " << f(x) << endl;
cout <<"f1( "<<x << ") = " << f1(x) << endl;
cout<< x<< endl;
system("pause");
return 0;
}
Источник: Stack Overflow на русском