Метод Ньютона расходится для некоторых полиномов

Я пытался реализовать метод Ньютона для полиномов. Подобно:

double xn=x0;
double gxn=g(w, n, xn);

int i=0;
while(abs(gxn)>e && i<100){
xn=xn-(gxn/dg(w, n, xn));
gxn=g(w, n, xn);

i++;
}

где g(w, n, xn) вычисляет значение функции и dg(w, n, xn) вычисляет производную.

Как x0 Я использую отправную точку M который я нашел, используя теорему Штурма.

Моя проблема в том, что этот метод расходится для некоторых полиномов, таких как x^4+2x^3+2x^2+2x+1, Может быть, это не регулярно, но я заметил, что это происходит, когда решение уравнения является отрицательным числом. Где я могу найти объяснение?

Редактировать:
дециграмм

double result=0;
for(int i=0; i<n+1; i++)
result+=w[i]*(n-i)*pow(x, n-i-1);

где n — степень полинома

1

Решение

Я не уверен, почему вы говорите, что это расходится.

Я реализовал метод Ньютона аналогично вашему:

double g(int w[], int n, double x) {
double result = 0;
for (int i = 0; i < n + 1; i++)
result += w[i] * pow(x, n - i);
return result;
}

double dg_dx(int w[], int n, double x) {
double result = 0;
for (int i = 0; i < n ; i++)
result += w[i] * (n - i) * pow(x, n - i - 1);
return result;
}

int main() {

double xn = 0;        // Choose initial value. I chose 0.
double gx;
double dg_dx_x;
int w[] = { 1, 2, 2, 2, 1 };
int i = 0;
int n = 4;

do {
gx = g(w, n, xn);
dg_dx_x = dg_dx(w, n, xn);
xn = xn - (gx / dg_dx_x);
i++;
} while (abs(gx) > 10e-5 && i < 100);

std::cout << xn << '\n';
}

И это дает -0.997576, что близко к решению -1,

2

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

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

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