国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

矩陣計(jì)算器

這篇具有很好參考價(jià)值的文章主要介紹了矩陣計(jì)算器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

摘要:在本報(bào)告中介紹了一套圖形界面的矩陣計(jì)算器的的想法與需求分析、設(shè)計(jì)、實(shí)現(xiàn),測(cè)試和改進(jìn)。在想法與需求分析中介紹了我研發(fā)此程序的契機(jī)和原因。在設(shè)計(jì)中介紹了對(duì)該程序的設(shè)計(jì),以及如何實(shí)現(xiàn)。實(shí)現(xiàn)中介紹了對(duì)關(guān)鍵代碼的分析和解釋。測(cè)試以圖片的形式證明了一些具體功能的實(shí)現(xiàn)和驗(yàn)證。最后的改進(jìn)中介紹了程序的還存在的漏洞與需要改進(jìn)的地方。

關(guān)鍵字:矩陣;計(jì)算;圖形化;方便

  1. 想法與需求分析
    1. 想法

作為一名工科專業(yè)大學(xué)生,我們會(huì)在讀大學(xué)的途中遇到《線性代數(shù)》這樣一門課程。這門課程主要講了與矩陣相關(guān)的計(jì)算與分析。但是在學(xué)習(xí)過(guò)程中,我們會(huì)遇到一些比較復(fù)雜的矩陣的運(yùn)算,如求矩陣的逆,求矩陣的行列式的值,求矩陣的特征值,等。對(duì)于剛剛接觸這門課程的大學(xué)生來(lái)說(shuō)十分的困難,有時(shí)候瘋狂的計(jì)算了很長(zhǎng)時(shí)間都不能得到正確的結(jié)果,讓人的心態(tài)十分的炸裂,很容易讓我們脆弱的心靈受到傷害,于是我設(shè)計(jì)了這款矩陣計(jì)算器。

    1. 需求分析

當(dāng)前比較常見(jiàn)的計(jì)算器,對(duì)矩陣的計(jì)算操作十分的復(fù)雜,首先要定義矩陣,然后再定義的矩陣中選取幾個(gè)進(jìn)行運(yùn)算,矩陣最大只有4*4,最多也只能存儲(chǔ)4個(gè),功能也不全面。而且還要仔細(xì)的閱讀說(shuō)明書才能正確的操作,十分的復(fù)雜。手機(jī)上自帶的計(jì)算器也沒(méi)有計(jì)算矩陣的功能。而更高級(jí)的計(jì)算器又需要花費(fèi)很多的錢。而我利用python編寫了一款帶有圖形界面的矩陣計(jì)算器,可以實(shí)現(xiàn)對(duì)于矩陣的一些基本的運(yùn)算與操作。對(duì)于大學(xué)生學(xué)習(xí)《線性代數(shù)》有很大的幫助,在它的幫助下學(xué)習(xí)效率會(huì)得到提高。不僅提高了計(jì)算的效率,同時(shí)也能驗(yàn)證手算結(jié)果是否正確。

  1. 設(shè)計(jì)
    1. 布局

特征值計(jì)算器,python
首先對(duì)計(jì)算器的整體構(gòu)造進(jìn)行排版和布局,仿照傳統(tǒng)計(jì)算器的樣式,利用pyqt5,先在界面的上半部分設(shè)計(jì)一個(gè)多行的可編輯文本框plainTextEdit。之后在下方利用layout進(jìn)行排版創(chuàng)建一個(gè)5*5的按鈕組,按鈕組中的25個(gè)按鈕分別為:空格,行列式的值,轉(zhuǎn)置矩陣,特征值與向量,清空,刪除,逆矩陣,0,高斯消元法。換行,7,8,9,+,-,4,5,6,X,.,1,2,3,Ans,=。通過(guò)按鈕點(diǎn)擊相應(yīng)事件用來(lái)實(shí)現(xiàn)計(jì)算器不同的功能。效果如圖:

    1. 功能

本矩陣計(jì)算器通過(guò)點(diǎn)擊按鈕實(shí)現(xiàn)矩陣的輸入,加減乘計(jì)算,逆矩陣,轉(zhuǎn)置矩陣,求特征值與特征向量,求行列式的值,通過(guò)增廣矩陣的高斯消元法求一些方程的解。

