【发布时间】:2016-06-30 02:32:59
【问题描述】:
我正在使用 sympy 来求解以下相当复杂的方程:
我想要一个单一的数值解,它必须是正数。
我的脚本如下:
from sympy import *
def CalcScaleParam_solveset(mode, percentage, Xmin, Xmax):
s = Symbol('s', positive=True)
eqn = (1 / 2 * erf((log(Xmax) - (log(mode) + s ** 2)) / (sqrt(2) * s)) - (1 / 2 * erf((log(Xmin) - (log(mode) + s ** 2)) / (sqrt(2) * s)))) - 0.95
sigma = solveset(eqn, s, domain=S.Reals)
print(sigma)
CalcScaleParam_solveset(2, 0.95, 1, 4)
我对@987654325@、percentage、Xmin 和Xmax 使用任意数字
返回
ConditionSet(s, Eq(0.5*erf(-sqrt(2)*(-s**2 - log(2))/(2*s)) + 0.5*erf(sqrt(2)*(-s**2 - log(2) + log(4))/(2*s)) - 0.95, 0), (-oo, oo))
这意味着方程只有部分解。
但我知道这不是真的,因为用plot(eqn, (s, 0, 1)) 绘制方程表明存在一个正解,如下图所示:
我寻找了更大的范围,并且似乎没有任何其他点函数等于 0。matlab 能够找到同一方程的单个数值解。
值得一提的是,使用 sympy solve() 函数(根据文档已过时)而不是 solveset() 返回 NotImplementedError: multiple generators
如何获得如图所示等于 0 的值?它超出了 sympy 1.0 的能力范围吗?
如您所见,我在代码中指定答案应该是正实数,所以我不明白为什么它只能找到部分解决方案。
【问题讨论】: