首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何用python和sympy解决多元不等式?

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

Stack Overflow用户
提问于 2013-06-11 23:36:57
回答 1查看 8.3K关注 0票数 8

我是一个使用python和Sympy的新手。并得到了一个利用渐近来解决多元不等式的问题。

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

代码语言:javascript
复制
    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,

代码语言:javascript
复制
    df/dx > 0
    df/dy < 0 

X在[0,+oo)中,y在0,1中。

为了派生,我使用:

代码语言:javascript
复制
    dx = diff(f, x)
    dy = diff(f, y)

然后当我尝试的时候:

代码语言:javascript
复制
    cst = 2 #(for example) 
    solve(dx > 0) 

我得到了这个错误:

代码语言:javascript
复制
    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

但如果我试一试:

代码语言:javascript
复制
    x=Symbol('x', real=True, postive=True, nonzero=True)
    y=Symbol('y', real=True, postive=True, nonzero=True)
    solve(x**2+y > 0)

我得到了:

代码语言:javascript
复制
    True

这是一个好的和可行的答案。有没有办法解决多元不等式并总是得到一个可行的答案?

例如,我想得到: solve(x**2-y>0) Or(x>-sqrt(y),x>sqrt(y))

EN

回答 1

Stack Overflow用户

发布于 2013-06-11 23:59:06

在尝试使用SymPy解决这个问题时,您会得到一个非常明确的错误消息:NotImplementedError: only univariate inequalities are supported。请注意,这意味着如果您贡献了一个解决此问题的算法,SymPy团队将非常高兴。

现在很明显,sympy.solve还不够强大,您可以尝试另一种方法。最近(在0.7.2中),一个隐式绘制例程被添加到渐近,它可以绘制表达式求值为True的位置。遗憾的是,这只是一个数值解决方案,而不是您可以从solve获得的符号解决方案,但它可能已经足够了:

从图像中可以看到,只有一行表达式更改了符号,因此求解expr==0可能会得到您想要的结果。事实的确如此:

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17048180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档