使用牛顿迭代法计算平方根
牛顿迭代法是一种高效的数值计算方法,适用于求解方程的近似解。对于计算平方根,可以将其转化为求解方程 (x^2 - a = 0) 的根,其中 (a) 是待求平方根的数(此处 (a = 2))。牛顿迭代公式为:
[ x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)} = x_n - \frac{x_n^2 - a}{2x_n} = \frac{x_n + \frac{a}{x_n}}{2} ]
初始化值可以取已知近似值 (x_0 = 1.414),通过多次迭代逐步提高精度。
迭代步骤示例
def sqrt_newton(a, initial_guess, precision):
x = initial_guess
while True:
next_x = (x + a / x) / 2
if abs(next_x - x) < precision:
break
x = next_x
return x
# 参数设置
a = 2
initial_guess = 1.414
precision = 1e-10 # 小数点后10位精度
result = sqrt_newton(a, initial_guess, precision)
print(f"sqrt(2) 的近似值为: {result:.10f}")
运行上述代码,输出结果将精确到小数点后10位。牛顿迭代法通常能在很少的迭代次数内达到高精度。
手动验证迭代过程
以初始值 (x_0 = 1.414) 为例:
- 第一次迭代: [ x_1 = \frac{1.414 + \frac{2}{1.414}}{2} \approx 1.41421356237 ]
- 第二次迭代: [ x_2 = \frac{1.41421356237 + \frac{2}{1.41421356237}}{2} \approx 1.41421356237 ]
两次迭代后结果已稳定,满足精度要求。
二分法作为替代方案
如果牛顿迭代法理解困难,可以使用二分法。其原理是通过不断缩小区间范围逼近平方根。
def sqrt_bisection(a, precision):
low = 0
high = max(2, a) # 确保初始区间包含sqrt(a)
while high - low > precision:
mid = (low + high) / 2
if mid * mid < a:
low = mid
else:
high = mid
return (low + high) / 2
result = sqrt_bisection(2, 1e-10)
print(f"sqrt(2) 的近似值为: {result:.10f}")
二分法虽然简单,但收敛速度较慢,通常需要更多次迭代才能达到相同精度。
注意事项
- 牛顿迭代法对初始值敏感,初始值越接近真实值,收敛越快。
- 二分法无需初始猜测,但效率较低。
- 实际应用中,牛顿迭代法是更优选择。