大家好,欢迎来到IT知识分享网。
高斯消元法解线性方程组
flyfish
DeepSORT(目标跟踪算法)中的解三角方程计算标准化残差(解线性方程组)和《DeepSORT(目标跟踪算法)中的计算观测值与状态估计的马氏距离》有解方程组的做法,这里举个例子
高斯消元法(Gaussian Elimination)
高斯消元法是一种用于解线性方程组的直接方法。该方法通过一系列的行变换将方程组的系数矩阵化为上三角矩阵,然后通过回代法求解变量的值。下面我们详细讲解这一过程。
高斯消元法的步骤
- 构建增广矩阵:
将线性方程组的系数矩阵和常数项合并成增广矩阵。 - 行变换:
通过初等行变换,将增广矩阵化为上三角矩阵。 - 上三角矩阵形式:
消元过程的目标是将矩阵化为上三角形式,即矩阵的下三角部分(主对角线以下的元素)全为零。 - 回代求解:
从上三角矩阵的最后一行开始,通过回代方法,从下往上依次求解每一个变量的值。
举例说明
给定线性方程组:
{ 2 x + 3 y − z = 1 4 x + 4 y − 3 z = 3 2 x − 3 y + 2 z = 1 \begin{cases} 2x + 3y – z = 1 \\ 4x + 4y – 3z = 3 \\ 2x – 3y + 2z = 1 \end{cases} ⎩
⎨
⎧2x+3y−z=14x+4y−3z=32x−3y+2z=1
我们将方程组写成增广矩阵:
[ 2 3 − 1 1 4 4 − 3 3 2 − 3 2 1 ] \left[\begin{array}{ccc|c} 2 & 3 & -1 & 1 \\ 4 & 4 & -3 & 3 \\ 2 & -3 & 2 & 1 \end{array}\right]
24234−3−1−32131
第一步:消元过程
对第二行进行操作:
我们将第二行减去第一行的两倍,以消去第二行的第一个元素:
第一行的两倍: 2 × [ 2 3 − 1 1 ] = [ 4 6 − 2 2 ] \text{第一行的两倍:} 2 \times \left[\begin{array}{ccc|c} 2 & 3 & -1 & 1 \\ \end{array}\right] = \left[\begin{array}{ccc|c} 4 & 6 & -2 & 2 \\ \end{array}\right] 第一行的两倍:2×[23−11]=[46−22]
第二行减去第一行的两倍: [ 4 4 − 3 3 ] \text{第二行减去第一行的两倍:} \left[\begin{array}{ccc|c} 4 & 4 & -3 & 3 \\ \end{array}\right] 第二行减去第一行的两倍:[44−33]
− [ 4 6 − 2 2 ] = [ 0 − 2 − 1 1 ] – \left[\begin{array}{ccc|c} 4 & 6 & -2 & 2 \\ \end{array}\right] = \left[\begin{array}{ccc|c} 0 & -2 & -1 & 1 \\ \end{array}\right] −[46−22]=[0−2−11]
所以,矩阵变为:
[ 2 3 − 1 1 0 − 2 − 1 1 2 − 3 2 1 ] \left[\begin{array}{ccc|c} 2 & 3 & -1 & 1 \\ 0 & -2 & -1 & 1 \\ 2 & -3 & 2 & 1 \end{array}\right]
2023−2−3−1−12111
对第三行进行操作:
我们将第三行减去第一行,以消去第三行的第一个元素:
第三行减去第一行: [ 2 − 3 2 1 ] \text{第三行减去第一行:} \left[\begin{array}{ccc|c} 2 & -3 & 2 & 1 \\ \end{array}\right] 第三行减去第一行:[2−321]
− [ 2 3 − 1 1 ] = [ 0 − 6 3 0 ] – \left[\begin{array}{ccc|c} 2 & 3 & -1 & 1 \\ \end{array}\right] = \left[\begin{array}{ccc|c} 0 & -6 & 3 & 0 \\ \end{array}\right] −[23−11]=[0−630]
所以,矩阵变为:
[ 2 3 − 1 1 0 − 2 − 1 1 0 − 6 3 0 ] \left[\begin{array}{ccc|c} 2 & 3 & -1 & 1 \\ 0 & -2 & -1 & 1 \\ 0 & -6 & 3 & 0 \end{array}\right]
2003−2−6−1−13110
第二步:对第二行进行操作
将第二行乘以 -1/2 以便使第二行的第二个元素变成 1:
− 1 2 × [ 0 − 2 − 1 1 ] = [ 0 1 0.5 − 0.5 ] -\frac{1}{2} \times \left[\begin{array}{ccc|c} 0 & -2 & -1 & 1 \\ \end{array}\right] = \left[\begin{array}{ccc|c} 0 & 1 & 0.5 & -0.5 \\ \end{array}\right] −21×[0−2−11]=[010.5−0.5]
所以,矩阵变为:
[ 2 3 − 1 1 0 1 0.5 − 0.5 0 − 6 3 0 ] \left[\begin{array}{ccc|c} 2 & 3 & -1 & 1 \\ 0 & 1 & 0.5 & -0.5 \\ 0 & -6 & 3 & 0 \end{array}\right]
20031−6−10.531−0.50
对第三行进行操作:
我们将第三行加上第二行的六倍,以消去第三行的第二个元素:
第二行的六倍: 6 × [ 0 1 0.5 − 0.5 ] = [ 0 6 3 − 3 ] \text{第二行的六倍:} 6 \times \left[\begin{array}{ccc|c} 0 & 1 & 0.5 & -0.5 \\ \end{array}\right] = \left[\begin{array}{ccc|c} 0 & 6 & 3 & -3 \\ \end{array}\right] 第二行的六倍:6×[010.5−0.5]=[063−3]
第三行加上第二行的六倍: [ 0 − 6 3 0 ] \text{第三行加上第二行的六倍:} \left[\begin{array}{ccc|c} 0 & -6 & 3 & 0 \\ \end{array}\right] 第三行加上第二行的六倍:[0−630]
+ [ 0 6 3 − 3 ] = [ 0 0 6 − 3 ] + \left[\begin{array}{ccc|c} 0 & 6 & 3 & -3 \\ \end{array}\right] = \left[\begin{array}{ccc|c} 0 & 0 & 6 & -3 \\ \end{array}\right] +[063−3]=[006−3]
所以,矩阵变为:
[ 2 3 − 1 1 0 1 0.5 − 0.5 0 0 6 − 3 ] \left[\begin{array}{ccc|c} 2 & 3 & -1 & 1 \\ 0 & 1 & 0.5 & -0.5 \\ 0 & 0 & 6 & -3 \end{array}\right]
200310−10.561−0.5−3
第三步:对第三行进行操作
我们将第三行除以 6 以便使第三行的第三个元素变成 1:
1 6 × [ 0 0 6 − 3 ] = [ 0 0 1 − 0.5 ] \frac{1}{6} \times \left[\begin{array}{ccc|c} 0 & 0 & 6 & -3 \\ \end{array}\right] = \left[\begin{array}{ccc|c} 0 & 0 & 1 & -0.5 \\ \end{array}\right] 61×[006−3]=[001−0.5]
所以,矩阵变为:
[ 2 3 − 1 1 0 1 0.5 − 0.5 0 0 1 − 0.5 ] \left[\begin{array}{ccc|c} 2 & 3 & -1 & 1 \\ 0 & 1 & 0.5 & -0.5 \\ 0 & 0 & 1 & -0.5 \end{array}\right]
200310−10.511−0.5−0.5
回代求解
从第三行开始:
z = − 0.5 z = -0.5 z=−0.5
将 z = − 0.5 z = -0.5 z=−0.5 代入第二行:
y + 0.5 z = − 0.5 ⟹ y + 0.5 ( − 0.5 ) = − 0.5 ⟹ y − 0.25 = − 0.5 ⟹ y = − 0.25 y + 0.5z = -0.5 \implies y + 0.5(-0.5) = -0.5 \implies y – 0.25 = -0.5 \implies y = -0.25 y+0.5z=−0.5⟹y+0.5(−0.5)=−0.5⟹y−0.25=−0.5⟹y=−0.25
将 y = − 0.25 y = -0.25 y=−0.25 和 z = − 0.5 z = -0.5 z=−0.5 代入第一行:
2 x + 3 y − z = 1 ⟹ 2 x + 3 ( − 0.25 ) − ( − 0.5 ) = 1 ⟹ 2 x − 0.75 + 0.5 = 1 ⟹ 2 x − 0.25 = 1 ⟹ 2 x = 1.25 ⟹ x = 0.625 2x + 3y – z = 1 \implies 2x + 3(-0.25) – (-0.5) = 1 \implies 2x – 0.75 + 0.5 = 1 \implies 2x – 0.25 = 1 \implies 2x = 1.25 \implies x = 0.625 2x+3y−z=1⟹2x+3(−0.25)−(−0.5)=1⟹2x−0.75+0.5=1⟹2x−0.25=1⟹2x=1.25⟹x=0.625
所以,解这个方程组得到的结果是:
x = 0.625 , y = − 0.25 , z = − 0.5 x = 0.625, \, y = -0.25, \, z = -0.5 x=0.625,y=−0.25,z=−0.5
Python验证
import numpy as np # 系数矩阵 A = np.array([ [2, 3, -1], [4, 4, -3], [2, -3, 2] ]) # 常数项 B = np.array([1, 3, 1]) # 求解线性方程组 solution = np.linalg.solve(A, B) print("x, y, z 的解为:", solution)
结果
x, y, z 的解为: [ 0.625 -0.25 -0.5 ]
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/151126.html