點(diǎn)擊數(shù)字或者符號(hào),會(huì)直接在多行文本編輯框內(nèi)出現(xiàn)相應(yīng)的數(shù)字或者符號(hào)。輸入每個(gè)數(shù)據(jù)需要用空格隔開(kāi),點(diǎn)擊換行會(huì)輸出下一行的數(shù)據(jù)。

當(dāng)輸入一個(gè)矩陣后,若點(diǎn)擊逆矩陣,轉(zhuǎn)置矩陣等操作時(shí),在輸入矩陣滿足前提條件情況下會(huì)直接將結(jié)果輸出在多行文本編輯框內(nèi),并將結(jié)果存入Ans中。若點(diǎn)擊等于號(hào),則會(huì)把該矩陣存入Ans中。若點(diǎn)擊運(yùn)算符號(hào)則會(huì)自動(dòng)換行,輸入下一個(gè)矩陣。當(dāng)?shù)诙€(gè)矩陣輸入完成后,點(diǎn)擊等于號(hào),在輸入矩陣滿足前提條件情況下會(huì)直接將結(jié)果輸出在多行文本編輯框內(nèi),并將結(jié)果存入Ans中。

點(diǎn)擊Ans,后點(diǎn)擊等于號(hào),會(huì)將Ans存儲(chǔ)的結(jié)果輸出。而且上述對(duì)于矩陣的操作對(duì)Ans也同樣生效,對(duì)于矩陣的運(yùn)算也可以結(jié)合Ans進(jìn)行。

  1. 實(shí)現(xiàn)
    1. 點(diǎn)擊數(shù)字按鈕
# 點(diǎn)擊1

def clickbutton1(self=None):

??? global bo

??? if bo == 0:

??????? self.plainTextEdit.insertPlainText("1")

??? else:

??????? bo = 0

??????? self.plainTextEdit.appendPlainText("1")

分析:

以數(shù)字1為例。bo為全局變量,主要用來(lái)判斷當(dāng)前是否處于換行狀態(tài),處于換行狀態(tài)使用函數(shù)iappendPlainText會(huì)使數(shù)字輸出在新的一段,若不處于換行狀態(tài)則使用insertPlainText函數(shù)直接在本段追加。

    1. 點(diǎn)擊符號(hào)按鈕
  1. def?clickbuttonadd(self=None): ????self.plainTextEdit.appendPlainText("+") ????global?bo ??? bo =?1

分析:

以加號(hào)為例。對(duì)運(yùn)算更加方便的操作,點(diǎn)擊符號(hào)按鈕后直接另起一段進(jìn)行輸入,并將換行標(biāo)志bo置為1,下一次的輸入也是另起一段,方便矩陣的輸入。

3.3點(diǎn)擊操作按鈕

# 點(diǎn)擊清空

def clickbuttonclear(self=None):

??? self.plainTextEdit.clear()



# 點(diǎn)擊換行

def clickbutton_huanhang(self=None):

??? global bo

??? bo = 1

# 點(diǎn)擊刪除

def clickbuttondelete(self=None):

??? text_cursor = QTextCursor(self.plainTextEdit.document())

??? text_cursor.movePosition(QTextCursor.End)

??? text_cursor.deletePreviousChar()

特征值計(jì)算器,python

分析:

點(diǎn)擊清空會(huì)用clear函數(shù)將文本框清空,點(diǎn)擊換行會(huì)讓換行標(biāo)志bo為1,使下一次輸入另起一段,而點(diǎn)擊刪除按鈕則是使用QTextCursor選擇文本編輯框中的內(nèi)容并將光標(biāo)移動(dòng)到最后一個(gè)字符處,使用deletPreviousChar函數(shù)直接將前一個(gè)字符刪除。

3.4點(diǎn)擊逆矩陣按鈕

def clickbuttoninverse(self=None):

??? st = self.plainTextEdit.toPlainText()

??? x = len(st.split('\n'))

??? y = len((st.split('\n')[0]).split())

??? global ans

??? if x != y:

??????? self.plainTextEdit.setPlainText("錯(cuò)誤")

??? else:

??????? if st == "Ans":

??????????? num = ans

??????? else:

??????????? num = np.ones((x, y))

??????????? for i in range(x):

??????????????? for j in range(y):

??????????????????? num[i][j] = (st.split('\n')[i]).split()[j]

??????????? p = np.linalg.det(num)

??????????? if p == 0:

??????????????? self.plainTextEdit.setPlainText("錯(cuò)誤")

