Newton迭代法數學原理
求非線性方程的根,牛頓迭代法計算公式
一般地,牛頓迭代法具有局部收斂性,爲保證迭代收斂,要求,對充分小的,。如果,,,那麼,對充分小的,當時,由牛頓迭代法計算出的收斂於,且收斂速度是2階的;如果,,,那麼,對充分小的,當時,由牛頓迭代法計算出的收斂於,且收斂速度是1階的;
問題
利用牛頓迭代法求的根
輸入:初值,精度,最大迭代次數
輸 出:方程根的近似值或計算失敗標誌
程序流程
核心代碼
#include <cmath>
#include <cstdio>
#include <iostream>
using namespace std;
double x, e1, e2;
int n;
double f(double x) { return cos(x) - x; }
double df(double x) { return -sin(x) - 1; }
int main() {
scanf("%lf%lf%lf%d", &x, &e1, &e2, &n);
for (int i = 1; i <= n; i++) {
double F = f(x), DF = df(x);
if (fabs(F) < e1) {
printf("%lf", x);
return 0;
}
if (fabs(DF) < e2) {
printf("Failed");
return 0;
}
double x1 = x - F / DF;
double tol = fabs(x - x1);
if (tol < e1) {
printf("%lf", x1);
return 0;
}
x = x1;
}
printf("Failed");
return 0;
}