当Sympy solveset()应该返回数值ans时,它返回ConditionSet()

2024-09-29 21:26:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我用sympy来解下列相当复杂的方程:

{1美元^

我想要一个单一的数值解,它必须是正的。在

我的脚本如下:

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)

我用任意数表示modepercentageXmin和{}

这就回来了

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))绘制方程表明存在一个单一的正解,如下图所示:

The plotted function

我寻找了更大的范围,而且似乎没有任何其他点函数等于0。matlab能够找到同一方程的单一数值解。在

值得一提的是,使用sympy solve()函数(根据文档过时)而不是solveset()返回{}

我如何得到它等于0的值,如图所示?是否超出了sympy 1.0的容量?在

如您所见,我在代码中指定了答案应该是一个正实数,所以我不明白为什么它只找到部分解。在


Tags: logmodesqrtsigma数值oo方程xmin

热门问题