首页 > 其他 > 详细

牛顿迭代法解k次方根

时间:2021-01-29 15:14:18      阅读:16      评论:0      收藏:0      [点我收藏+]

牛顿迭代法解方程:

\[f(x)=0 \]

\(f\)泰勒展开一阶,得到:

\[f(x)=f(x_0)+f‘(x_0)(x-x_0)+o(x-x_0) \]

\[f(x_0)+f‘(x_0)(x-x_0)=0 \]

\[x=x_0-\frac{f(x_0)}{f‘(x_0)} \]

初值取得合理, 如果递推公式\(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));
}

牛顿迭代法解k次方根

原文:https://www.cnblogs.com/dwt2021/p/14344561.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!