python函数实现求非负实数平方根,在shell里调用

编写python函数实现求非负实数平方根,在shell里调用

算法

牛顿迭代法

利用切线逼近曲线,求曲线零点,对于曲线 y = f ( x ) y = f(x) y=f(x),采用迭代的方法求其零点,在点 ( x n , f ( x n ) ) (x_n, f(x_n)) xn,f(xn)处曲线切线方程: y = f ( x n ) + f ′ ( x n ) ( x − x n ) y = f(x_n) + f'(x_n)(x - x_n) y=f(xn)+f(xn)(xxn),其与x轴交点横坐标即为下一个 x n x_n xn,得到通用迭代公式:
x n + 1 = x n + f ( x n ) f ′ ( x n ) x_{n+1} = x_n + \frac{f(x_n)}{f'(x_n)} xn+1=xn+f(xn)f(xn)

对于求已知参数 x x x 的平方根,即求方程 y 2 − x = 0 y^2 - x = 0 y2x=0 的解,代入即可解得:
x x x平方根的迭代公式为: y n + 1 = y n + x y n 2 y_{n+1}=\frac{y_n+\frac{x}{y_n}} {2} yn+1=2yn+ynx

描述如下

  1. 对给定正整数 x x x和允许误差 e e e,令变量 y y y取任意正整数值,如令 y = x y=x y=x
  2. 如果 y 2 y^2 y2 x x x 足够接近,即 ∣ y 2 − x ∣ < e |y^2 - x| < e y2x<e,计算结束并把 y y y 作为结果;
  3. z = y + x y 2 z = \frac{y + \frac{x}{y}}{2} z=2y+yx ;
  4. z z z 作为 y y y 的新值,回到步骤1

函数代码

def sqrt(x):
    y = 1.0
    while abs(y * y - x) > 1e-6:
        y = (y + x/y)/2
    return y

调用函数

import sys
sys.path.append(r"D:\python")
import sqrt
y = sqrt.sqrt(5)
y
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值