如何用python和sympy解决多元不等式?

我使用python和Sympy很新…并且使用sympy解决了多变量不等式问题.

假设我在文件中有很多函数,如下所示:

    cst**(sqrt(x)/2)/cst
    exp(sqrt(cst*x**(1/4)))
    log(log(sqrt(cst + exp(x))))
    (y**(1/4) + y)**cst
    sqrt(y/log(x))/cst
    sqrt(cst**log(cst) + x)
    (y**2)**(x/4)
    sqrt(y*sqrt(cst**y))
    log(sqrt(2)*sqrt(cst)*x)

我需要派生它们,设置常量的值并检查是否,对于每个函数f,

    df/dx > 0
    df/dy < 0 

x在[0,oo]中,y在[0,1]中.

推导我使用:

    dx = diff(f, x)
    dy = diff(f, y)

然后当我尝试:

    cst = 2 #(for example) 
    solve(dx > 0) 

我收到了这个错误:

    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/local/lib/python2.7/dist-packages/sympy/solvers/solvers.py", line 634, in solve
symbols=symbols)
    File "/usr/local/lib/python2.7/dist-packages/sympy/solvers/inequalities.py", line 374, in reduce_inequalities
    raise NotImplementedError("only univariate inequalities are supported")
    NotImplementedError: only univariate inequalities are supported

但如果我尝试:

    x=Symbol('x', real=True, postive=True, nonzero=True)
    y=Symbol('y', real=True, postive=True, nonzero=True)
    solve(x**2+y > 0)

我有 :

    True

这是好的和可行的答案.
无论如何,有没有解决多元不等式并始终得到可行的答案?

例如,我想得到:
        解决(X ** 2-Y 0)
        或(x> -sqrt(y),x> sqrt(y))

解决方法:

当尝试使用SymPy解决此问题时,您会收到一条非常明确的错误消息:NotImplementedError:仅支持单变量不等式.请注意,这意味着如果您提供解决此问题的算法,SymPy团队将非常高兴.

现在很明显,sympy.solve功能不够强大,你可以尝试另一种方法.最近(在0.7.2中)一个隐含的绘图程序被添加到sympy中,可以绘制表达式评估为True的位置.遗憾的是,它只是一个数字解决方案,而不是一个可以从解决中得到的符号解决方案,但它可能就足够了:

从图像中可以看出,只有一行表达式会改变符号,因此求解expr == 0可能会给你你想要的东西.事实确实如此:

上一篇:python – 测试矩阵在有限域上是否可逆


下一篇:python – 可能是’sympy`比Mathematica慢得多吗?