高斯消元概述

2021-08-18 18:27:29 字數 1972 閱讀 7387

其實高斯消元比較簡單,而且似乎沒有什麼卵用,就水一水吧。

先看模板:【模板】高斯消元法

給定乙個線性方程組,對其求解

輸入格式:

第一行,乙個正整數

n n

第二至n+

1' role="presentation" style="position: relative;">n+1

n+1行,每行n+

1 n+1

個整數,為a1

a

1, a2

a

2⋯an

⋯ an

代表一組方程

輸出格式:共n

n

行,每行乙個數,第

i' role="presentation" style="position: relative;">ii行為

xix

i(保留2位小數)

如果不存在唯一解,在第一行輸出」no solution」.

輸入樣例:

3

1 3 4 5

1 4 7 3

9 3 2 2

輸出樣例:
-0.97

5.18

-2.39

說明1≤

n≤100,|a

i|≤10

4,|b

|≤104

1 ≤n

≤100,|

ai|≤

104,|

b|≤10

4高斯消元的做法:和我們普通解方程是一樣的,只是更為暴力一些,我們每一次找第一位不為0的乙個方程然後用它把其它方程中第一位消掉。如果當前位上所有方程都是0,那麼跳過這一位,並打上標記。

最後檢查所有剩餘方程右側是不是0,如果不是,則無解,如果是且未打標記,則有唯一解,否則有無窮多解。

但對於這道題來說我們只用判斷無解和無窮解,所以只要有一位全0就break。而求解的話,因為只有用來消元的方程才會保留那一位的值。最後如果有解,每乙個方程只會保留乙個變數。我們把係數調整為1輸出即可。

#include

#include

#include

#include

using

namespace

std;

int n,m;

double

const eps=1e-8;

double a[105][105];

int main()

for(int j=n+1;j>=i;j--)

a[i][j]=a[i][j]/a[i][i];

for(int j=1;j<=n;j++)

if(j!=i)

for(int k=n+1;k>=i;k--)

a[j][k]=a[j][k]-a[j][i]*a[i][k];

}for(int i=1;i<=n;i++)

printf("%.2f\n",a[i][n+1]);

}

定義:每一位前係數為1或0,變數只有1或0,把方程的+變成^。

異或方程組的思路是一樣的。但是判斷解個數有點不同。如果某位全0,則稱這一位線性無關,可以任意取1或0,所以解的個數

∗ ∗

2,於是解的個數就是2x

' role="presentation" style="position: relative;">2x2

x,x x

表示線性無關的個數。

異或方程組的變形:

把等號去掉,方程變成表示式,求所有表示式的答案的組合數有多少?其實仔細想想這是乙個線性基的題,我們把豎著的一列看做乙個數,就是求線性基的數有多少,由於線性無關的數不加入線性基,所以我們的答案其實是2n

−x' role="presentation" style="position: relative;">2n−

x2n−

x,x x

表示線性無關的個數。

高斯消元 浮點高斯消元

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

矩陣消元 高斯消元

安利一波高斯消元的部落格,內容很詳細。看完這個相信你已經理解了大概,高斯消元求線性方程組,在學習線性代數 大學課程 的時候我們都接觸過。原理是先把執行緒組轉換成矩陣,然後把它等價變換成上三角矩陣,這樣從下到上依次可以求出解集。高斯消元模板 模板題 include define n 205 using...

矩陣乘 高斯消元專題小結 高斯消元

i p其它題太水了就不寫了,這裡說一下o和p。我太懶不想寫 op這兩個題是高斯消元求期望的題。對於p題,求從 點到 點的步數期望,先從 點bfs一遍找到所有可以到達的點,對於可達點每個點是乙個變數。因為終點有任意多而起點只有乙個,這裡可以反過來求從任意乙個終點走到起點的期望。於是對於每乙個終點的期望...