使用MuPAD,我想知道一组线性不等式是否存在至少一个解决方案。例如,以下线性不等式系统:
我在MuPAD中通过以下方式解决:
solve({x+z>2*y,z>y,2*z>2*x,x>0,y>0,z>0},{x,y,z}
和MuPAD以某种表示法返回解决方案集:
但是,我并不关心解决方案集的确切形式,即它是有限的还是无限的,我只关心是否存在至少一个可行的解决方案。
我想从Matlab调用MuPAD,询问是否存在不等式的解决方案集,然后返回"是"或"不"回答。我可以测试返回的空集,但我不知道如何测试符号变量是否代表空集。
答案 0 :(得分:0)
以下是使用MuPAD solve
和sym/isempty
called from Matlab的示例:
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
功能:
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
,这很难处理。您可能希望使用以下内容:
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,表示空/零。)可能还有其他方法。