??????? num = np.linalg.inv(num)

??????? ans = num

??????? self.plainTextEdit.clear()

??????? for i in range(x):

??????????? for j in range(y):

??????????????? if j == 0:

??????????????????? self.plainTextEdit.appendPlainText(str(num[i][j]))

??????????????????? self.plainTextEdit.insertPlainText(" ")

??????????????? else:

??????????????????? self.plainTextEdit.insertPlainText(str(num[i][j]))

??????????????????? self.plainTextEdit.insertPlainText(" ")

特征值計(jì)算器,python

分析:

首先點(diǎn)擊該按鈕時(shí),文本編輯框內(nèi)已經(jīng)有了一個(gè)完整的矩陣或是Ans。之后將文本框內(nèi)的數(shù)據(jù)讀取為字符串。之后通過(guò)split()對(duì)字符串進(jìn)行操作,先以換行符進(jìn)行分割,可以求出當(dāng)前矩陣的行數(shù),之后選取一行以空格進(jìn)行分割,可以求出當(dāng)前矩陣的列數(shù)。之后通過(guò)求得的行數(shù)與列數(shù)創(chuàng)建一個(gè)全1矩陣num。矩陣num的每個(gè)元素與字符串中的位置一一對(duì)應(yīng)。通過(guò)分割字符串。循環(huán)賦值構(gòu)建矩陣,并求其行列式,因?yàn)樾辛惺綖?的矩陣沒(méi)有逆矩陣因此輸出錯(cuò)誤。若行列式不為0,利用np.linalg.inv函數(shù)計(jì)算逆矩陣。按矩陣順序輸出結(jié)果到文本編輯框內(nèi),并將結(jié)果存入Ans中。

若文本編輯框內(nèi)本來(lái)便是Ans,則直接進(jìn)行運(yùn)算,省去提取矩陣的步驟。

3.5點(diǎn)擊行列式的值按鈕

# 點(diǎn)擊行列式的值

def clickbuttondeterminant(self=None):

??? st = self.plainTextEdit.toPlainText()

??? x = len(st.split('\n'))

??? y = len((st.split('\n')[0]).split())

??? global ans

??? if x != y:

??????? self.plainTextEdit.setPlainText("錯(cuò)誤")

??? else:

??????? if st == "Ans":

??????????? num = ans

??????? else:

??????????? num = np.ones((x, y))

??????????? for i in range(x):

??????????????? for j in range(y):

??????????????????? num[i][j] = (st.split('\n')[i]).split()[j]

??????? p = np.linalg.det(num)

??????? p = round(p, 7)

??????? ans = p

??????? self.plainTextEdit.setPlainText(str(p))

特征值計(jì)算器,python

分析:

點(diǎn)擊該按鈕時(shí),會(huì)有與逆矩陣相似的方法提取當(dāng)前文本編輯框中的矩陣,之后利用np.linalg.det函數(shù) 計(jì)算行列式的值,因?yàn)榫仃囖D(zhuǎn)化之后所有數(shù)據(jù)均為浮點(diǎn)數(shù),而浮點(diǎn)數(shù)會(huì)在計(jì)算的過(guò)程中產(chǎn)生不可避免的精度誤差,于是我采用了保留小數(shù)的方法消除誤差,并將結(jié)果存入Ans中。

3.6點(diǎn)擊轉(zhuǎn)置矩陣按鈕

# 點(diǎn)擊轉(zhuǎn)置矩陣

def clickbuttontransposition(self=None):

??? st = self.plainTextEdit.toPlainText()

??? x = len(st.split('\n'))

??? y = len((st.split('\n')[0]).split())

??? global ans

??? if st == "Ans":

??????? num = ans

??? else:

??????? num = np.ones((x, y))

??????? for i in range(x):

??????????? for j in range(y):

??????????????? num[i][j] = (st.split('\n')[i]).split()[j]

??? num = num.transpose()

??? ans = num

??? self.plainTextEdit.clear()

??? self.plainTextEdit.setPlainText(str(num))

特征值計(jì)算器,python

分析:

?? 點(diǎn)擊轉(zhuǎn)置矩陣的按鈕后,會(huì)用類似逆矩陣的方法求得當(dāng)前矩陣,利用.transpose函數(shù)求得轉(zhuǎn)置矩陣并輸出,結(jié)果保留在Ans中。

3.7點(diǎn)擊特征值與特征向量按鈕

