昨天學長教了我高斯消元法。
這裡用乙個栗子來模擬一下gauss的流程。
真的通俗易懂!
這裡是洛谷題目鏈結。
這就是例子
x-2y+3z=64x-5y+6z=12
7x-8y+10z=21
先將它轉化為矩陣
1 -2364 -5612
7 -8
1021
解決這個方程組
我們會希望它變成如下形式
100a010
b001 c
這樣就可以表示為$x=a$,$y=b$,$z=cx=a$,$y=b$,$z=c$,$x=a$,$y=b$,$z=c$
我們使用高斯消元,就要一步一步將每個未知數約去。
這種方法是以列為單位消去的
首先我們將第一列轉化為1 0 0的形式
在這裡要注意一下,我們往往是將這個係數絕對值最大的方程轉移到被減的這一行,這樣就可以減小誤差
所以我們先將矩陣變成這樣
7 -81021
4 -5612
1 -2
36
然後將正在處理的方程式化簡,讓正被處理的係數化1
1 -8/710/7
34 -5612
1 -2
36
然後使用加減法將第二個與第三個方程組的第乙個係數化0
1 -8/710/7
30 -3/7
2/70
0 -6/7
11/7
3
然後這時候第一列就被化簡完成
同理我們化去第二行與第三行,步驟如下:
1.化簡第二行
1 -8/710/730
1 -2/3
00 -6/7
11/7
3
2.用第一行減第二行×(-8/7),第三行減第二行×(-6/7)
102/330
1 -2/300
013
3.不需要化簡第三行,所以直接用第一行減去第三行×2/3,第二行減去第三行×(-2/3)
1001010
2001
3
最後我們就得到了一組解x=1,y=2,y=3x=1,y=2,y=3x=1,y=2,y=3 。
所以高斯消元其實是運用了小學解方程組的加減法的訥。
**請見我的部落格
《從2023年暑假到現在手打的模板↑_↑》
之三十二。。
。。我還是老老實實地貼了上來:
//guss
#include using
namespace
std;
intn;
double f[105][105
];const
double eps=1e-8
;int
main()
for (int j=i+1;j<=n;j++) f[i][j]/=f[i][i];//
係數化1
//自己那位不必要除 無影響
for (int j=0;j)
if (i!=j)
for (int k=i+1;k<=n;k++) f[j][k]-=f[j][i]*f[i][k];
//加減法去掉系數值
}
for (int i=0;i"
%.2lf\n
",f[i][n]);//
輸出return0;
}
高斯消元法(二) 高斯消元法原理
高斯消去法是一種常用的求解線性方程組的方法,通過逐次消元後,在回代求解,實際計算中常用的一種方法。順序消去法 將ax b按照從上至下 從左至右的順序化為上三角方程組,中間過程不對矩陣進行交換,主要步驟如下。step1 將第2行至第n行,每行分別與第一行做運算,消掉每行第乙個引數。公式如 形成如下圖所...
高斯消元法
寒假前,小導師給我們布置了三道程式設計題,其中有一道是利用高斯消元法解線性方程組的。在網上搜了些資料,自己照葫蘆畫瓢編出乙個簡單的高斯消元法 利用矩陣的初等行變換 高斯消元法解線性方程組 include include include define dim 10 double a dim 1 dim...
高斯消元法
學過至少一元二次方程解法的同學們肯定知道,最常用的求根方法是加減消元法。所謂加減消元法,就是通過方程的等式性質,將某一未知數的係數同一化,再通過兩個等式的加減消去乙個元,從而將多元方程不斷降元,從而解出乙個未知數,不斷代回,從而求出所有根。此加減消元法就是高斯消元法。所以程式思路也盡可知。以下直接附...