Matlab如何计算欠定系统的解?

时间:2015-10-04 10:16:00

标签: r matlab

为了求解矩形线性系统Ax=b,其中A=mxnn>m Mtlab首先执行QR分解,然后通过替换求解三角形线性系统。例如: 如果A4*6矩阵:

A =

    0.8147    0.9058    0.1270    0.9134    0.6324    0.0975
    0.2785    0.5469    0.9575    0.9649    0.1576    0.9706
    0.9572    0.4854    0.8003    0.1419    0.4218    0.9157
    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340

b=

   -0.9661
    0.1590
   -0.0391
   -0.2491

解决Ax=b我们只是这样做:

x=A\b;

,解决方案是:

x =

   -0.4284
   -0.6475
         0
   -0.1153
         0
    0.7662

此计算中的以下步骤是:

  1. A的QR分解,然后Ax=b相当于Q*R*x=b;
  2. 作为inv(Q)=Q'而R是上三角形,解决系统将返回求解R*x=b1 b1=Q'*b;
  3. 由于R是大小为6*4的上三角形,我们必须执行反向替换。知道R不是方形的,Mtlab如何进行反向替换?

    我正在将此计算移植到C并成功完成它直到R * x = b1,我在后面替换时丢失了,我想找到与Matlab相同的结果

    修改 对于上面的矩阵A: 解决Ax=b等同于解决Rx=b1其中:

    R =
    
       -1.5117   -1.3991   -1.0952   -0.7786   -1.0819   -1.3007
             0   -0.5641   -0.2197   -0.6538   -0.2920   -0.2481
             0         0   -0.8692   -0.2077    0.1422   -0.9295
             0         0         0   -0.8426    0.2182    0.2125
    

    b1 =
    
       -0.9661
        0.1590
       -0.0391
       -0.2491
    

    这个系统是通过反向替换来解决的,因为R是上三角形,这在方形三角矩阵(即m = n)的情况下是直接的,但是,R不是正方形,如何Matlab执行反向替换以查找x

2 个答案:

答案 0 :(得分:1)

MATLAB如何详细实现只有Mathworks知道的欠定情况!但是你可以这样做的方法如下。

A*x = b
A' = Q*R

现在,如果你看看R,你会得到一些形式

R = [R1; zeros] 

其中R1是正方形。

您可以将解决方案表达为:

x = Q * [inv(R1')*b; zeros]

因为你表明你已经解决了反转方形矩阵的问题,这应该很容易:)

答案 1 :(得分:1)

所以我不能100%确定MATLAB的功能,但我可以告诉你以下内容:

对于您的欠定矩阵A(nxm),我们可以采用A' = QR。我们也看到A = R' Q'。请注意,现在,R有n个非零行。然后我们可以通过识别R' Q< x = b,然后Q' x = inv(R')* b来解决系统问题。 RHS可以通过反向替换来解决,我们称之为y。所以Q' x = y。但Q是自我Hermitian,所以x = Qy。你有最小二乘解决方案。

在MATLAB中这样做我们得到:

>> A'*inv(A*A')*b

ans =

   -0.4256
   -0.3057
    0.3568
   -0.2745
   -0.2823
    0.4249

我在R' \ b上面使用了反斜杠,但很清楚,你可以在自己的日常工作中替代。

我们可以通过使用A:

的伪逆来计算解决方案来验证这一点
std::cout

您可以轻松地检查这是一个有效的解决方案。这应该很容易在C中实现。

希望这会有所帮助。