说明
对于初学者来说,或者说对于我来说…一直觉得直接看矩阵的角标很难一下子就在脑海里出现这个矩阵的元素应该出现的位置,所以在看一些数值分析的算法的时候,就需要用文字将算法慢慢的领悟。
主元法用比较通俗易懂的表达即是利用矩阵初等变换不改变矩阵的性质这个依据,选取较大值的元素作为主元,所以列主元法和全主元法只是取最大值的范围不一样而已。
全主元法求解线性方程组
全主元法顾名思义即是在全部元素范围内选取最大值作为主元,以以下矩阵所代表的方程组为例:
[
1
2
3
1
5
4
10
0
3
−
0.1
1
2
]
\left[ \begin{array}{ccc|c} 1&2&3&1\\ 5&4&10&0\\ 3&-0.1&1&2 \end{array} \right]
⎣⎡15324−0.13101102⎦⎤
由于我们可能对矩阵列的位置进行改变,这有可能使最后的解
x
n
xn
xn对应的值与我们期望的解顺序不一致,因此我们还需要新建一个一维数组来存储解的顺序:
W
(
i
)
=
(
1
2
3
)
W(i)=\begin{pmatrix}1&2&3\end{pmatrix}
W(i)=(123)
首先,我们需要找到全部元素中值最大的元素(绝对值),在本例中是10,并将10通过行变换和列变换移到a11的位置:
[
10
4
5
0
3
2
1
1
1
−
0.1
3
2
]
且
W
(
i
)
=
(
3
2
1
)
\left[ \begin{array}{ccc|c} 10&4&5&0\\ 3&2&1&1\\ 1&-0.1&3&2\\ \end{array} \right] 且W(i)=\begin{pmatrix}3&2&1\end{pmatrix}
⎣⎡103142−0.1513012⎦⎤且W(i)=(321)
消元处理:
[
10
4
5
0
0
0.8
−
0.5
1
0
−
0.5
2.5
2
]
且
W
(
i
)
=
(
3
2
1
)
\left[ \begin{array}{ccc|c} 10&4&5&0\\ 0&0.8&-0.5&1\\ 0&-0.5&2.5&2\\ \end{array} \right] 且W(i)=\begin{pmatrix}3&2&1\end{pmatrix}
⎣⎡100040.8−0.55−0.52.5012⎦⎤且W(i)=(321)
在剩下的部分再次进行主元选取,即找到最大值(绝对值),可以看出最大值为2.5,我们将2.5移动到a22的位置:
[
10
5
4
0
0
2.5
−
0.5
2
0
−
0.5
0.8
1
]
且
W
(
i
)
=
(
3
1
2
)
\left[ \begin{array}{ccc|c} 10&5&4&0\\ 0&2.5&-0.5&2\\ 0&-0.5&0.8&1\\ \end{array} \right] 且W(i)=\begin{pmatrix}3&1&2\end{pmatrix}
⎣⎡100052.5−0.54−0.50.8021⎦⎤且W(i)=(312)
消元处理:
[
10
5
4
0
0
2.5
−
0.5
2
0
0
0.7
1.4
]
且
W
(
i
)
=
(
3
1
2
)
\left[ \begin{array}{ccc|c} 10&5&4&0\\ 0&2.5&-0.5&2\\ 0&0&0.7&1.4\\ \end{array} \right] 且W(i)=\begin{pmatrix}3&1&2\end{pmatrix}
⎣⎡100052.504−0.50.7021.4⎦⎤且W(i)=(312)
至此,求解所需的上三角阵已经得到,接下来要进行的操作就是依次回代求值。并得到结果:
x
(
i
)
=
(
−
1.4
1.2
2
)
x(i)=\begin{pmatrix}-1.4&1.2&2\end{pmatrix}
x(i)=(−1.41.22)
但实际上我们得到解的顺序是不对的,所以我们应该结合位置数组
W
(
i
)
W(i)
W(i)重新调整顺序,并在之后得到结果:
x
(
i
)
=
(
1.2
2
−
1.4
)
x(i)=\begin{pmatrix}1.2&2&-1.4\end{pmatrix}
x(i)=(1.22−1.4)
列主元法求解线性方程组
在了解了全主元法之后列主元的理解相对简单,我感觉列主元的一个优点是不需要进行解顺序的调整,因为在求解的过程中不涉及到列变换,只进行行变换,接下来我们沿用上一个例子,进行列主元法的说明:
[
1
2
3
1
5
4
10
0
3
−
0.1
1
2
]
\left[ \begin{array}{ccc|c} 1&2&3&1\\ 5&4&10&0\\ 3&-0.1&1&2 \end{array} \right]
⎣⎡15324−0.13101102⎦⎤
这次,我们首先只观察第一列中的最大值,即5,处在第二行的位置,我们通过行变换将其调整到第一行:
[
5
4
10
0
1
2
3
1
3
−
0.1
1
2
]
\left[ \begin{array}{ccc|c} 5&4&10&0\\ 1&2&3&1\\ 3&-0.1&1&2 \end{array} \right]
⎣⎡51342−0.11031012⎦⎤
消元处理:
[
5
4
10
0
0
1.2
1
1
0
−
2.5
−
5
2
]
\left[ \begin{array}{ccc|c} 5&4&10&0\\ 0&1.2&1&1\\ 0&-2.5&-5&2 \end{array} \right]
⎣⎡50041.2−2.5101−5012⎦⎤
在第二列的剩余部分寻找最大值,即-2.5,再次进行行初等变换:
[
5
4
10
0
0
−
2.5
−
5
2
0
1.2
1
1
]
\left[ \begin{array}{ccc|c} 5&4&10&0\\ 0&-2.5&-5&2\\ 0&1.2&1&1 \end{array} \right]
⎣⎡5004−2.51.210−51021⎦⎤
消元处理:
[
5
4
10
0
0
−
2.5
−
5
2
0
0
−
1.4
1.96
]
\left[ \begin{array}{ccc|c} 5&4&10&0\\ 0&-2.5&-5&2\\ 0&0&-1.4&1.96 \end{array} \right]
⎣⎡5004−2.5010−5−1.4021.96⎦⎤
至此我们通过列主元法也得到了求解所需的上三角矩阵,通过回代得到最后的解:
x
(
i
)
=
(
1.2
2
−
1.4
)
x(i)=\begin{pmatrix}1.2&2&-1.4\end{pmatrix}
x(i)=(1.22−1.4)
最后
这是我自己整理来用于自己课后反思和作业的想法记录,所以有些地方可能不是非常严谨和科学,思路仅供参考,欢迎讨论!