# 點(diǎn)擊特征值與特征向量

def clickbuttoneigenvalues(self=None):

??? st = self.plainTextEdit.toPlainText()

??? x = len(st.split('\n'))

??? y = len((st.split('\n')[0]).split())

??? if x != y:

??????? self.plainTextEdit.setPlainText("錯(cuò)誤")

??? else:

??????? global ans

??????? if st == "Ans":

??????????? num = ans

??????? else:

??????????? num = np.ones((x, y))

??????????? for i in range(x):

??????????????? for j in range(y):

??????????????????? num[i][j] = (st.split('\n')[i]).split()[j]

??????? eigenvalues, eigenvectors = np.linalg.eig(num)

??????? self.plainTextEdit.clear()

??????? self.plainTextEdit.appendPlainText(str(eigenvalues))

??????? self.plainTextEdit.appendPlainText(str(eigenvectors))

特征值計(jì)算器,python

分析:

由于設(shè)計(jì)時(shí)出現(xiàn)了26個(gè)按鈕,無(wú)法漂亮的排版,于是只能將求特征值與特征向量合并到一起,只是無(wú)法將兩個(gè)結(jié)果賦值到Ans中。

點(diǎn)擊特征值與特征向量的按鈕后,會(huì)用類似逆矩陣的方法求得當(dāng)前矩陣,利用np.linalg.eig函數(shù)求得轉(zhuǎn)置矩陣并輸出。

3.8點(diǎn)擊高斯消元法按鈕

def clickbuttongaosi(self=None):

??? st = self.plainTextEdit.toPlainText()

??? x = len(st.split('\n'))

??? y = len((st.split('\n')[0]).split())

??? num = np.ones((x, y))

??? res = np.ones((x, y - 1))

??? for i in range(x):

??????? for j in range(y):

??????????? num[i][j] = (st.split('\n')[i]).split()[j]

??? for i in range(x):

??????? for j in range(y - 1):

??????????? res[i][j] = num[i][j]

??? if np.linalg.matrix_rank(res) < np.linalg.matrix_rank(num):

??????? self.plainTextEdit.setPlainText("有無(wú)數(shù)解")

??? if np.linalg.matrix_rank(res) > np.linalg.matrix_rank(num):

??????? self.plainTextEdit.setPlainText("無(wú)解")

??? if np.linalg.matrix_rank(res) == np.linalg.matrix_rank(num):

??????? self.plainTextEdit.clear()

??????? for i in range(x - 1):

??????????? for j in range(i + 1, x):

??????????????? temp = num[j][i] / num[i][i]

??????? ????????for t in range(i, y):

??????????????????? num[j][t] = num[j][t] - temp * num[i][t]

??????? for i in range(np.linalg.matrix_rank(num) - 1, -1, -1):

??????????? res[i][1] = num[i][y - 1]

??????????? for j in range(i + 1, np.linalg.matrix_rank(num)):

??????????????? res[i][1] = res[i][1] - num[i][j] * res[j][0]

??????????? res[i][0] = res[i][1] / num[i][i]

??????? for i in range(np.linalg.matrix_rank(num)):

??????????? res[i][0] = round(res[i][0], 7)

??????????? self.plainTextEdit.appendPlainText(str(res[i][0]))

特征值計(jì)算器,python

分析:

首先使用了類似于求逆矩陣中將字符串轉(zhuǎn)化為矩陣的方法。得到矩陣num。之后刪去矩陣的最后一列,得到了系數(shù)矩陣res。利用np.linalg.matrix_rank函數(shù)分別求出系數(shù)矩陣與增廣矩陣的秩。

當(dāng)方程組的系數(shù)矩陣的秩與方程組增廣矩陣的秩相等且均等于方程組中未知數(shù)個(gè)數(shù)n的時(shí)候,方程組有唯一解。

當(dāng)方程組的系數(shù)矩陣的秩與方程組增廣矩陣的秩相等且均小于方程組中未知數(shù)個(gè)數(shù)n的時(shí)候,方程組有無(wú)窮多解。

當(dāng)方程組的系數(shù)矩陣的秩小于方程組增廣矩陣的秩的時(shí)候,方程組無(wú)解。

