如果A.B = C,给定A,B,C是矩阵,如何使用Matlab从B和C计算A?

时间:2012-09-29 13:24:34

标签: matlab math

A,B和C是矩阵。

A*B = C

现在我想做一个反向,即用B和C计算A.我该怎么办? Matlab说B应该是一个平方矩阵来计算它的倒数。

3 个答案:

答案 0 :(得分: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和斜杠都产生相同的解决方案,因为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
斜线和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

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

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

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

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

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

答案 1 :(得分:2)

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

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

我不认为非矩形A的解决方案虽然是唯一的......

答案 2 :(得分:-1)

首先将A*B=C的两边乘以B'(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)