Python系列问题(四)

该代码示例定义了一个自定义的平方根函数sqrt(n),采用牛顿迭代法逼近平方根,然后用此函数来实现三维空间中点到原点的欧氏距离计算,无需使用内置的sqrt函数。通过不断迭代优化猜测值,当误差小于1e-5时停止,返回四舍五入后的结果。
摘要由CSDN通过智能技术生成

问题

编写一个函数euclidean(x, y, z)求任一点距离原点的欧氏距离,欧氏距离定义如下:三维空间里点a和b的坐标如果分别为()和(),则ab的欧式距离的计算机公式是:

输入输出示例:

输入 1.0, 1.0, 1.0

输出 1.73

提高:尝试不用sqrt函数来实现该功能。

方案:(手撸sqrt)

#使用pow函数自定义一个平方根函数
def sqrt(n):
    if n <= 1:
        return n
    x = n
    while True:
        root = (x + n/x) / 2
        if abs(root - x) < 1e-5:
            break
        x = root
    return round(root, 2)

#欧氏距离函数euclidean(x, y, z)使用pow函数和自定义的平方根函数实现
def euclidean(x, y, z):
    distance = sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2))
    return round(distance, 2)

#示例输入输出
print(euclidean(1.0, 1.0, 1.0))

sqrt()解释

这段代码定义了一个自定义的平方根函数 sqrt(n),通过迭代的方式逼近给定数 n 的平方根,并返回计算得到的结果。

具体实现过程是:

  1. 首先判断给定的数 n 是否小于或等于 1,如果小于或等于 1,则直接返回 n
  2. 将变量 x 初始化为 n,然后进入一个无限循环。在每一次循环中,都计算出 n/x 的值,然后将其与 x 相加并除以 2,得到迭代公式 (x + n/x) / 2,即可求得新的猜测值 root
  3. 判断上一次的猜测值 x 与当前猜测值 root 的差是否小于一个非常小的误差容限(这里取 1e-5),如果小于该容限,则说明已经得到了足够精确的平方根,退出循环。
  4. 如果上一步判断失败,则继续进行迭代,将当前猜测值 root 赋值给变量 x,再次进入循环继续计算新的猜测值。
  5. 当循环结束时,返回最终计算得到的平方根值,并使用 round 函数对它进行四舍五入,保留两位小数并返回结果。

总的来说就是通过迭代逼近计算得到一个数的平方根,这个方法叫做牛顿迭代法(Newton's method)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值