Создаю программу на c, которая должна оценивать корень многочлена 10-го порядка, используя метод Ньютона Рафсона.Пользователь вводит 10 коэффициентов, и предполагается оценить корень уравнения.абсолютная относительная погрешность составляет 0,00000001, а максимально допустимое число итераций - 70. Пример кода приведен ниже.
n=0;
while(abserr<=0.00000001){
yold=y;
y = y-(poly(y,coefficients,11)/poly_der(y,coefficients,11));
ynew = y;
error=ynew-yold;
abserr=sqrt(error*error);
printf("iteration x%d = %.2f error =%.2f\n",n+1,y,abserr);
n++;
iteration++;
if(iteration==70){
printf("you have reached the maximum number of iterations\n");
break;}
}
функции poly и poly_der вычисляют значение полинома и его производную соответственно.ниже приведены определения.
float poly(float x, float coefficients[], int order)
{
int idx;
float total;
for (idx = 0; idx < order; idx++)
total += coefficients[idx] * pow(x, idx);
return total;
}
float poly_der(float x, float coefficients[], int order)
{
int idx;
float total;
for (idx = 0; idx < order; idx++)
total += coefficients[idx] * deri(x, idx);
return total;
}
Derive - функция, которая вычисляет производную члена в полиноме.К сожалению, эта программа дает неожиданные результаты.я не могу понять, где я не прав, потому что он компилируется и работает нормально.Есть ли другой способ, которым я могу оценить корень, используя метод Ньютона.Как я могу улучшить программу, чтобы она давала требуемые результаты.