首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MuPAD:如何确定一组线性不等式解的存在性?

MuPAD:如何确定一组线性不等式解的存在性?
EN

Stack Overflow用户
提问于 2014-03-19 16:49:07
回答 1查看 590关注 0票数 0

使用MuPAD,我想知道一组线性不等式是否至少存在一个解。例如,下列线性不等式系统:

我在MuPAD中解决这个问题的方法是:

代码语言:javascript
复制
solve({x+z>2*y,z>y,2*z>2*x,x>0,y>0,z>0},{x,y,z}

MuPAD以某种类型的符号返回解决方案集:

然而,我并不关心解集的确切形式,即它是有限的,还是无限的,我只关心是否至少有一个可行的解。

我想从Matlab调用MuPAD,询问这些不等式是否存在一个解集,然后返回一个“是”或“不是”的答案。我可以测试返回的空集,但不知道如何测试符号变量是否表示空集。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-19 17:30:43

下面是一个使用MuPAD's solvesym/isempty 从Matlab调用的示例

代码语言:javascript
复制
syms x y z;
~isempty(feval(symengine,'solve',[x+z>2*y,z>y,2*z>2*x,x>0,y>0,z>0],[x y z]))
~isempty(feval(symengine,'solve',[x+z>2*y,z>y,2*z>2*x,x>0,y>0,z<0],[x y z]))

第一个案例返回true,1,表示至少有一个解决方案。第二个返回false,0,因为没有解决方案。

如果要在MuPAD中执行此操作,可以使用is函数:

代码语言:javascript
复制
not(is(solve([x+z>2*y,z>y,2*z>2*x,x>0,y>0,z>0],[x,y,z])={}))
not(is(solve([x+z>2*y,z>y,2*z>2*x,x>0,y>0,z<0],[x,y,z])={}))

然而,第一个案例将返回UNKNOWN,这是相当困难的处理。您可能需要使用类似于以下内容的内容:

代码语言:javascript
复制
is(length(solve([x+z>2*y,z>y,2*z>2*x,x>0,y>0,z>0],[x,y,z]))>1)
is(length(solve([x+z>2*y,z>y,2*z>2*x,x>0,y>0,z<0],[x,y,z]))>1)

它假设只有一个空的解决方案,length只有一个。( MuPAD代码是两个字符,{},但它作为一个字符显示,它的长度为1,表示为空/零。)也许还有其他的方法。

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

https://stackoverflow.com/questions/22512734

复制
相关文章

相似问题

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