python绘制盖尔圆并做特征值的隔离
生活随笔
收集整理的這篇文章主要介紹了
python绘制盖尔圆并做特征值的隔离
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本程序并非智能到直接運行隔離出所有特征值,而是需要高抬貴手,手動調節變換矩陣D的參數,以實現特征值的隔離。若期待直接找到能特征值隔離的D矩陣參數變化范圍,怕足下要失望了,鄙人暫沒有做到那一步,一是因為編此程序本就是鄙人想應付考試,以求從程序中手動調節D矩陣參數,以找到參數對蓋爾圓變化的影響程度,漲漲經驗,力求考試時憑直接,一擊中的,隨手一取,即達到特征值分離,若是直接找到范圍,又何來經驗呢?二是因為,鄙人懶得編下去了。但其根本原因在于,鄙人恐編不出來,貽笑大方,故索性收手,豈不美哉?
另,編此程序目的純粹一時興起,瞎鼓搗一通,若有不當之處,還請留言指正,不勝感激~
# -*- coding: utf-8 -*-
"""
Created on Sat Oct 26 22:24:35 2019@author: 陌上兮扶桑
"""
#coding:utf-8import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標簽
plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號
#有中文出現的情況,需要u'內容'(測試似乎不加也可以)import matplotlib.pyplot as pltdef plot_ger_circle(m:complex, flag:bool, flagP:bool):# flag:判斷行列。True為列蓋爾圓,藍色,False為行蓋爾圓,紅色# flagP:改變線型,True為虛線;False為實線(用來區分是否對矩陣進行了相似變換)mt = m.transpose()n = len(m)center = np.ones((n, 1), dtype = complex)radius = np.ones((n, 1), dtype = complex)x = np.ones(180)y = np.ones(180)t = [2*x for x in range(181)]for i in range(n):center[i] = m[i, i]if flag:radius[i] = sum(map(abs, [m[i, j] for j in range(n)]))if flagP:pattern = 'b:'else:pattern = 'b'else:radius[i] = sum(map(abs, [mt[i, j] for j in range(n)]))if flagP:pattern = 'r:'else:pattern = 'r'radius[i] = radius[i] - abs(m[i, i])x = [center[i].real + radius[i]*np.cos(np.deg2rad(k)) for k in t]y = [center[i].imag + radius[i]*np.sin(np.deg2rad(k)) for k in t]plt.plot(center[i].real, center[i].imag, '.k')plt.plot(x, y, pattern)plt.xlabel('實軸')plt.ylabel('虛軸')plt.grid(True)plt.axis('equal')plt.show()if __name__ == "__main__":# 測試矩陣A = np.array([[0, 1, 0.1, 1],[1, 10, 0, 1],[0.1, 0, -2, 0],[1, 1, 0, 3]])B = np.array([[9, 1, 1],[1, 1j, 1],[1, 1, 3]])# 變換陣D,這里變換采取D*A*D逆的形式AD = np.diag([1, 2.5, 1, 1])BD = np.diag([2, 1, 1])A_ = np.dot(np.dot(AD, A), np.linalg.inv(AD))B_ = np.dot(np.dot(BD, B), np.linalg.inv(BD))plt.figure(1)plot_ger_circle(A, True, False) # 變換前,實線plot_ger_circle(A_, True, True) # 變換后,虛線plt.title('方陣A蓋爾圓(藍色為行蓋爾圓,紅色為列蓋爾圓,虛線為變換后結果)')lengendtitle ='A = \n' + str(A) + '\n\nD = \n' + str(AD)plt.legend(title = lengendtitle) plt.show()plt.figure(2)plot_ger_circle(B, True, False)plot_ger_circle(B_, True, True)plt.title('方陣B蓋爾圓(藍色為行蓋爾圓,紅色為列蓋爾圓,虛線為變換后結果)')lengendtitle = 'B = \n' + str(B) + '\n\nD = \n' + str(BD)plt.legend(title = lengendtitle) plt.show()
?
總結
以上是生活随笔為你收集整理的python绘制盖尔圆并做特征值的隔离的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在一个新的地方一个网络wifi还要拉一根
- 下一篇: matlab图形绘制基础(东北大学MOO