當(dāng)確定方程組有唯一解后,利用循環(huán),將每一行的第一個(gè)非0的數(shù)轉(zhuǎn)化為0,得到一個(gè)上三角矩陣。之后利用系數(shù)矩陣的第一列存儲(chǔ)方程的解,第二列存儲(chǔ)計(jì)算過(guò)程中的中間值,倒序求取方程的解并將結(jié)果輸出。

3.9點(diǎn)擊等號(hào)按鈕

# 點(diǎn)擊等于號(hào)

def clickbuttequal(self=None):

??? st = self.plainTextEdit.toPlainText()

??? global ans

??? temp = 1

??? x = len(st.split('\n'))

??? if st == "Ans":

??????? self.plainTextEdit.setPlainText(str(ans))

??? else:

??????? for i in range(x):

??????????? if st.split('\n')[i] == "Ans" and i == x - 1:

??????????????? temp = 0

??????????????? x1 = x - 2

??????????????? y1 = len((st.split('\n')[0]).split())

??????????????? op = st.split('\n')[x - 2]

??????????????? num2 = ans

??????????????? x2 = ans.shape[0]

??????????????? y2 = ans.shape[1]

??????????????? num1 = np.ones((x1, y1))

??????????????? for t in range(x1):

??????????????????? for j in range(y1):

??????????????????????? num1[t][j] = (st.split('\n')[t]).split()[j]

??????????????? break

??????????? if st.split('\n')[i] == "Ans" and i == 0:

??????????????? temp = 0

??????????????? x2 = x - 2

??????????????? y2 = len((st.split('\n')[x2]).split())

??????????????? num1 = ans

??????????????? op = st.split('\n')[1]

??????????????? x1 = ans.shape[0]

??????????????? y1 = ans.shape[1]

??????????????? num2 = np.ones((x2, y2))

??????????????? for t in range(2, x):

??????????????????? for j in range(y2):

??????????????????????? num2[t -2][j] = (st.split('\n')[t]).split()[j]

??????????????? break

??????? if temp:

??????????? x1 = 0

??????????? for i in range(x):

??????????????? if (st.split('\n')[i]).split()[0] == 'X' or (st.split('\n')[i]).split()[0] == '+' or \

??????????????????????? (st.split('\n')[i]).split()[0] == '-':

??????????????????? op = (st.split('\n')[i]).split()[0]

??????????????????? x1 = i

??????????????????? break

??????????? if x1 == 0:

??????????????? y = len((st.split('\n')[0]).split())

??????????????? num = np.ones((x, y))

??????????????? for i in range(x):

??????????????????? for j in range(y):

??????????????????????? num[i][j] = (st.split('\n')[i]).split()[j]

??????????????? ans = num

??????????????? self.plainTextEdit.setPlainText(str(ans))

??????????? else:

??????????????? y1 = len((st.split('\n')[0]).split())

??????????????? y2 = len((st.split('\n')[x1 + 1]).split())

??????????????? x2 = x - x1 - 1

??????????????? print(x1, y1, x2, y2)

??????????????? num1 = np.ones((x1, y1))

??????????????? num2 = np.ones((x2, y2))

??????????????? for i in range(x1):

??????????????????? for j in range(y1):

??????????????????????? num1[i][j] = (st.split('\n')[i]).split()[j]

??????????????? for i in range(x1 + 1, x):

??????????????????? for j in range(y2):

??????????????????????? num2[i - 1 - x1][j] = (st.split('\n')[i]).split()[j]

??????? if x1 != 0:

??????????? if op == '+':

??????????????? if x1 == x2 and y1 == y2:

??????????????????? ans = num1 + num2

??????????????????? self.plainTextEdit.setPlainText(str(ans))

??????????????? else:

??????????????????? self.plainTextEdit.setPlainText("錯(cuò)誤")

??????????? if op == '-':

??????? ????????if x1 == x2 and y1 == y2:

??????????????????? ans = num1 - num2

??????????????????? self.plainTextEdit.setPlainText(str(ans))

??????????????? else:

??????????????????? self.plainTextEdit.setPlainText("錯(cuò)誤")

??????????? if op == 'X':

??????????????? if y1 == x2:

??????????????????? ans = np.dot(num1, num2)

??????????????????? self.plainTextEdit.setPlainText(str(ans))

??????????????? else:

??????????????????? self.plainTextEdit.setPlainText("錯(cuò)誤")

特征值計(jì)算器,python

分析:

點(diǎn)擊等于號(hào)后需要分情況討論。

