我有4个输入变量(浮动):
我想为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我想用数学和渐近方法来求解这个方程,但是它给了我以下错误信息:
TypeError:无法从0.707106781186547*(-s**2 - 0.287682072451781)/s创建强积金
我的代码如下:
from mpmath import erf, log, sqrt
from sympy import Symbol, solveset, S
percentage = 0.95
mode = 2
Xmin = 1.
Xmax = 1.5
s = Symbol('s')
eqn = (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)
solveset(eqn, s, domain=S.Reals)强积金是由mp数创建的浮点数类型。
我想我把问题缩小到erf()函数,它会返回
EmptySet()当我跑的时候
solveset(log(Xmax) - (log(mode) + s ** 2), s, domain=S.Reals)我不知道下一步该尝试什么,任何帮助都将不胜感激!
我最初认为这是数学上的一个问题,但是这个方程在matlab中得到了成功的解决,所以这个问题很可能来自于交感或数学问题。
发布于 2016-06-12 12:09:01
丢失mpmath导入的erf,并使用交感版本解决您的错误。
from sympy import Symbol, solveset, S, erf, log, sqrt
percentage = 0.95
mode = 2
Xmin = 1.
Xmax = 1.5
s = Symbol('s', real=True)
eqn = (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)
solveset(eqn, s)另请注意:
log和sqrt中导入mpmath。从sympy那里得到它们对你的结果不会有什么影响solveset调用上保存此操作。进一步使用的例子是包测试中的这里 (如果需要的话)。
https://stackoverflow.com/questions/37759214
复制相似问题