数值线性代数

数值线性代数（），又称应用线性代数（）是一门研究在计算机上进行线性代数计算，特别是矩阵运算算法的学科，是数值分析的一个分支。计算机用浮点数运算，无法精确表示无理数数据，因此计算机算法应用于数据矩阵时，有时会产生较大的误差。数值线性代数利用向量和矩阵的性质开发算法，以最大限度地减少这误差，同时还要确保算法尽可能高效。
数值线性代数试图利用精度有限的计算机解决连续的数学问题，因此在自然科学和社会科学中的应用同连续数学一样广泛。这些问题包括图像处理、信号处理、金融工程学、材料科学模拟、结构生物学、数据挖掘、生物信息学、流体动力学和其他很多领域。矩阵方法尤其用于有限差分法、有限元法和微分方程建模。和大卫·鲍三世（David Bau III）注意到数值线性代数的广泛应用，认为它“同微积分和微分方程一样是数学科学的基础”，尽管是个相对较小的领域。由于矩阵和向量的很多性质也适用于函数和算子，因此数值线性代数也可视作泛函分析中注重实用算法的一支。
数值线性代数中的常见问题如LU分解、QR分解、奇异值分解、特征分解等，然后可用于解答常见的线性代数问题，如求解线性方程组、定位特征值、最小二乘优化等。数值线性代数的核心问题是开发在有限精度计算机上应用真实数据时不会引入误差的算法，这通常通过迭代法来实现，而非直接方法。
历史.
数值线性代数是由约翰·冯·诺伊曼、艾伦·图灵、詹姆斯·哈迪·威尔金森、阿尔斯通·斯科特·豪斯霍尔德、、等计算机先驱开发的，目的是将最早的计算机应用于连续数学问题，如弹道问题与偏微分方程求解。约翰·冯·诺依曼和在1947年的工作中，首次认真尝试将算法应用于真实数据计算时的误差降至最低。随着技术发展，研究者越来越有能力在超大型高精度矩阵解决复杂问题，这一领域也在不断壮大，而一些数值算法也因并行计算等技术，使其成为解决科学问题的使用方法而日益突出。
矩阵分解.
分割矩阵.
对应用线性代数中的很多问题，将矩阵视作列向量的组合是很有用的。例如，求解线性系统formula_1时，与其将"x"理解为formula_2与"b"的积，不如将"x"视作"b"在"A"的列形成的基上线性展开的系数向量。将矩阵视作列之组合，也是矩阵算法的一种实用方法。这是因为矩阵算法常常包含两个嵌套的循环，一个是"A"的列循环，一个是"A"的行循环。例如，对于矩阵formula_3和向量formula_4、formula_5，可以用列划分的方法计算formula_6
for q = 1:n
 for p = 1:m
 y(p) = A(p,q)*x(q) + y(p)
 end