當(dāng)點(diǎn)擊等于號(hào)后檢測(cè)到文本輸入框內(nèi)只有一個(gè)矩陣時(shí),將矩陣存入Ans中并輸出。

?? 當(dāng)點(diǎn)擊等于號(hào)后檢測(cè)到文本輸入框內(nèi)只有Ans時(shí),直接將Ans的內(nèi)容輸出。

?? 當(dāng)點(diǎn)擊等于號(hào)后檢測(cè)到文本輸入框內(nèi)有兩個(gè)矩陣和運(yùn)算符時(shí),首先將文本框中的內(nèi)容全部轉(zhuǎn)化為字符串,以換行符為分割符進(jìn)行分割,求出當(dāng)前總行數(shù)。

之后進(jìn)行循環(huán),檢測(cè)每一行是否為Ans,若存在Ans,記錄其出現(xiàn)的位置。

若出現(xiàn)在第一行。則將其賦值給運(yùn)算矩陣num1,記錄其行數(shù)和列數(shù),運(yùn)算符便位于第二行,將運(yùn)算符記錄。然后使用經(jīng)典方法將運(yùn)算符之后字符串的分割賦值轉(zhuǎn)化為計(jì)算矩陣num2。

若出現(xiàn)在最后一行。則將其賦值給運(yùn)算矩陣num2,記錄其行數(shù)和列數(shù),運(yùn)算符便位于倒數(shù)二行,將運(yùn)算符記錄。然后使用經(jīng)典方法將運(yùn)算符之后字符串的分割賦值轉(zhuǎn)化為計(jì)算矩陣num1。

若不存在Ans,則需要尋找運(yùn)算符的位置找到之后,記錄運(yùn)算符。將運(yùn)算符之前的字符串使用經(jīng)典方法分割賦值給運(yùn)算矩陣num1,將運(yùn)算符之后的字符串使用經(jīng)典方法分割賦值給運(yùn)算矩陣num2。

之后進(jìn)入計(jì)算的判斷,首先判斷運(yùn)算符。

若為加或減,則判斷兩個(gè)運(yùn)算矩陣行和列是否相等,不滿足輸出錯(cuò)誤,滿足進(jìn)行運(yùn)算,并把結(jié)果存入Ans中。

若為乘,則判斷第一個(gè)矩陣列是否等于第二個(gè)矩陣的行,不滿足輸出錯(cuò)誤,滿足進(jìn)行運(yùn)算,并把結(jié)果存入Ans中。

4.測(cè)試

4.1逆矩陣

樣例輸入:

(1)1 2

2 1

(2)1 1 1

???? 2 3 4

???? 4 5 6


??

特征值計(jì)算器,python特征值計(jì)算器,python

4.2轉(zhuǎn)置矩陣

樣例輸入:

    1. 2

???? 3 4

(2)1 2

???? 4 5

???? 8 9?


樣例輸出:

特征值計(jì)算器,python

特征值計(jì)算器,python

4.3行列式的值

樣例輸入:

(1)1 2

???? 2 1

(2)1.2 2 1

???? 4.5 4 3

???? 8.2 1 2


樣例輸出:

特征值計(jì)算器,python

?特征值計(jì)算器,python

4.4特征值與特征向量

樣例輸入:

(1)1 2

???? 2 1


樣例輸出:

特征值計(jì)算器,python

4.5等號(hào)計(jì)算

樣例輸入:

(1)1 2

???? 2 1

??+

??4 4

??7 8

(2)Ans(此時(shí)Ans為上一次(1)運(yùn)算的結(jié)果)

???? -

???? 2 7

???? 1 1

(3)1 2 3

???? 4 5 6

???? X

???? Ans(此時(shí)Ans為上一次(2)運(yùn)算的結(jié)果)


樣例輸出:

特征值計(jì)算器,python

?特征值計(jì)算器,python

?特征值計(jì)算器,python

  1. 改進(jìn)

