牛顿迭代法求一个数的平方根(python)

本文介绍了一种使用牛顿迭代法计算任意正实数平方根的Python实现。通过不断迭代更新变量值,直到计算结果与实际平方根的差值小于预设的误差阈值。文中提供了完整的代码示例,并对比了自定义函数与Python内置函数math.sqrt的计算结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# !/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@Author: P♂boy
@License: (C) Copyright 2013-2017, Node Supply Chain Manager Corporation Limited.
@Contact: 17647361832@163.com
@Software: Pycharm
@File: sqrt.py.py
@Time: 2018/11/19 16:22
@Desc:牛顿迭代法求一个数的平方根
1对给定正实数x和允许误差e,令变量y取任意正实数值,如另y=x
2如果y*y与x足够接近, 即|y*y-x|<e,计算结束并把y作为结果
3取z=(y+x/y)/2
4将z作为y的新值,回到步骤1
"""
import math
def sqrt(x):
    y = x
    while abs(y * y - x) > 1e-6:
        y = (y + x / y) / 2
    return y

print(sqrt(5))
print(math.sqrt(5))

结果
在这里插入图片描述

利用牛顿迭代解整的算术平方根一个常用学技巧,它基于牛顿-拉弗森方,一种用于逼近方程根的迭代算。对于的算术平方根,我们通常需要找到满足 \(x^2 = n\) 的 \(x\)牛顿迭代的基本思想是在已知某一点附近函近似的情况下,通过不断地更新这个点来逼近函的实际根。对于平方根,我们的目标函是 \(f(x) = x^2 - n\),其中 \(n\) 是给定的。我们需要找到使得 \(f(x) = 0\) 的 \(x\) 的值。 ### 步骤描述: 1. **选择初始猜测** (\(x_0\)):可以选择 \(n\) 自身作为初始猜测,因为对于大多情况而言,这会给出一个比较接近实际平方根的起始点。 2. **迭代公式**:迭代步骤可以通过下面的公式完成: \[ x_{k+1} = x_k - \frac{f(x_k)}{f'(x_k)} \] 对于平方根计算,这意味着: \[ x_{k+1} = x_k - \frac{x_k^2 - n}{2x_k} \] 这简化为: \[ x_{k+1} = \frac{x_k + \frac{n}{x_k}}{2} \] 3. **终止条件**:当两次连续的迭代结果之差小于预设的精度阈值时,停止迭代,将最后一次迭代的结果视为最终的平方根估计。 ### Python 实现: ```python def newton_sqrt(n, tolerance=1e-10): if n < 0: raise ValueError("Cannot compute the square root of a negative number.") # 初始猜测可以取 n 或者设置为 1 如果不知道从哪里开始 x_k = n while True: next_x = (x_k + n / x_k) / 2 if abs(next_x - x_k) < tolerance: return next_x x_k = next_x # 示例: 16 的平方根 result = newton_sqrt(16) print(f"Square root of 16 is approximately {result}") ``` 上述代码段实现了牛顿迭代来计算任意的算术平方根,并提供了一个简单的错误处理机制来防止对负的处理。您可以调整 `tolerance` 参以达到所需的精确度级别。此外,这个函也可以轻松地应用于浮点的情况,只需稍作修改即可处理非整值。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值