其實高斯消元比較簡單,而且似乎沒有什麼卵用,就水一水吧。
先看模板:【模板】高斯消元法
給定乙個線性方程組,對其求解
輸入格式:
第一行,乙個正整數
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
說明1≤-0.97
5.18
-2.39
n≤100,|a
i|≤10
4,|b
|≤104
1 ≤n
≤100,|
ai|≤
104,|
b|≤10
4高斯消元的做法:和我們普通解方程是一樣的,只是更為暴力一些,我們每一次找第一位不為0的乙個方程然後用它把其它方程中第一位消掉。如果當前位上所有方程都是0,那麼跳過這一位,並打上標記。
最後檢查所有剩餘方程右側是不是0,如果不是,則無解,如果是且未打標記,則有唯一解,否則有無窮多解。
但對於這道題來說我們只用判斷無解和無窮解,所以只要有一位全0就break。而求解的話,因為只有用來消元的方程才會保留那一位的值。最後如果有解,每乙個方程只會保留乙個變數。我們把係數調整為1輸出即可。
定義:每一位前係數為1或0,變數只有1或0,把方程的+變成^。#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]);
}
異或方程組的思路是一樣的。但是判斷解個數有點不同。如果某位全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一遍找到所有可以到達的點,對於可達點每個點是乙個變數。因為終點有任意多而起點只有乙個,這裡可以反過來求從任意乙個終點走到起點的期望。於是對於每乙個終點的期望...