如何用牛顿法求解立方根?附平方根求解Python参考代码
用牛顿法求解立方根的实现思路
很高兴看到你已经搞定了牛顿法求平方根的代码!要把这个思路扩展到立方根其实非常直观,咱们从牛顿法的核心逻辑出发一步步来:
牛顿法推导立方根迭代公式
牛顿法的核心迭代公式是:x_{n+1} = x_n - f(x_n)/f'(x_n)
要找数k的立方根,本质是求解方程x³ = k,所以定义目标函数:f(x) = x³ - k
对这个函数求导,得到导数:f'(x) = 3x²
把f(x)和f'(x)代入牛顿迭代公式,化简后就能得到立方根的迭代式:x_{n+1} = x_n - (x_n³ - k)/(3x_n²) = (2x_n + k/(x_n²))/3
这个简化后的公式计算起来更高效,咱们就用它来写代码。
基于你现有代码修改的立方根实现
直接把你求平方根的代码稍作调整,就能得到立方根的求解脚本:
from sys import argv def find_cube_root(k, epsilon): guess = k / 2 # 初始猜测值,和平方根一样选k的一半就行 # 终止条件改成判断立方值与k的误差是否小于epsilon while abs(guess**3 - k) >= epsilon: # 替换成立方根的迭代公式 guess = (2 * guess + k / (guess**2)) / 3 print(f"Cube root of {k} is about {guess}.") if __name__ == "__main__": script, k_str, epsilon_str = argv k = float(k_str) epsilon = float(epsilon_str) find_cube_root(k, epsilon)
运行示例
执行命令:$ python3 successive_approximation.py 64 0.001
输出结果大概是:Cube root of 64 is about 4.00000015982348.
关键变化点总结
- 终止条件:从判断
guess² - k的绝对值改成guess³ - k的绝对值 - 迭代公式:替换为立方根对应的牛顿迭代式,核心是把导数从
2*guess换成3*guess²(或者直接用化简后的公式) - 函数名和输出提示对应修改,让逻辑更清晰
内容的提问来源于stack exchange,提问作者Wizard




