高斯消元

学过线代的都知道,把增广矩阵转化为行阶梯型矩阵,然后判断解的情况(无解、无穷解、唯一解),即可。但高斯消元代码涉及到二维比较难理解。高斯消元可以用来求线性多元方程组。

线性多元方程组

例如该方程组

{a11x1+a12x2++a1nxn=b1a21x1+a22x2++a2nxn=b2an1x1+an2x2++annxn=b2\begin{cases} a_{11}x_1 + &a_{12}x_2 + \cdots + &a_{1n}x_n = &b_1\\ a_{21}x_1 + &a_{22}x_2 + \cdots + &a_{2n}x_n = &b_2\\ \vdots &\vdots &\vdots &\vdots\\ a_{n1}x_1 + &a_{n2}x_2 + \cdots + &a_{nn}x_n = &b_2\\ \end{cases}

其增广矩阵为

[a11a12a1nb1a22a22a2nb2an1an2annbn]\left[ \begin{array} {c c c c| c} a_{11} & a_{12} & \cdots & a_{1n} & b_{1}\\ a_{22} & a_{22} & \cdots & a_{2n} & b_{2}\\ \vdots & \vdots & \vdots & \vdots & \vdots\\ a_{n1} & a_{n2} & \cdots & a_{nn} & b_{n}\\ \end{array} \right]
  • 对增广矩阵进行初等行变换转化为行阶梯型矩阵

    • 对列进行枚举

    • 找到当前列的绝对值最大的那一行

    • 把此行交换到上面(并非第一行,而是还未确定)的行

    • 将该行第一个数置为1,其他数随之变化。

    • 将下面所有行的当前列的值变为零,其他列随着变化。

行阶梯型矩阵

[a11a12a1nb1a22a2nb2annbn]\begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} & b_1\\ & a_{22} & \cdots & a_{2n} & b_2\\ & & & \vdots & \vdots\\ & & & a_{nn} & b_n \end{bmatrix}

时间复杂度

观察 for 循环可知,最高循环为三层,其时间复杂度最坏为 O(n3)O(n^3)

异或线性方程组

最后更新于