【问题标题】:Finding matrix inverse by Gaussian Elimination With Partial Pivoting通过部分旋转的高斯消元法求矩阵逆
【发布时间】:2014-05-27 15:55:51
【问题描述】:

大家好,我正在编写程序来计算行列式(这部分我已经做过)和使用 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

【问题讨论】:

  • 如果您要搜索的是算法(而不是编程部分),那么math.stackexchange.com 可能是提出这个问题的更好地方。

标签: matlab matrix-inverse


【解决方案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

【讨论】:

  • 什么是 B ?矩阵A的行梯形?
  • B 将是在您通过一些排列获得 A->I 之后的缩减行梯队。既然你已经改变了思想,这还不是你的逆行。你仍然需要乘以你的排列矩阵来撤销你所做的所有切换。
  • 好的,你确定这个有效吗 [A]^(-1) = [B]*[P] ,因为它对我来说看起来很可疑。
  • 它不是那样工作的,想象一下你的 GEPP 很幸运,你不需要执行行交换,所以你的排列矩阵只是单位矩阵,所以你声称 A^(-1 ) = B*I (也就是 B) 这没有意义...
  • 当然可以。在您描述的情况下,您将有 [A|I] --> GE --> [I|B] 或 A^{-1} = B。我编辑了我的答案以使这一点更清楚。
猜你喜欢
  • 1970-01-01
  • 2019-02-08
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多