我搜索了Gilbert-Peierls算法,但是我没有找到任何有用的东西(好吧,我找到了this,但是它不能正常工作)。我认为问题是第二部分,也是那些问题:
U(1:k, k) = x(1:k);
L(k:N, k) = x(k:N)/U(k, k);
实际应该是(根据this示例):
U(1:N, k) = x(1:N);
L(k:N, k) = x(k:N)/U(k, k);
另外,在那个例子中,L是单位矩阵,我觉得有点奇怪。有人可以描述算法吗? (有或没有代码)
答案 0 :(得分:1)
我是Gilbert-Peierls算法的作者之一。这是我们原始技术报告的链接:
https://ecommons.cornell.edu/bitstream/handle/1813/6623/86-783.pdf
它详细描述了算法,但不是用Matlab术语。
然而,自从我们写这篇文章以来,现有技术发展很快。本文可能是一个有用的起点:
http://epubs.siam.org/doi/abs/10.1137/S0895479895291765
不幸的是,我找不到这篇文章的公开副本。
答案 1 :(得分:0)
首先,Gilbert-Peierls的算法是左看分解,并在每次迭代中循环一列。因此,“k”表示循环该列。注意,U是上三角矩阵,因此每列中k以下的条目为零。这就是它的原因。
其次,Gilbert-Peierls的算法以身份L矩阵开始,是一种计算其对角线条目的方法。它帮助用户首先轻松计算U的对角线条目,然后处理U的其余条目。这就是Gilbert-Peierls算法的作用。