线性代数/自动化
外观
< 线性代数
这是一个 PASCAL 程序,用于对增广矩阵进行 操作。
PROCEDURE Pivot(VAR LinSys : AugMat;
k : REAL;
i, j : INTEGER)
VAR
Col : INTEGER;
BEGIN
FOR Col:=1 TO NumVars+1 DO
LinSys[j,Col]:=k*LinSys[i,Col]+LinSys[j,Col];
END;
当然,这只是整个程序的一部分,但它表明高斯消元法非常适合计算机编码。
然而,也存在一些缺陷。例如,一些缺陷源于计算机对实数使用有限精度近似值。
这些系统提供了一个简单的示例。
(后两行很难区分。)两者都有 作为唯一的解。
在第一个系统中,对数字进行微小的改变只会导致解的微小改变
给出了解 。从几何上看,对其中一条直线进行微小的改变不会显著改变交点。
这对于第二个系统并不适用。系数的微小改变
会导致完全不同的答案:.
第二个示例的解会发生很大的变化,具体取决于第 位数字。这对使用 位数字来表示实数的机器来说是个坏消息。简而言之,几乎奇异的系统可能难以计算。
另一个可能出现的问题是误差传播。在一个具有大量方程(例如,100 个或更多)的系统中,早期过程中的微小舍入误差会累积,最终淹没解。
这些问题以及许多类似问题超出了本书的范围,但请记住,仅仅因为高斯消元法在理论上总是有效的,仅仅因为程序正确地实现了该方法,仅仅因为答案出现在绿条纸上,并不意味着该答案是正确的。在实践中,请始终使用专家努力解决可能出现问题的软件包。