LU分解,是一种比较有用的求解线性矩阵方程AX = b的方法。当然,它只是在未知数量有限的情况下才能发挥它的优势。怎么求解A = LU呢,方法挺多,这里介绍一种常用的方法。直接上代码:
for(int i = 0; i < N; i++)
{
for(int j = i + 1; j < N; j++)
{
Aji = Aji / Aii; //update L
for(int k = i+1; k < N; k++)
Ajk -= Aik * Aji; //update U.
}
}
这里直接将分解之后的LU存放在原始数组中。这里Aii是U里面的主对角单元,而下三角L的主对角单元都为1,不储存。
利用LU decomposition求解方程,如果碰到一些病态的问题,可以使用pivoting 技术,在Numerical Reape??一书中有详细介绍。