0
点赞
收藏
分享

微信扫一扫

Matlab:矩阵A的p列被b列替代后,更新A的逆

千行 2022-02-08 阅读 103

记录学习过程,多多交流~

       关于矩阵求逆的更新问题:对于一个非奇异矩阵A,如果用某一列向量b替换其第p列,那么如何在A逆的基础上更新出新矩阵的逆呢?
      在这里我们使用updateinv函数。
      首先创建updateinv函数:我们在Matlab中新建一个脚本,存储创建的函数。注意不能直接在matlab界面创建,会报错。

function invA=updateinv(invA,p,b)
%此函数用来计算矩阵A中p列被b列代替后,A的逆的更新
[n,n]=size(invA);
d=invA*b;
if abs(d(p))<eps %若d(p)=0,则矩阵是奇异的,即(A的逆*A的更新)的行列式为0
    warning('替换后的矩阵是奇异的!');
    newinvA=[];
    return;
else
    invA(p,:)=invA(p,:)/d(p); %替换后,对A的逆的p行进行行变换,此时(A的逆*A的更新)的p行除以d(p),将d(p)变为1
    if p>1
        for i=1:p-1
            invA(i,:)=invA(i,:)-d(i)*invA(p,:);  %对A的逆的1:(p-1)行进行相应行变换,此时(A的逆*A的更新)的1:(p-1)的d(p)变为0
        end
    end
    if p<n
        for i=p+1:n
            invA(i,:)=invA(i,:)-d(i)*invA(p,:); %对A的逆的(p+1):n行进行行变换,此时(A的逆*A的更新)的p+1:n的d(p)变为0
        end
    end
end

调用updateinv函数:

已知矩阵A=[1,2,3,4;5,6,1,0;0,1,1,0;1,1,2,3],b=[1;0;1;0],求矩阵A的第2列被b替换后的逆矩阵。

>> A=[1,2,3,4;5,6,1,0;0,1,1,0;1,1,2,3];
>> b=[1;0;1;0];
>> invA=inv(A)

invA =

   -1.5000    0.1000    0.4000    2.0000
    1.5000    0.1000   -0.6000   -2.0000
   -1.5000   -0.1000    1.6000    2.0000
    1.0000         0   -1.0000   -1.0000

>> newinvA=updateinv(invA,2,b)

newinvA =

    0.3333    0.2222   -0.3333   -0.4444
    1.6667    0.1111   -0.6667   -2.2222
   -1.6667   -0.1111    1.6667    2.2222
    1.0000         0   -1.0000   -1.0000

>> A(:,2)=b   %验证,将A的第2列替换为b

A =

     1     1     3     4
     5     0     1     0
     0     1     1     0
     1     0     2     3

>> inv(A)  %求新矩阵的逆,结果与公式一致

ans =

    0.3333    0.2222   -0.3333   -0.4444
    1.6667    0.1111   -0.6667   -2.2222
   -1.6667   -0.1111    1.6667    2.2222
    1.0000   -0.0000   -1.0000   -1.0000
举报

相关推荐

0 条评论