开方 牛顿迭代公式

牛顿迭代公式

设r是f(x) = 0的根,选取x0作为r的初始近似值,过点(x0,f(x0))做 曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中,x(n+1)=x(n)-f(x(n))/f'(x(n))称为r的n+1次近似值,上式称为 牛顿迭代公式
用牛顿迭代法解非线性方程f(x)=0,是把非线性方程线性化的一种近似方法。把f(x)在点x0的某邻域内展开成 泰勒级数 f(x) = f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/2! +… ,取其线性部分(即泰勒展开的前两项),并令其等于0,即f(x0)+f'(x0)(x-x0)=0 ,以此作为非线性方程f(x) = 0的近似方程,若f'(x0)≠0,则其解为x1=x0-f(x0)/f'(x0), 这样,得到牛顿迭代法的一个迭代关系式:x(n+1)=x(n)-f(x(n))/f'(x(n))。
就是反复迭代的过程,求x(n+1),直到 x(n+1)的平方 与 N的差满足一定的精度 比如0.0001

代码

//f(x)=x^2 -n;
//  函数f(x)在x0点的切线与x轴的交点
double getX(double x0, int n)
{
	cout<<x0<<"  "<<endl;
	double  y0=x0 *x0 -n;
	double x1=x0-y0/(2*x0);
	cout<<x1<<endl;
	return x1;
}

//开方
double my_sqrt(unsigned int n)
{
	double x0=1;
	do
	{
		x0=getX(x0,n);
	}while(abs(x0*x0-n)>0.00001);
	return x0;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值