通过部分旋转的高斯消元寻找矩阵逆

时间:2013-06-09 14:20:28

标签: matlab matrix-inverse

大家好我正在编写程序来计算行列式(这部分我已经做过)和反向矩阵与GEPP。这里出现了问题,因为我完全不知道如何使用GEPP逆矩阵,我知道如何使用高斯消元([A | I] => [I | B])进行逆。我通过互联网搜索但仍然没有线索,你能解释一下吗?

这是我的matlab代码(也许有人会发现它很有用),截至目前它解决了AX = b并计算行列式:

function [det1,X ] = gauss_czesciowy( A, b )
%GEPP
perm=0;

n = length(b);
if n~=m 
error('vector has wrong size');
end
for j = 1:n
    p=j;
    % choice of main element
    for i = j:n
        if abs(A(i,j)) >= abs(A(p,j))
            p = i;
        end
    end
    if A(p,j) == 0
        error('Matrix A is singular');
    end
    %rows permutation
    t       = A(p,:);
    A(p,:)  = A(j,:);
    A(j,:) = t;
    t       = b(p);
    b(p)    = b(j);
    b(j)    = t;
    if~(p==i)
    perm=perm+1;
    end

    % reduction
    for i = j+1:n
        t       = (A(i,j)/A(j,j)); 
        A(i,:)  = A(i,:)-A(j,:)*t; 
        b(i)    = b(i)-b(j)*t; 
    end 
end
%determinant
mn=1;
for i=1:n
    mn=mn*A(i,i);
end
det1=mn*(-1)^perm;
% solution
X   = zeros(1,n); 
X(n) = b(n)/A(n,n); 

if (det1~=0)
for i = 1:n
    s = sum( A(i, (i+1):n) .* X((i+1):n) ); 
    X(i) = (b(i) - s) / A(i,i); 
end
end
end

1 个答案:

答案 0 :(得分:1)

以下是Guassian elimination with partial pivoting的算法。基本上你像往常一样进行高斯消除,但是在每一步你交换行来选择可用的最大值的枢轴。

要获得反向,您必须跟踪切换行的方式并创建permutation matrix P。置换矩阵只是与A矩阵大小相同的单位矩阵,但执行了相同的行切换。然后你有:

[A] --> GEPP --> [B] and [P]

[A]^(-1) = [B]*[P]

我会在几个矩阵上尝试这个以确定。

编辑:我们不是凭经验测试这个,而是让它解决。基本上当你在A中切换行时你正在做的是你将它乘以你的置换矩阵P.你可以在开始GE之前做到这一点并最终获得相同的结果,这将是:

[P*A|I] --> GE --> [I|B] or
(P*A)^(-1) = B

由于反向操作的属性,可以重写:

A^(-1) * P^(-1) = B

你可以将两边乘以右边的P得到:

A^(-1) * P^(-1)*P = B*P
A^(-1) * I = B*P
A^(-1) = B*P