【问题标题】:Sympy solveset() returns ConditionSet() when it should be returning a numerical answerSympy solveset() 在应该返回数字答案时返回 ConditionSet()
【发布时间】: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)

我对@9​​87654325@、percentageXminXmax 使用任意数字

返回

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 的能力范围吗?

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

【问题讨论】:

    标签: python math sympy


    【解决方案1】:

    我认为solveset 正试图找到一个象征性的解决方案。如果你只想要一个数值解,我认为findroot 是要使用的函数。

    【讨论】:

    • 您可以使用sympy.nsolve,它是mpmath.findroot 的包装器。或使用scipy 中的一种根查找函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 2022-01-10
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多