1. 程式人生 > >用python解決 圖論 和 多項式的矩陣、特徵值、特徵多項式的相互轉化

用python解決 圖論 和 多項式的矩陣、特徵值、特徵多項式的相互轉化

馬上就要畢業了,不少的同學都在緊鑼密鼓的寫論文,對於一些數學系或者理科生來說,經常會遇到一些圖論問題,根據圖形來求出這個圖的矩陣、圖的度……那麼我們知道很多的圖形都能轉化成特徵多項式,那麼今天我們就來寫一個程式,使其通過圖形的矩陣來求多項式。

開始
其實大部分數學工具(Matlab)都能解決問題,但是輸入有點麻煩,因為每個圖你至少要輸入很多次資料,那麼我們能不能開發一個程式來一次性解決問題?答案是肯定的,我們今天用到的就是Python中的Numpy模組。在這裡插入圖片描述

from numpy import roots,poly1d,array,linalg
from tkinter import
* win = Tk() win.geometry('500x500') win.title('牛逼!') l1 = Label(win,text='輸入 :').place(x=50,y=50) num = Entry(win,width=50,) # 輸入框 num.place(x=120,y=50) def getnum():# 這是程式的主要函式,通過它觸發一系列操作 num1 = num.get() # 獲取得到的引數,即使用者輸入的 a = array([eval(num1)]) # 將使用者的輸入轉化為數字 b = linalg.eig(a) # 使用numpy模組的函式來算特徵值
ret1 =[] for i in b[0][0]: ret1.append(round(i,3)) var.set(ret1) # 向螢幕輸出特徵根 sum = 0 for i in range(len(ret1)): sum += ret1[i] avg = sum/len(ret1) var1.set(round(avg,4)) # 向螢幕輸出特徵根的平均值 all_sum = 0 for i in range(len(ret1)): all_sum += abs
(ret1[i]-avg) var2.set(round(all_sum,4)) # 列印求和函式,即每個根於平均根的絕對值的和 q = poly1d(b[0][0],True) var3.set(q) Button(win,text='提交',command=getnum).place(x=170,y=100) # 根的文字框 var = StringVar() l2= Label(win,text='根的列表:').place(x=50,y=150) Label(win,textvariable=var,bg='#838B83').place(x=110,y=150) # 平均值的文字框 var1 = StringVar() l2= Label(win,text='平均值:').place(x=50,y=230) Label(win,textvariable=var1,bg='#FF4040').place(x=110,y=230) # 求絕對值的文字框 var2 = StringVar() l2= Label(win,text='求和 :').place(x=50,y=310) Label(win,textvariable=var2,bg='#FF7256').place(x=110,y=310) var3 = StringVar() l2= Label(win,text='多項式 :').place(x=50,y=380) Label(win,textvariable=var3,bg='#EE7256').place(x=110,y=380) win.mainloop()

最後
這裡我們來算一個矩陣,實驗一下,當然一般的圖形不會轉化成這麼簡單的矩陣,只是實驗:(引用)這是來自百度經驗上的圖形
那麼我們輸入如下:輸出結果

不足:不難發現在多項式輸出行,冪係數沒有對齊,這是有點傷的,但是它都是有序數對,自己應該能判斷出來的。

因此一個簡單的小程式就寫完了,大家可以在我的部落格中下載原始碼或者在github
檢視程式碼,記得在github上點star哦,哈哈哈