前置技能,列舉主元法的高斯消元,即消第n個元的時候,每次選出絕對值最大乙個方程對其他的進行消元。
但是常見的高斯消元模板並不能很好的解決,哪些元是變元以及哪些是確定解的問題。
假設方程有n
nn個未知數,m
mm個方程,那麼我們在高斯消元的同時記錄乙個變數now
nowno
w,表示使用了now
nowno
w個方程,注意考慮到第now
nowno
w個方程發現第i
ii個變元可能無解,這時now
nowno
w不++,因為它可能還有用。
如果使用的方程數小於未知變數數,說明可能無解或者存在自由元。
判斷無解即變數用完了方程沒用完 ,這是看剩下的方程存不存在0x=
k(k!
=0
)0x=k(k!=0)
0x=k(k
!=0)
判斷乙個變數是不是自由元,其實這個時候能解的一步就可以解出來,判斷一下這一行是否有能解出來的即可。
**如下
#include#include#include#include#define maxn 405
using namespace std;
double eps=1e-7;
double myabs(double now)
int n,m;// n個方程m個未知數
int vis[maxn];
double ans[maxn];
double a[maxn][maxn];
int gauss()
if(row!=i)
for(int j=1;j<=n+1;j++)
swap(a[i][j],a[row][j]);
for(int j=1;j<=m;j++)//全消了
if(myabs(a[j][i])>eps && j!=now)
}//考慮無解
for(int i=now;i<=m;i++) }
if(now<=n)//用了的方程少於變元數
if(cnt>1) continue;
ans[pos]=a[i][n+1];
for(int j=1;j<=n;j++)
}ans[pos]=ans[pos]/a[i][pos];
vis[pos]=1;
} }else
return 1;
}int main()
for(int i=1;i<=n;i++)
else
}}
學過高等代數的人都知道,給原矩陣右邊添上乙個單位矩陣,將原矩陣高斯消元為單位矩陣,右邊的矩陣即為原矩陣的逆。
學過高等代數的人都知道,將矩陣用線性變換的方法化成對角矩陣之後,對角線元素相乘,即為行列式。但是是用高斯消元的時候會交換兩行,這樣的話會使得行列式的值乘−1-1
−1,記錄一下即可。
行列式可以按行展開,公式為∑j=
1m(−
1i+j
)∗ai
,j,a
i,j為
去掉第i
行第j列
的行列式
\sum_^m(-1^)*a_,a_為去掉第i行第j列的行列式
∑j=1m
(−1i
+j)∗
ai,j
,ai
,j為
去掉第i
行第j列
的行列式
特殊矩陣行列式求法
利用範德蒙行列式dn=
∏i
xj−x i) d_n=\prod_1 & 1 & & 1 &\\ & & & &\\ x_1^2 & x_2^2 & \cdots & x_n^2 & \\ \cdots& \cdots& \cdots &\cdots & \\ x_1^& x_2^ & \cdots & x_n^ & \\\end dn=∣∣ ∣∣∣∣ ∣∣∣∣ 1x1 x12 ⋯x1 n−1 1x2 x22 ⋯x2 n−1 ⋯⋯⋯ ⋯⋯1 xnx n2⋯ xnn− 1 ∣∣∣∣ ∣∣∣∣ ∣∣三對角行列式,直接展開得到遞推關係dn= (n+1)a^n, & a=b\\ \frac -b^},&a\neq b \end\right. dn= a+b& ab & & & & \\ 1& a+b & ab & & & \\ & & \cdots& \cdots & & \\ & & & 1&a+b & ab\\ & & & & 1&a+b \end dn=∣∣ ∣∣∣∣ ∣∣∣∣ a+b 1ab a+b ab⋯ ⋯1a +b1 aba+ b∣∣ ∣∣∣∣ ∣∣∣∣ 箭型行列式,即只有兩條邊和對角線上有值的行列式。把第i ii列加到第1行,把第1列的第i行消成0。 除對角線外其他元素相等,或其他元素按行成比例,用第一行乘比例係數去減其他行。 兩條線帶幾個點的行列式,直接展開遞推即可。 矩陣樹定理主要求解三類問題,給無向圖求生成樹數量,給有向圖和乙個點求以這個點為根的內向樹和外向樹的數量。 一般需要構造兩個矩陣s1, s2 s_1,s_2 s1,s2 分別為聯通矩陣和度數矩陣。 構造方法: 給無向圖求生成樹數量,s1( i,j) s_1(i,j) s1(i, j)為i ii與j jj之間的邊數,s2( i,i) s_2(i,i) s2(i, i)為第i ii個點的度數 以乙個點為根的內向樹,s2( i,j) s_2(i,j) s2(i, j)為i ii到j jj之間的邊數,s2( i,i) s_2(i,i) s2(i, i)為第i ii個點的入度 以乙個點為根的外向樹,s2( i,j) s_2(i,j) s2(i, j)為i ii到j jj之間的邊數,s2( i,i) s_2(i,i) s2(i, i)為第i ii個點的出度 求解方法:先得到矩陣t=s 2−s1 t=s_2-s_1 t=s2− s1 給無向圖求生成樹數量,任意刪去一行一列(一般為最後一行一列),求行列式 以乙個點為根的內向樹,刪去給定點所在行所在列,求行列式 以乙個點為根的外向樹,刪去給定點所在行所在列,求行列式 安利一波高斯消元的部落格,內容很詳細。看完這個相信你已經理解了大概,高斯消元求線性方程組,在學習線性代數 大學課程 的時候我們都接觸過。原理是先把執行緒組轉換成矩陣,然後把它等價變換成上三角矩陣,這樣從下到上依次可以求出解集。高斯消元模板 模板題 include define n 205 using... i p其它題太水了就不寫了,這裡說一下o和p。我太懶不想寫 op這兩個題是高斯消元求期望的題。對於p題,求從 點到 點的步數期望,先從 點bfs一遍找到所有可以到達的點,對於可達點每個點是乙個變數。因為終點有任意多而起點只有乙個,這裡可以反過來求從任意乙個終點走到起點的期望。於是對於每乙個終點的期望... 能使用消元法的情況 每次消元過程中,對角線元素始終不能為0,即矩陣可逆 我們一般利用高斯消元法進行矩陣的消元。下面我們通過舉例說明 如果按照我們初中所學的解法,一般是先用第三個方程將z用y表示,然後代入到第二個方程就可以用x來表示y和z,最後代入第乙個方程就可以求得x,y,z。這個演算法的核心就是消...矩陣消元 高斯消元
矩陣乘 高斯消元專題小結 高斯消元
線性代數 矩陣消元 高斯消元法