如何使用SymPy的nsolve求解小数值范围内的方程根?
SymPy数值求解表达式零点的问题
目标表达式与绘图代码
from sympy import * x = symbols("x") y = pi*(7.92e-24*x*(1 - exp(2.47376311844078e-6/x)) + 3.91844077961019e-30*exp(2.47376311844078e-6/x))/(x**7*(1 - exp(2.47376311844078e-6/x))**2) interval = 0, 1e-6 plot(y, (x, *interval))
求解过程中的问题
- 绘图确认:表达式
y在x≈0.5e-6附近存在零点 - 符号求解失效:尝试
solve(y, x)求解符号解,程序长时间无响应,无法得到结果 - 单初始点数值求解偏差:使用
nsolve(y, x, 0.5e-6)得到结果0.250000500000000,与预期的零点位置不符,符合SymPy文档中nsolve不保证找到初始点附近根的说明 - 二分法求解遇阻:
- 直接用原区间
(0, 1e-6)并指定solver="bisect",触发ZeroDivisionError,推测是区间包含0导致表达式分母为0 - 缩小区间至
(0.4e-6, 0.6e-6)后,抛出ValueError: Could not find root within given tolerance. (0.297846609020060650238 > 2.16840434497100886801e-19),求解失败
- 直接用原区间
内容的提问来源于stack exchange,提问作者finefoot
相关产品推荐
相关产品推荐

