首页 > 解决方案 > 找到满足条件的矩阵

问题描述

我希望在 MATLAB 中解决以下问题,但不知道要使用哪个命令。

找到一个矩阵 B,st A * B = I 和 0 <= B*a <= b

其中 A 和 B 是矩阵,a 和 b 是向量。I 是单位矩阵。

知道要使用什么吗?fsolve没有用,我不知道如何在linprog.

例子:

A = [1 0 -1; 0 1 1];
a = [8; 6];
b = [15; 10; 10];

使用 cvx 的解决方案:

cvx_begin
variable B(3,2)
min (B)
subject to
    A*B == diag(ones(2,1));
    0 <= B*a;
    b >= B*a;
cvx_end

标签: matlabmatrixlinear-programming

解决方案


为了解决这些问题,linprog您必须列出:

  • 平等
  • 不平等

所以我们有六个未知数:

B = [x1 x2
     x3 x4
     x5 x6]

不等式是:

在此处输入图像描述

在此处输入图像描述

以支持的格式linprog (A*x <= b)给我们:

A = [8  6  0  0  0  0
     0  0  8  6  0  0
     8  6  0  0  8  6
    -8 -6  0  0  0  0
     0  0 -8 -6  0  0
     0  0  0  0 -8 -6];

b = [15 10 10 0 0 0]

注意到为了变换>=0in<=0已经乘以-1.

平等是:

在此处输入图像描述

以支持的格式linprog (Aeq*x == beq)给我们:

Aeq = [1  0  0  0 -1  0
       0  1  0  0  0 -1
       0  0  1  0  1  0
       0  0  0  1  0  1]

beq = [1 0 0 1]

我们可以认为所有变量都具有相同的“权重”,我们的目标函数可以定义为f = [1 1 1 1 1 1]。但如果您更改这些权重,它也将起作用(并将提供另一种解决方案)。您可以将其视为 6D 空间的形状,其中某些维度可以被压缩或拉伸(但不能弯曲)。例如f = [1 0.25 1 1 -1 1/2]也是一个选项...

f = [1 1 1 1 1 1] %which correspond to [x1 x2 x3 x4 x5 x6]

s = linprog(f, A,b,Aeq,beq,-10,10) %solve the problem with arbitrary lower and upper boundary.

一种可能的结果:

s = [ 10
     -12 
      9
      13 
      9 
     -12]

其中给出:

B = [10 -12
     9   13
     9   -12]

更大问题的自动化:

% B Matrix size
s1 = 3;
s2 = 2;

% Variable
A  = [1 0 -1; 0 1 1];
B  = sym('X', [s1 s2])
ax = [8; 6];
bx = [15; 10; 10];

% Convert linear equations to matrix form
[Aeq,beq] = equationsToMatrix(A*B == eye(s2))
[A1,b1]   = equationsToMatrix(B*ax == bx)
[A2,b2]   = equationsToMatrix(-B*ax == 0)

% Solve the problem
%      (      f      ,          A            ,            b           ,       Aeq  ,      beq  ,  lb,ub)
linprog(ones(s1*s2,1),[double(A1);double(A2)], [double(b1);double(b2)], double(Aeq),double(beq), -10,10)

推荐阅读