我正在尝试实现一些基本的线性代数运算,其中之一就是一个上(下)三角矩阵的求逆运算。有没有简单且稳定的算法可以做到这一点?
谢谢。
我正在尝试实现一些基本的线性代数运算,其中之一就是一个上(下)三角矩阵的求逆运算。有没有简单且稳定的算法可以做到这一点?
谢谢。
是的,使用回代法。 一个标准的矩阵求逆算法是先找到其LU分解(分解成下三角矩阵和上三角矩阵),在三角形部分上使用回代法,然后将结果组合以获得原始矩阵的逆。
It is much faster and numerically stabler to keep the matrix L itself in memory and compute
inv(L)b
with back-substitution whenever you need to do something else with inv(L).
Note that the customary algorithm for inverting it requires solving the systems
inv(L)[1 0 0 ...],
inv(L)[0 1 0 ....],
inv(L)[0 0 1 ....]
and so on, so you see it is much easier not to invert it at all.
假设B是A的逆三角矩阵,您可以使用以下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
哇,这几乎是数值分析课程一半的内容了。标准算法可以解决它,这里有一堆现成的代码在这里。对于这个和大多数其他常见的数值分析问题,最终的来源是《Numerical Recipes》。