python - Sympy 在求解方程时返回 ConditionSet 对象,而 matlab 在求解相同方程时返回单个 float

标签 python matlab sympy

我有 4 个输入变量( float ):

X最大 最小 百分比 模式 我想求解 s 的以下(相当长的)方程:

> (1/2+1/2*erf((log(Xmax)-(log(mode)+s**2))/(sqrt(2)*s))-(1/2+1/2*erf((log(Xmin)-(log(mode)+s**2))/(sqrt(2)*s))) - percentage == 0

我想使用 sympy 来解方程,但它返回一个 ConditionSet 对象(意味着它无法解方程)

我的代码如下:

from sympy import *

def CalcScaleParam(mode, CIfact, percentage):
    s = Symbol('s', Real=True)
    eqn = (1/2+1/2*erf((log(4)-(log(2)+s**2))/(sqrt(2)*s))-(1/2+1/2*erf((log(1)-(log(2)+s**2))/(sqrt(2)*s)))) - 0.95
    sigma = solveset(eqn, s)
    print(sigma)

CalcScaleParam(2,2, 0.9545)

我的Matlab代码如下:

function sigma = Test()

syms s
eqn =(1/2+1/2*erf((log(4)-(log(2)+s^2))/(sqrt(2)*s))-(1/2+1/2*erf((log(1)-(log(2)+s^2))/(sqrt(2)*s)))) - 0.95 == 0;
sigma = solve(eqn,s);

end

并返回 sigma=0.335

我最初认为这是数学问题,但由于方程在 matlab 中成功求解,我怀疑问题来自 sympy。

最佳答案

分数使用 Python 的整数除法,得到 1/2 == 0。整个表达式减少为 -0.95。使用 1./20.5 或 Rational(1,2) 来声明它。您可能还必须将百分比 0.95 表示为 Rational(19,20)

关于python - Sympy 在求解方程时返回 ConditionSet 对象,而 matlab 在求解相同方程时返回单个 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37818218/

相关文章:

sympy - 如何在 SymPy 中求解这个由两个方程组成的系统?

python - 如何滚动弹性查询结果,python

matlab - 从曲线数据插值

python - 在 python 中使用 beautifulsoup 单击链接

matlab - 如何从矩阵创建文件 .txt?

arrays - Matlab 是否接受非整数索引?

python - 如何在 sympy 中获得数字输出

python - 使用 Sympy 进行导数离散化

python - 通过插值减去 Pandas 中具有不规则和规则时间戳的两个系列

python - 每次我开始构建新的 Flask 应用程序时创建一个新的 `virtualenv` 是一个好习惯吗?