MATLAB 求解线性方程组
前言
线性方程组计算机解法有直接法和迭代法两大类。
- 直接法
用计算公式直接计算求出线性方程组解的方法。包括有高斯(Gauss)消元法、列主元消元法、全主元消元法、LU分解法(矩阵的三角分解法)、追赶法等。 - 迭代法
用迭代公式通过迭代计算求出满足精度要求的线性方程组近似解的方法。包括有Jacobi迭代法、seidel迭代法(即Gauss-seidel迭代法)、sor法(超松弛迭代法)等。(迭代法是一种逐次逼近线性方程组解的方法)
1 线性方程组的直接解法
1.1利用左除运算符的直接解法
A x = b ⇒ d e t ( A ) ≠ 0 x = A \ b Ax=b \;\;\xRightarrow{det(A) \neq 0} \;\;x=A\backslash b Ax=bdet(A)=0x=A\b
eg:
{ 2 x 1 + x 2 − 5 x 3 + x 4 = 13 x 1 − 5 x 2 + 7 x 4 = − 9 2 x 2 + x 3 − x 4 = 6 x 1 + 6 x 2 − x 3 − 4 x 4 = 0 \begin{cases} 2x_1+x_2-5x_3+x_4=13\\ x_1-5x_2+7x_4 = -9 \\ 2x_2+x_3-x_4=6\\x_1+6x_2-x_3-4x_4=0 \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧2x1+x2−5x3+x4=13x1−5x2+7x4=−92x2+x3−x4=6x1+6x2−x3−4x4=0
demo:
A=[2 1 -5 1;1 -5 0 7;0 2 1 -1;1 6 -1 -4];
b=[13,-9,6,0]';
x=A\b
运行结果如下:
x =
-66.555555555555543
25.666666666666664
-18.777777777777775
26.555555555555550
1.2 LU分解法
1.2.1 LU分解法的基本思想
A x = b ⇒ A = L U L U x = b ⟹ { L y = b U x = y Ax=b \quad \xRightarrow{A=LU}LUx=b \Longrightarrow \left\{\begin{matrix} Ly=b \\ Ux=y \end{matrix}\right. Ax=bA=LULUx=b⟹{ Ly=bUx=y
1.2.2 Matlab的LU分解函数
- [L,U]=lu(A):产生一个上三角矩阵U和一个变换形式的下三角矩阵L,使之满足A=LU。(!注意:矩阵A必须为方阵)
- [L,U,P]=lu(A):产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使之满足PA=LU。(!注意:矩阵A也必须为方阵)
1.2.3 用LU分解法求解线性方程组
- A x = b ⟶ L U x = b ⟶ x = U \ ( L \ b ) Ax=b\longrightarrow LUx=b \longrightarrow x=U\backslash(L\backslash b) Ax=b⟶LUx=b⟶x=U\(L\b)
- A x = b ⟶ P A x = P b ⟶ L U x = P b ⟶ x = U \ ( L \ p ∗ b ) Ax=b\longrightarrow PAx=Pb \longrightarrow LUx=Pb\longrightarrow x=U\backslash(L\backslash p*b) Ax=b⟶PAx=Pb⟶LUx=Pb⟶x=U\(L\p∗b)
eg:
{ 2 x 1 + x 2 − 5 x 3 + x 4 = 13 x 1 − 5 x 2 + 7 x 4 = − 9 2 x 2 + x 3 − x 4 = 6 x 1 + 6 x 2 − x 3 − 4 x 4 = 0 \begin{cases} 2x_1+x_2-5x_3+x_4=13\\ x_1-5x_2+7x_4 = -9 \\ 2x_2+x_3-x_4=6\\x_1+6x_2-x_3-4x_4=0 \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧2x1+x2−5x