给定一个数,如何求它的平方根(不能使用内置函数,如sqrt()函数)

牛顿法:在实数域和复数域上近似求解方程的方法。

多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。

方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根

设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) = x2 - a = 0的根

(1)在曲线f(x)=x^2-a上任取一点(x0,f(x0)),x0≠0,该点的切线方程为: 
这里写图片描述 
(2)该切线与x轴的交点为: 
这里写图片描述

(3)不断用新的交点来更新原来的交点(即逼近的过程) 
根据牛顿迭代的原理,可以得到以下的迭代公式:

          

代码:

import math
#要开根得数
a = 2
#初始值
x = 1.0
p = 1e-5
while math.fabs(x*x-a) > p:
    x = (x + a/x) / 2.0
print(x)

结果:

1.4142156862745097

参考:https://www.cnblogs.com/wangkundentisy/p/8118007.html

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值