大家好,我正在编写程序来计算行列式(这部分我已经做了)和 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
最佳答案
这是 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
关于matlab - 通过部分旋转的高斯消元法求逆矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17010565/