2

A、B 和 C 是矩阵。

A*B = C

现在我想做一个反向操作,即使用 B 和 C 计算 A。我该怎么做?Matlab 说 B 应该是一个方阵来计算它的逆。

4

3 回答 3

6

如果存在唯一的解决方案,那么最好使用 pinv 来找到它。使用 schwarz 提出的示例...

A = [2 3 4];
B = [11 11 11; 12 12 12; 13 13 13];
C = A*B;

Ahat = C*pinv(B)
Ahat =
        2.788       3.0415       3.2949

问题是,B 是单数的。所以可能有无限多的解决方案。

B = magic(3)
B =
     8     1     6
     3     5     7
     4     9     2
A = [2 3 4];
C = A*B
C =
    41    53    41

Ahat = C*pinv(B)
Ahat =
            2            3            4

Ahat = C/B
Ahat =
     2     3     4

看到 pinv 和 slash 都产生相同的解决方案,因为 B 是非奇异的并且它是条件良好的。

但是,如果我们尝试一些条件不太好的东西呢?在下一个示例中,我将使用一个并不是那么糟糕的矩阵。

>> A = [2 3 4];
>> B = [1 1 1;1 2 3;2 3 4.00001]
B =
    1              1              1
    1              2              3
    2              3        4.00001

嗯,它有一个相当大的条件数,但这个矩阵不是我所说的数字奇异矩阵。

cond(B)
ans =
           2865128.4655819

C = A*B
C =
                        13                        20                  27.00004

现在让我们尝试几种不同的解决方案。

format long g
Ahat1 = C*pinv(B)
Ahat1 =
     2     3     4

pinv 做得很好。

Ahat2 = C/B
Ahat2 =
          2.00000000017764          3.00000000017764          3.99999999982236

Ahat3 = C*inv(B)
Ahat3 =
          1.99999999953434          2.99999999953434          4.00000000046566

slash 和 inv 都不错,尽管在这种情况下显然更糟。对于这个问题,pinv 解决方案似乎更稳定一些。

我们也不妨对此进行 QR 分解。使用旋转解决方案以获得最佳稳定性。请注意,当您的系统几乎是单一的时,我们仍然会遇到问题。

[Q,R,P] = qr(B);

您可以通过检查 R 来发现问题。最后一个对角线元素与其余元素相比很小。这将导致解决方案出现问题,放大任何噪声。

R
R =
         -5.09902735824196         -2.35339392337313         -3.72620671848107
                         0         0.679365175314723         0.339681455393392
                         0                         0     -2.88675134520189e-06

QR 因子具有 Q*R*P' = B 的性质。所以我们可以在这里求解 A:

Ahat4 = ((C*P)/R)*Q'
Ahat4 =
          2.00000000076851           3.0000000007685           3.9999999992315

请注意,我已将括号安排得尽可能高效,因为 MATLAB 将使用 R 的属性作为三角矩阵来简单地进行反向求解。我们不希望 MATLAB 分解已经分解的矩阵。

但是现在让我们看一下vahid提出的一个:

Ahat5 = C*B'*(inv(B*B'))
Ahat5 =
              1.9970703125               2.998046875              4.0029296875

然而,vahid 提出的解决方案简直太糟糕了。不要使用最后一种形式。请。人们告诉你不要这样做是有原因的,或者他们应该告诉你!是的,我知道有一群人不知道所涉及的数学,他们一直在传播它。你甚至可以在一些不知情的教科书中找到它。

pinv 的好处是它适用于任何矩阵,无论是否为单数。如果存在解决方案,它会找到一个。如果解决方案是唯一的,它将起作用。如果解决方案不是唯一的,那么您期望什么?

于 2012-09-29T14:53:01.030 回答
2

您可以使用反斜杠运算符:

% if A*C = B
C = A\B

我不认为非矩形 A 的解决方案是独一无二的......

于 2012-09-29T13:29:08.060 回答
-1

首先将两边乘以A*B=CB'B的转置):

A*B*B'=C*B'

D=B*B'(D是方阵):

A*D=C*B'

现在将上述等式的两侧乘以inv(D)

A*D*inv(D)=C*B'*inv(D)

D*inv(D)=I, 所以:

A=C*B'*inv(D)
于 2012-09-29T13:44:34.233 回答