我用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)
我用任意数表示mode
、percentage
、Xmin
和{
这就回来了
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()
返回{
我如何得到它等于0的值,如图所示?是否超出了sympy 1.0的容量?在
如您所见,我在代码中指定了答案应该是一个正实数,所以我不明白为什么它只找到部分解。在
我认为
solveset
正在试图找到一个符号化的解决方案。如果您只需要一个数值解,我认为findroot
就是要使用的函数。在相关问题 更多 >
编程相关推荐