Python用Newton-Raphson法求解悬链线双曲函数输出异常问题
问题原因
- 你求解的方程
sinh(y) = k*y(其中k=3/2=1.5)本身存在两个实根:一个是平凡解y=0,另一个是你期望的非零正根≈1.6221(即你给出的1/0.6164729394的计算结果)。 - Newton-Raphson迭代法的收敛结果高度依赖初始值的选择,你设置的初始值
y=0.4落在了平凡根y=0的吸引域范围内,因此迭代过程最终收敛到了0,而非你需要的正根。
修复方案
调整初始值到正根的吸引域内即可,例如将初始值设置为2,修改后的代码如下:
from math import sinh, cosh y = 2 # 调整初始值到正根吸引域 k = 3/2 for _ in range(5): # Newton-Raphson方法迭代 y = y - (sinh(y)-y*k)/(cosh(y)-k) print(y) print(y)
运行后输出结果如下:
1.659764008460233 1.622834784935176 1.6221275121920267 1.6221270915992256 1.6221270915989473 1.6221270915989473
该结果和你期望的1/0.6164729394完全匹配。
内容的提问来源于stack exchange,提问作者user16657590
相关产品推荐
相关产品推荐

