高斯消元法——Matlab解线性方程组(1)

目录

前言

一、求解线性方程组不是用逆矩阵法就可以了吗?

二、Matlab解线性方程组

1.Matlab反斜线运算符

2.举个栗子

3.写出矩阵形式的推导过程

总结


前言

        科学计算中最常遇到的一个问题,就是线性方程组的求解。本文章首先介绍求解线性方程组的最基础方法。


一、求解线性方程组不是用逆矩阵法就可以了吗?

        如果采用矩阵来表示,一个线性方程组系统可表示为:

Ax=b

通常情况下,变量和方程书目一样多。此时A为一个已知的n阶方阵,b是包含n个分量的已知列向量,x是包含n个分量的为止列向量。

        线性代数中学习了可以通过求逆矩阵的方法来求解x。然而大多数实际问题中,计算A的逆矩阵没有必要也很麻烦,同时会带来更大的计算量:

        以一个简单的计算式为例:2x=6

        直接运用除法:x=\frac{6}{2}=3

        如果采用逆矩阵的形式,则有:x=6\cdot 2^{-1}=6\times 0.5=3

虽然看上去没有太大的区别,但是在计算机的脑子里,第一种方法只进行了一次除法运算,而第二种方法先进行了一次除法运算,后进行了一次乘法运算。

        因此,这里讨论的重点就集中在线性方程组的直接求解,而不关心矩阵逆的计算。

二、Matlab解线性方程组

1.Matlab反斜线运算符

        Matlab引入了两种非标准记号,分别叫反向斜线(“backward slash”)算符和正向斜线(“forward slash”)算符,写作“\”和“/”。

        如果A、B是拥有同样行数的矩阵,则线性方程组系统

AX=B

的解可以表示为:

X=A\setminus B

可以把这看成是将等式的左右两边都除以系数矩阵A。也称为B左除A。

        同理,如果A、B是拥有同样列数的矩阵,则线性方程组系统

XA=B

的解可以表示为:

X=B / A

称为B右除A。

2.举个栗子

        随便考虑一个线性方程组系统,如下所示

  \begin{pmatrix} 10 & -7 & 0 \\ -3 & 2 & 6\\ 5 & 1 & 5 \end{pmatrix}\ \begin{pmatrix} x_{1}\\ x_{2}\\ x_{3} \end{pmatrix}=\begin{pmatrix} 7\\ 4\\ 6 \end{pmatrix}

这个系统代表了三个联立的方程:

\left\{\begin{matrix} 10x_{1}-7x_{2}=7\\ -3x_{1}+2x_{2}+6x_{3}=4\\ 5x_{1}-x_{2}+5x_{3}=6 \end{matrix}\right.

可以使用线性代数中的消主元法来化简。

即第一步用第一个式子消去下面两个式子的x1。也即通过将第一个式子的0.3倍加到第二个式子上、再将第一个式子的-0.5倍加到第三个式子上,以消去第二第三个式子的x1.此时第一个式子x1的系数10称为第一个主元(pivot),而其他方程中x1的系数除以主元得到的-0.3和0.5称为乘子(multiplier)。则方程变为:

\begin{pmatrix} 10 &-7 &0 \\ 0 & -0.1 & 6\\ 0 & 2.5& 5 \end{pmatrix}\begin{pmatrix} x_{1}\\ x_{2}\\ x_{3} \end{pmatrix}=\begin{pmatrix} 7\\ 6.1\\ 2.5 \end{pmatrix}

同理,用第二个式子的x2消去第三个式子的x2.但是这里我们看到,第二个方程x2的系数-0.1比较小,可能会产生舍入误差(后续讲到)。故而先将第二第三个式子交换次序。这一步被称为选主元

\begin{pmatrix} 10 &-7 &0 \\ 0 & 2.5& 5\\0 & -0.1 & 6 \end{pmatrix}\begin{pmatrix} x_{1}\\ x_{2}\\ x_{3} \end{pmatrix}=\begin{pmatrix} 7\\2.5 \\ 6.1 \end{pmatrix}

这时,可以将第二个方程乘以0.04倍,加给第三个方程,消去第三个方程的x2项。即得到:

\begin{pmatrix} 10 &-7 &0 \\ 0 & 2.5& 5\\0 & 0 & 6.2 \end{pmatrix}\begin{pmatrix} x_{1}\\ x_{2}\\ x_{3} \end{pmatrix}=\begin{pmatrix} 7\\2.5 \\ 6.2 \end{pmatrix}

这时候,第三个方程已经非常简化了:6.2x_{3}=6.2

得到x3=1,反带回去得到x2=-1,x1=0

最后的解写作:

x=\begin{pmatrix} 0\\ -1\\ 1 \end{pmatrix}

3.写出矩阵形式的推导过程

吃了上面的栗子,可以总结总结上面几步的规律。

①将矩阵A的第二第三行交换,可以用初等转换矩阵表示为:

P=\begin{pmatrix} 1 &0 & 0\\ 0&0 & 1\\ 0&1 & 0 \end{pmatrix}

②将第二个方程乘以0.04倍加给第三个方程,然后将第一个式子的0.3倍加到第三个式子上、再将第一个式子的-0.5倍加到第二个式子上,用初等变换表示为:

L_{1}=\begin{pmatrix} 1 &0 &0 \\- 0.5 &1 &0 \\ 0.3 & 0.04 & 1 \end{pmatrix}

 ③最后得到的上三角系数矩阵记为U:

U=\begin{pmatrix} 10 &-7 &0 \\ 0 & 2.5& 5\\0 & 0 & 6.2 \end{pmatrix}

④整理几个矩阵。可以知道,A矩阵经过行变换P以后,再经过②变换可以得到最后的上三角系数矩阵U。即:

U=L_{1}PA

L_{1}^{-1}U=PA

根据矩阵知识,可以很简单地求出L1矩阵的逆,命名为L矩阵,则有:

L=\begin{pmatrix} 1 & 0& 0\\ 0.5 & 1&0 \\ -0.3 &-0.04 & 1 \end{pmatrix}

LU=PA

换而言之,原始方程组的系数矩阵,可以经过一系列初等变换表示为结构比较简单的矩阵的乘积。这种分解方法又叫做“LU分解法”。后面会讲到。

总结

        第一节介绍了求解线性方程组的最基础方法,也是线性代数中学到的方法。这种方法可以避免求解逆矩阵,进而简化计算量。本文只简单介绍了3阶情况,推而广之的任务留给下文。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值