數論 高斯消元

2021-07-16 04:56:01 字數 2209 閱讀 5651

學了一天的高斯消元,又退了兩天,才接著補坑,唉~~自己為什麼這麼不爭氣~~

主要的學習高斯消元的**還是**---何江舟的《高斯消元解線性方程組》

注意幾點:

1.equ和var分別代表方程數和未知數

2.在**中注意k和col的實時變化,k迴圈結束後表示消元後的最後乙個行,col迴圈後的為第var-1列(0~var)

3.注意無窮解的**段

4.temp=a[i][var];

for(j=0; jif(a[i][j]!=0&&j!=free_index) temp-=a[i][j]*x[j];

}x[free_index]=temp/a[i][free_index];  

這**段剛開始看不懂,但是其實就是手算的過程,畫一下就應該能夠明白,例如a*x+b*y=c,則求x=(c-b*y)/a;

5.注意浮點數的時候的sgn函式,有誤差所以要小心

何江舟-高斯消元法解線性方程組

[數論] 高斯消元(整型和浮點型)

高斯消元法(gauss elimination) 分析 & 題解 & 模板——czyuan原創

高斯消元法,是線性代數中的乙個演算法,可用來求解線性方程組,並可以求出矩陣的秩,以及求出可逆方陣的逆矩陣。

高斯消元法的原理是:

若用初等行變換將增廣矩陣 化為 ,則ax = b與cx = d是同解方程組。

所以我們可以用初等行變換把增廣矩陣轉換為行階梯陣,然後回代求出方程的解。

以上是線性代數課的回顧,下面來說說高斯消元法在程式設計中的應用。

首先,先介紹程式中高斯消元法的步驟:

(我們設方程組中方程的個數為equ,變元的個數為var,注意:一般情況下是n個方程,n個變元,但是有些題目就故意讓方程數與變元數不同)

1. 把方程組轉換成增廣矩陣。

2. 利用初等行變換來把增廣矩陣轉換成行階梯陣。

列舉k從0到equ – 1,當前處理的列為col(初始為0) ,每次找第k行以下(包括第k行),col列中元素絕對值最大的列與第k行交換。如果col列中的元素全為0,那麼則處理col + 1列,k不變。

3. 轉換為行階梯陣,判斷解的情況。

① 無解

當方程中出現(0, 0, …, 0, a)的形式,且a != 0時,說明是無解的。

② 唯一解

條件是k = equ,即行階梯陣形成了嚴格的上三角陣。利用回代逐一求出解集。

③ 無窮解。

條件是k < equ,即不能形成嚴格的上三角形,自由變元的個數即為equ – k,但有些題目要求判斷哪些變元是不缺定的。

這裡單獨介紹下這種解法:

首先,自由變元有var - k個,即不確定的變元至少有var - k個。我們先把所有的變元視為不確定的。在每個方程中判斷不確定變元的個數,如果大於1個,則該方程無法求解。如果只有1個變元,那麼該變元即可求出,即為確定變元。

以上介紹的是求解整數線性方程組的求法,複雜度是o(n3)。浮點數線性方程組的求法類似,但是要在判斷是否為0時,加入eps,以消除精度問題。

整型高斯消元模板:

#include#include#include #include #include #include using namespace std;

const int maxn =50;

int equ,var; //有equ個方程,var個變元

int a[maxn][maxn] ; //增廣矩陣

int x[maxn]; //解集

bool free_x[maxn]; //標記是否是不確定的變元,初始化為true,確定為0

void debug(void)

// 與第k行交換.

if(max_r!=k)

// 高斯消元法解方程組(gauss-jordan elimination).(-1表示無解,0表示唯一解,大於0表示無窮解,並返回自由變元的個數)

int gauss(int equ,int var)

if(max_r!=k)

{// 與第k行交換.

for(j=k;j=0;i--)

{ free_x_num=0;

for(j=0;j1) continue;

temp=a[i][var];

for(j=0;j=0;i--)

{ temp=a[i][var];

for(j=i+1;j0) {

cout<

數論 高斯消元

給出 n 組方程,每組方程形如 sum limits n a ix i b i 要求求出 x 1,x 2 cdots x n 或告知無解。我們把這些方程轉化為矩陣 begin a a a cdots a b 1 a a a cdots a b 2 vdots vdots vdots vdots vd...

數論 高斯消元學習筆記

q 高斯消元是什麼?聽起來好高階啊?a 二元一次方程組解過嗎?那就是高斯消元。首先對高斯消元做一些準備 q 什麼是線性方程組?a 雞兔同籠方程組 由 m 個 n 元一次方程所構成的方程組。為了簡化表達,做出如下定義 example 假如現有一方程組 beginx 1 x 2 4x 3 17 5x 1...

高斯消元 浮點高斯消元

浮點數高斯消元 問題描述 給出乙個線性方程組,有n個方程組,m個未知數。解這個線性方程組。輸入格式 第1行 2個整數n和m,n,m 400,且n不一定等於m 接下來n行,每行m 1個整數,表示乙個方程的m個未知數的係數和常數 輸出格式 如果無解,輸出 no solution 如果有唯一解,輸出m行,...