数值线性代数小结
对于数值线性代数(Numerical Linear Algebra,简称NLA)来说有三个最重要的问题:线性方程组,线性拟合和特征值计算。从这个观点来看,NLA的问题
也不是特别的多。但是NLA的复杂性存在于两个方面,一个存在于计算工具上,另一个存在于要处理的问题本身。对于第一个问题,由于使用计算机进行数值运算,不可避免
的会产生精度的问题,所以为了避免精度问题和合理的量化精度产生的影响,NLA会变得非常复杂,对于每一个算法,都会存在对这个算法的分析,现在我个人理解就是扰动
分析。对于每个问题本身,由于矩阵会存在不同的结构,为了利用这些结构的特性,针对每一个结构都会有特定的算法来提高解决问题的速度,这样就会使得同一个问题存在
多个可用的算法,需要使用者针对问题本身做出选择。
对于NLA来说,可以利用的结果包括对称,带状,对角和三角(包括上三角和下三角)。另外一个常用的处理方式就是矩阵分块,使用矩阵分块,利用程序的局部性提升
计算的性能。
对于如何解决这个问题,有一个paper可以很好的说明这一点(The Decompositional Approach to Matrix Computation)。
在这篇文章中作者之处为了解决现在的问题,我们是先通过矩阵分解(Matrix Decomposition),然后利用分解后的矩阵来解决这些问题的。现在最广泛流传的矩阵分解包括LU,
Pivoted LU,LDL,Cholsky,QR,Schur,SVD,Spectral等分解。学习NLA,很大一部分就是在学习如何进行矩阵分解以及如何使用分解来解决问题。
从另外一个角度来看,使用矩阵分解解决问题属于直接方法(Direct Method)。与之相对应的存在另外一种解决问题的方法,称之为迭代式方法(Iterative Method)。
两种方法各有利弊,在不用的场景下有不同的用途。对于迭代式方法,比较出名的有Keylov subspace mehtod, 共轭梯度法(Conjugate Gradient)。
将会在接下来的blog中详细解释主要的矩阵分解方法和迭代式方法。