用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哦,哈哈哈

猜你喜欢

转载自blog.csdn.net/Unicorn_wan/article/details/85090411
今日推荐