我有 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./2
或 0.5
或 Rational(1,2) 来声明它。您可能还必须将百分比 0.95 表示为 Rational(19,20)
。
关于python - Sympy 在求解方程时返回 ConditionSet 对象,而 matlab 在求解相同方程时返回单个 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37818218/