0

使用 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,询问是否存在不等式的解决方案集,然后得到“是”或“否”的答案。我可以测试返回的空集,但我不知道如何测试符号变量是否代表空集。

4

1 回答 1

0

这是一个使用 MuPADsolvesym/isempty 从 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)

它假设只有一个空解 Ø 会有一个length1。(MuPAD 代码是两个字符,,{}但它显示为一个,Ø,长度为一,表示空/零。)可能还有其他方式。

于 2014-03-19T17:30:43.740 回答