end
奇异值分解.
矩阵formula_3的奇异值分解是formula_8，其中"U" 、"V"是酉矩阵，formula_9是对角矩阵。formula_9的对角项称作"A"的奇异值。由于奇异值是formula_11特征值的平方根，所以奇异值分解同特征值分解有紧密联系。这意味着，计算奇异值分解的大多数方法都与特征值方法类似，最常用的方法可能涉及豪斯霍德变换。
QR分解.
矩阵formula_3的QR分解是formula_13与formula_14，使得formula_15，其中"Q"是正交矩阵，"R"是上三角矩阵。计算QR分解的两种主要算法是格拉姆-施密特正交化与豪斯霍德变换。QR分解常用于解决问题与特征值问题（通过迭代）。
LU分解.
矩阵"A"的LU分解由下三角矩阵"L"和上三角矩阵"U"构成，使得formula_16。矩阵"U"通过上三角化过程生成，涉及将"A"左乘一系列矩阵formula_17，以形成积formula_18，因此等价地formula_19。
特征值分解.
矩阵formula_20的特征值分解是formula_21，其中"X"的列是"A"的特征向量，formula_22是对角矩阵，对角项是"A"的相应特征值。目前还没有直接得到任意矩阵特征值分解的直接方法，因为程序不可能在有限时间内精确求得任意多项式的根，所以任何通用的特征值求解器必是迭代的。
算法.
高斯消元法.
从数值线性代数的视角看，高斯消元法是将"A"进行"LU"分解的一种方法。高斯消元法通过将"A"与一系列矩阵formula_23左乘来实现，直到"U"是上三角矩阵，"L"是下三角矩阵，且formula_24。众所周知，高斯消元法极不稳定，用于有效数字较多的矩阵时误差巨大。最简单的解决方法是引入主元，从而得到更稳定的改进高斯消元法。
线性方程组的解.
数值线性代数通常将矩阵视作列向量的组合。对于求解线性方程组formula_1，传统代数方法是将"x"理解为formula_2与"b"的积。数值线性代数则将"x"理解为"b"在"A"的列形成的基上现行展开的系数向量。
格努矩阵"A"及向量"x"、"b"的特征，可以用很多不同的分解解决线性问题。若formula_15，则等价于formula_28。这和矩阵分解一样容易计算。将"A"进行特征分解：formula_21，并试图找到使formula_30的"b"，且formula_31，则有formula_32。这同使用奇异值分解求解线性系统密切相关，因为矩阵的奇异值是特征值的绝对值，也等价于格拉姆矩阵formula_33特征值绝对值的平方根。将"A"进行LU分解得formula_16，则formula_35可用三角矩阵formula_36求解。
最小二乘优化.
矩阵分解提出了许多解线性方程组formula_37的方法，其中我们寻求最小的"r"，如回归问题。QR算法计算"A"的既约QR分解并重排，得到formula_38。此上三角方程组可用于解"x"。SVD还提供了一种获得线性最小二乘的算法：计算既约SVD分解formula_39，并计算向量formula_40，就可以将最小二乘问题简化为简单的对角方程组。QR分解和SVD分解可以产生最小二乘解，这意味着除了用经典正规方程法解最小二乘问题外，还可用格拉姆-施密特法、豪斯霍德法等方法。
条件和稳定性.
假设问题是函数formula_41，其中"X"是数据的赋范向量空间，"Y"是解的赋范向量空间。对于数据点formula_42，若"x"的微小扰动会导致formula_43的值发生很大变化，则称之为病态的（ill-conditioned）。可以定义条件数量化之，代表问题的完备程度：
formula_44
不稳定性是指依赖浮点运算的计算机算法的结果与问题的精确解产生差距的趋势。矩阵包含多位有效数字的真实数据时，很多解线性方程组或最小二乘优化的算法会产生不准确的解。为病态问题创建稳定算法是数值线性代数的核心问题，例如豪斯霍德三角化是线性方程组的很稳健的解法，而解最小二乘法的正规方程法不稳定，是奇异值分解更常用的一个原因。有些矩阵分解方法可能不稳定，但可以直接修改而变得稳定，例如格拉姆-施密特法可以很容易地改成改进格拉姆-施密特法；高斯消元法不稳定，引入主元后变得稳定。
迭代法.
迭代法成为数值线性代数重要组成有两个原因。其一，很多重要的数值问题没有直接解，如求任意矩阵的特征值和特征向量。其二，对任意formula_45矩阵的非迭代算法需要formula_46时间，而矩阵只含formula_47个数字，这个下限非常高。迭代法可利用矩阵的特点缩短时间。例如对稀疏矩阵，迭代算法可跳过很多直接方法必须的步骤，即便它们在矩阵高度结构化的情形下是多余的。
数值线性代数中，很多迭代法的核心是将矩阵投影到低维克雷洛夫子空间，这样就可从低维空间开始迭代计算类似矩阵的等效特征，依次向高维移动以逼近高维矩阵的特征。对对称的"A"，解线性方程formula_35时，经典迭代法是共轭梯度法。"A"若不对称，则迭代法有广义最小残量方法和CGN（正规方程共轭梯度法）。若"A"对称，则解特征值、特征向量问题时，可以用兰佐斯算法；"A"不对称时，可以用阿诺德迭代法。
软件.
有几种编程语言用数值线性代数优化技术，旨在实现数值线性代数算法。有MATLAB、Analytica、Maple和Mathematica。其他语言也有提供数值线性代数例程与优化的库，如C语言及Fortran有BLAS、LAPACK等库，Python有NumPy，Perl有Perl Data Language。R语言中的很多数值线性代数命令依赖于LAPACK这些更基本的库。