高斯消元
转载自https://www.luogu.com.cn/blog/pks-LOVING/p3389-mu-ban-gao-si-xiao-yuan-fa
emmmm 这个消元方式其实严格来说是可行性算法……而不是优化性算法……不过话说由于我太蒟蒻了,所以并不知道什么更优的算法(#滑稽)
嗯,其实这个算法是 O(n^3)O(n3) 的算法,需要一些矩阵及行列式的知识……那么由本蒟蒻来记录一下这个算法吧!
那么假设有一个线性方程组是长这样的:
\begin{Bmatrix} 3x & + & 2y &+& z &=&10 \\5x & + & y &+& 6z &=&25 \\2x & + & 3y &+& 4z &=&20\end{Bmatrix}⎩⎨⎧3x5x2x+++2yy3y+++z6z4z===102520⎭⎬⎫
emmmemmm 这就是一个很简单的三元一次方程,让我们想想常规方法该怎么做(先不谈 codecode )
初中老师说过:我们可以加减消元或者代入消元,但是我们需要在程序里实现的时候,需要一种有规律可循的算法。所以我们选择加减消元,但用代入消元回带。
整体思路就是我们可以先在某一个式子里,用这个式子的 xx 消去其他式子里的 xx ,然后在剩下的两个式子里再选择一个式子里的 yy ,用这个 yy 消去最后剩下的式子里的 yy 。那么现在最后一个方程里就只有一个未知数 zz 了。倘若 zz 的系数是 11 ,那么我们就可以直接得出答案来了(别觉得这句话是废话)。
比如刚才这个方程,我们用第二个式子去消1、3式里的 xx :
\begin{Bmatrix} 0\times x & + & \frac{7}{5}y &+& (-\frac{13}{5}z) &=&-5 \\5x & + & y &+& 6z &=&25 \\0\times x & + & \frac{13}{5}y &+& \frac{8}{5}z &=&10\end{Bmatrix}⎩⎨⎧0×x5x0×x+++57yy513y+++(−513z)6z58z