從高斯消元到矩陣樹定理

2021-10-23 05:10:17 字數 3697 閱讀 7031

前置技能,列舉主元法的高斯消元,即消第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

xn​x

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

1​ab

a+b​

ab⋯​

⋯1​a

+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

iij

jj之間的邊數,s2(

i,i)

s_2(i,i)

s2​(i,

i)為第i

ii個點的度數

以乙個點為根的內向樹,s2(

i,j)

s_2(i,j)

s2​(i,

j)為i

iij

jj之間的邊數,s2(

i,i)

s_2(i,i)

s2​(i,

i)為第i

ii個點的入度

以乙個點為根的外向樹,s2(

i,j)

s_2(i,j)

s2​(i,

j)為i

iij

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。這個演算法的核心就是消...