我所編輯的矩陣計(jì)算器能基本的解決一些基礎(chǔ)的有關(guān)的矩陣的簡(jiǎn)答基本的計(jì)算,供學(xué)生使用,系統(tǒng)的應(yīng)用了在Python課堂上學(xué)習(xí)的pyqt5可視化界面的編輯。對(duì)字符串的處理以及分析,對(duì)條件語(yǔ)句的熟練使用等等。但是還是有許多的弊端,如對(duì)于運(yùn)算錯(cuò)誤的處理,因?yàn)樵诰庉嬘?jì)算器的過(guò)程中我只是將我所能想到的計(jì)算失敗的情況做出了處理,并不能涵蓋所有的情況,如使用者輸入了一個(gè)不標(biāo)準(zhǔn)的矩陣,使用者無(wú)法進(jìn)行2個(gè)以上的矩陣的運(yùn)算。需要后續(xù)更系統(tǒng)的將所有的不能正常運(yùn)算的情況總結(jié)起來(lái),專門設(shè)立對(duì)錯(cuò)檢驗(yàn)函數(shù),應(yīng)該會(huì)讓bug變得更少。

在讓其更嚴(yán)謹(jǐn)之后還可以拓展按鈕,進(jìn)行功能的拓展,如矩陣的對(duì)角化,求矩陣的正定矩陣等?;蚴菍⑵渑c其他相關(guān)科目結(jié)合,如可以自動(dòng)計(jì)算《數(shù)值計(jì)算方法》這門課中解多元方程組的迭代矩陣,并判斷其是否收斂。等等。甚至可以將矩陣圖形化,根據(jù)對(duì)應(yīng)的矩陣中的值匯出相應(yīng)的函數(shù)圖像。

  1. 致謝

首先要感謝我的老師,在我沒(méi)有接觸過(guò)python的情況下帶我由淺入勝,由表及里逐步的學(xué)習(xí)python,逐步的拓展了我的眼界,提高了我的思維。到最后結(jié)課的時(shí)候也能獨(dú)自的完成一個(gè)比較復(fù)雜的大型程序來(lái)實(shí)現(xiàn)自己的一些想法。雖然過(guò)程比較漫長(zhǎng)和困難但給了我極大的收獲與進(jìn)步

同時(shí)網(wǎng)絡(luò)上的一些對(duì)于python庫(kù)的歸納總結(jié)讓我的研究更加省時(shí)省力。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-716186.html

