牛顿迭代法:

复数域上近似求解方程的方法。

详见:https://www.matongxue.com/madocs/205.html#/madoc

设x*为f(x) = 0 的根

计算公式(迭代公式):xn+1 = xn - f(xn) / f'(xn

带入一个初始点x0 即可启动迭代

xn ->x* (n -> ∞)

 


 

牛顿迭代法在acm中的应用:

1.求解方程的根

HUD 2899

枚举初始迭代点求f'(x) = 0 的根

#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define mem(a, b) memset(a, b, sizeof(a))

const double eps = 1e-9;
double y;
double f(double x) {
    return 6 * x*x*x*x*x*x*x + 8 * x*x*x*x*x*x + 7 * x*x*x + 5 * x*x - y * x;
}
double _f(double x) {
    return 42 * x*x*x*x*x*x + 48 * x*x*x*x*x + 21 * x*x + 10 * x - y;
}
double __f(double x) {
    return 42 * 6 * x*x*x*x*x + 48 * 5 * x*x*x*x + 21 * 2 * x +10;
}
double newton(double x) {
    int tot = 0;
    while(fabs(_f(x))>eps) {
        x -= _f(x) / __f(x);
    }
    return x;
}
int main() {
    int T;
    scanf("%d", &T);
    while (T--) {
        scanf("%lf", &y);
        double ans = min(f(0), f(100));
        for (int i = 0; i <= 100; i++) {
            double x = newton(i);
            if(0<= x && x <= 100) {
                ans = min(ans, f(x));
            }
        }
        printf("%.4lf\n",ans);
    }
    return 0;
}
View Code

相关文章:

  • 2021-08-24
猜你喜欢
  • 2022-12-23
  • 2022-01-28
  • 2022-12-23
  • 2022-02-14
相关资源
相似解决方案