我正在尝试实现一些基本的线性代数运算,其中一个运算是三角形(上部和/或下部)矩阵的反演。有没有一个简单而稳定的算法呢?
谢谢。
答案 0 :(得分:14)
是的,请使用back substitution。反转矩阵的标准算法是找到它的LU分解(分解成下三角形和上三角矩阵),在三角形片上使用反向替换,然后组合结果以获得原始矩阵的逆。
答案 1 :(得分:6)
如果可以的话,不要颠倒它。这是数值线性代数的基本诫命之一。
将矩阵L本身保留在内存中,并且只要你需要用inv(L)做其他事情就用后向替换计算
inv(L)b
,速度和数值更稳定。< / p>
请注意,反转它的惯用算法需要求解系统
inv(L)[1 0 0 ...],
inv(L)[0 1 0 ....],
inv(L)[0 0 1 ....]
等等,所以你会发现它根本不容易反转它。
答案 2 :(得分:3)
给定较低的三角矩阵L,backsubstitution允许您解决系统 L x = b 快速为任何右手b。
要反转L,您可以为右侧求解此系统e1 =(1,0,...,0),e2 =(0,1,...,0),...,en =(0,0,...,1)并将得到的解向量组合成单个(必须是低三角形)矩阵。
如果你对封闭形式的解决方案感兴趣,那么逆的对角线元素是原始对角线元素的逆,当你离开时,逆的其余元素的公式变得越来越复杂从对角线。
答案 3 :(得分:1)
答案 4 :(得分:0)
答案 5 :(得分:0)
作为三角形矩阵A的B逆,您可以使用以下MATLAB代码:
n = size(A,1);
B = zeros(n);
for i=1:n
B(i,i) = 1/A(i,i);
for j=1:i-1
s = 0;
for k=j:i-1
s = s + A(i,k)*B(k,j);
end
B(i,j) = -s*B(i,i);
end
end