到了這里,關(guān)于矩陣計(jì)算器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【問(wèn)題證明】矩陣方程化為特征值方程求得的特征值為什么是全部特征值?不會(huì)丟解嗎?

    【問(wèn)題證明】矩陣方程化為特征值方程求得的特征值為什么是全部特征值?不會(huì)丟解嗎?

    這個(gè)問(wèn)題困擾了我好久,一直感覺(jué)如果有其他的特征值沒(méi)法證偽,不過(guò)一直存在思想的層面,沒(méi)有實(shí)際解決,今天突然想到動(dòng)筆來(lái)解決,遂得解,證明如下。 這個(gè)證明看似證明過(guò)后很直觀,但實(shí)際上思維走向了牛角尖的時(shí)候光靠思考是無(wú)法得出令人信服的結(jié)論的,唯有實(shí)際動(dòng)

    2024年02月05日
    瀏覽(30)
  • 《數(shù)值分析》-3-特征值與特征矩陣

    《數(shù)值分析》-3-特征值與特征矩陣

    搜索技術(shù)的很多方面的知識(shí)發(fā)現(xiàn)都依賴于特征值或奇異值問(wèn)題,涉及到特征值計(jì)算問(wèn)題。 計(jì)算特征值沒(méi)有直接的方法。 定位特征值的計(jì)算方法基于冪迭代的思想,這是求解特征值的一類迭代方法。該思想的一個(gè)復(fù)雜版本被稱為QR算法,是確定典型矩陣所有特征值的一般方法。

    2024年02月08日
    瀏覽(30)
  • 5.1 矩陣的特征值和特征向量

    5.1 矩陣的特征值和特征向量

    學(xué)習(xí)特征值和特征向量的定義和性質(zhì),我會(huì)采取以下方法: 1. 學(xué)習(xí)線性代數(shù)基礎(chǔ)知識(shí):特征值和特征向量是線性代數(shù)中的重要概念,需要先掌握線性代數(shù)的基礎(chǔ)知識(shí),例如向量、矩陣、行列式、逆矩陣、轉(zhuǎn)置、內(nèi)積、外積等基本概念。 2. 學(xué)習(xí)特征值和特征向量的定義:特征

    2024年02月02日
    瀏覽(24)
  • MATLAB矩陣的特征值與特征向量

    MATLAB矩陣的特征值與特征向量

    設(shè)A是n階方陣,如果存在常數(shù)λ和n維非零列向量x,使得等式Ax = λx 成立,則稱λ為A的特征值,x是對(duì)應(yīng)特征值λ的特征向量。 在MATLAB中,計(jì)算矩陣的特征值與特征向量的函數(shù)是eig,常用的調(diào)用格式有兩種: E = eig(A):求矩陣A的全部特征向量值,構(gòu)成向量E。 [X,D] = eig(A):

    2024年02月11日
    瀏覽(22)
  • 矩陣分析:特征值分解

    矩陣分析:特征值分解

    伸縮 一個(gè)矩陣其實(shí)就是一個(gè)線性變換,因?yàn)橐粋€(gè)矩陣乘以一個(gè)向量后得到的向量,其實(shí)就相當(dāng)于將這個(gè)向量進(jìn)行了線性變換。比如說(shuō)下面的一個(gè)矩陣: 因?yàn)檫@個(gè)矩陣M乘以一個(gè)向量(x,y)的結(jié)果是: 旋轉(zhuǎn) 除了伸縮變換,也可以進(jìn)行旋轉(zhuǎn)變換。 上面的矩陣是對(duì)稱的,所以這個(gè)變

    2023年04月24日
    瀏覽(18)
  • 特征值與相似矩陣

    特征值與相似矩陣

    應(yīng)用:求冪,對(duì)角化,二次型,動(dòng)力系統(tǒng)等等 通俗 ? 向量α在矩陣A的線性變換作用下,保持方向不變,進(jìn)行比例為λ的伸縮。 官方(注意是方陣) 特征方程 ? (λE-A)α = 0 (α!=0)特征向量不能為0,但是 特征值可以為0或虛數(shù) 。方程中λ的次數(shù)應(yīng)與A的 階數(shù)相同 ,否則不是

    2024年02月06日
    瀏覽(18)
  • 線性代數(shù)(8):特征值、特征向量和相似矩陣

    線性代數(shù)(8):特征值、特征向量和相似矩陣

    ????????有矩陣 A 為 n 階矩陣,Ax =?λx ( λ 為一個(gè)實(shí)數(shù),x為 n 維非零列向量 ),則稱 λ 為方陣 A 的特征值,?x 為特征向量; 1.2.1 公式 ????????求特征值:使 | A -?λE | = 0,其解的 λ 值即為矩陣 A 的特征值; ? ? ? ? 求特征向量: 使 (?A -?λE?)x = 0,設(shè) x 為與 A 具有

    2024年02月11日
    瀏覽(25)
  • 從淺到深研究矩陣的特征值、特征向量

    從淺到深研究矩陣的特征值、特征向量

    本篇特征值、特征向量筆記來(lái)源于MIT線性代數(shù)課程。 對(duì)于方陣而言,現(xiàn)在要找一些特殊的數(shù)字,即特征值,和特殊的向量,即特征向量。 給定矩陣A,矩陣A作用在向量上,得到向量Ax(A的作用,作用在一個(gè)向量上,這其實(shí)就類似于函數(shù),輸入向量x,得到向量Ax) 在這些向量

    2024年02月12日
    瀏覽(17)
  • 【證明】矩陣不同特征值對(duì)應(yīng)的特征向量線性無(wú)關(guān)

    定理 1 設(shè) λ 1 , λ 2 , ? ? , λ m lambda_1,lambda_2,cdots,lambda_m λ 1 ? , λ 2 ? , ? , λ m ? 是方陣 A boldsymbol{A} A 的 m m m 個(gè)特征值, p 1 , p 2 , ? ? , p m boldsymbol{p}_1,boldsymbol{p}_2,cdots,boldsymbol{p}_m p 1 ? , p 2 ? , ? , p m ? 依次是與之對(duì)應(yīng)的特征向量,如果 λ 1 , λ 2 , ? ? , λ

    2024年02月09日
    瀏覽(20)
  • 線性代數(shù)中矩陣的特征值與特征向量

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) 在線性代數(shù)中,如果一個(gè)$ntimes n$的方陣$A$滿足如下兩個(gè)條件之一: $A$存在實(shí)數(shù)特征值,即$exists xneq 0:Ax=kx$,其中$kin mathbb{R}$; $lambda_{max}(A)neq 0$($lambda_{max}(A)$表示$A$的最大特征值),且$||x_{lambda_{max}(A)}||=sqrt{frac{lambda_{max}(A)}{lambda_{

    2024年02月08日
    瀏覽(31)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包