我有一个[8x4]矩阵,'A'和一个[8x1]矩阵,'B'。我如何检查是否存在[4x1]矩阵'x',使得A * X = B
?线性规划 - MATLAB
这可以使用MATLAB中的linprog
来完成,但我不确定如何给出约束条件。我试过x = linprog([],[],[],A,B);
,但这似乎不起作用。
如何指定条件x>=0
并将其优化为A*X-B
,以便如果返回0,则知道存在X
。
更新:
在MATLAB pinv
不会在所有情况下工作。请看下面的例子:
A= [1 0 0 0
0 1 -1 -1
-1 -1 1 -1
-1 -1 -1 1
0 0 0 0
0 0 0 0
0 0 0 0
1 1 1 1]
B = [0
0
0
-1
0
0
0
1]
使用pinv
给出x的值:
X = [-2.7756e-017
0.5000
0.5000
0]
但当线性规划使用我得到X为:
X = [ 0
0.5000
0.5000
0]
这是之所以我选择MATLAB中的linprog
工具。我刚刚以前面提到的方式使用了它,但它引发了很多警告。我仍然认为有更好的方法来正确使用这个功能。它没有抛出这个矩阵,但通常当我循环了很多矩阵我的命令窗口溢出与警告。
这是主要问题。我现在所做的是如果((A * pinv(A)* B)== B)那么存在一个解决方案。其中pinv是matlab中的伪逆函数。我认为线性编程很好地处理了这种情况。这就是为什么我正在寻找一种方法来做到这一点。 – 2011-02-04 03:04:53
+1用于记住我以前的问题。谢谢 – 2011-02-04 03:06:33
不,你不知道这是真的。在浮点运算中应用这种EXACT相等的测试将是真实的。使用linprog来尝试做这个测试是愚蠢的。 – 2011-02-04 04:28:19