牛顿迭代法解方程:
将\(f\)泰勒展开一阶,得到:
令
当初值取得合理, 如果递推公式\(x_{n+1}=x_n-\frac{f(x_n)}{f‘(x_n)}\)收敛, 方程的近似解就得到了.
对于\(f(x)=x^k-a\)
有\(x_{n+1}=\frac{k-1}{k}x_n+\frac{a}{kx_n^{k-1}}\)
代码别忘了int转double.
#include<cstdio>
#include<cmath>
const double e = 1e-7;
double power(double b, unsigned int p) {
double a=1;
while (p) {
if (p & 1)a *= b;
b *= b;
p >>= 1;
}
return a;
}
double root(const double& a, const unsigned int& k) {
if(a == 0)return 0;
double x0 = a;
double K= (double)k;
while (fabs(power(x0, k) - a) > e) {
double x1 = (K - 1) / K * x0 + a / (K * power(x0, K - 1));
x0 = x1;
}
return x0;
}
int main() {
double a, e;
unsigned int k;
scanf("%lf%u", &a, &k);
printf("%lf\n", root(a, k));
}
原文:https://www.cnblogs.com/dwt2021/p/14344561.html