这里给出一个简单的程序演示高斯消元法的基本步骤. 注意在实际应用中, 我们解线性方程组一般使用 Matlab 的反斜杠算符:x=A \ y
,其中 $\mat A$ 是系数矩阵,$\bvec y$ 是常数列,$\bvec x$ 是未知量.
GaussEli.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
|
与“高斯消元法” 中的步骤略有不同的是, 该程序在处理每一行 A(ii,:)
时都会试图做一个行交换使系数 A(ii,q(ii))
的绝对值尽可能大. 这是为了减小数值误差: 试想如果 A(ii,q(ii))
的解析值为 0, 但由于数值误差, 计算出来是一个很小的数(例如 1e-15
), 那么用其消元时就可能需要将第 ii
行乘以一个很大的系数(例如 1e15
)再加到另一行上, 导致程序不稳定.
用例 2 中的增广矩阵测试程序如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
|