微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在python中绘制特征值

如何解决在python中绘制特征值

我有以下代码


import numpy as np #a mátrixok kezeléséhez
import cmath #komplex számokhoz
import math 
from scipy import linalg as lg
import matplotlib.pyplot as plt


 
def makeEj(mat,n,m,Ex,Ey,Ez,j_x,j_y,j_z): 
  
    for i in range(n): 
        for j in range(m): 
           
                mat[i][j] = Ex*j_x[i][j]+Ey*j_y[i][j]+Ez*j_z[i][j]
                
 
def makehml(mat,l,E_j): 
  
    for i in range(n): 
        for j in range(m):
            for k in range(l):
           
                mat[i][j] = E_j[i][k]*E_j[k][j]
     
                
def makediagonalz(mat,m): 
  
    for i in range(n): 
        
  
            # right and left diagonal condition
                 mat[i][i] = -3/2+i     


a=0
b=1
eye=complex(a,b)


i_phi=0
n_phi=100
d_phi=math.pi*2/n_phi

theta=0.75*math.pi

E=1

j_x=np.zeros((4,4))
j_y=np.zeros((4,4),dtype=np.complex)
j_z=np.zeros((4,4))

print(j_x)
print("\n \n \n")

jx=np.asmatrix(j_x)
jy=np.asmatrix(j_y)
jz=np.asmatrix(j_z)

print(jx)
print("\n \n \n")

n=4
m=4
l=4
makediagonalz(j_z,m)

print(jz)
 


j_x[0,1] =math.sqrt(3)/2
j_x[1,0] = math.sqrt(3)/2
j_x[1,2] =1
j_x[2,1] =1 
j_x[2,3] = math.sqrt(3)/2
j_x[3,2] = math.sqrt(3)/2

     
j_y[0,1] =math.sqrt(3)/2*-eye
j_y[1,0] =eye*math.sqrt(3)/2
j_y[1,2] =-eye
j_y[2,1] =eye
j_y[2,3] =-eye*math.sqrt(3)/2
j_y[3,2] =eye*math.sqrt(3)/2


print("\n \n \n")
print(jx)

print("\n \n \n")
print(jy)

Ex=0
Ey=0
Ez=0

while i_phi<n_phi:

phi=d_phi*i_phi
    
    Ex=E*math.sin(theta)*math.cos(phi)
    Ey=E*math.sin(theta)*math.sin(phi)
    Ez=E*math.cos(theta)
    i_phi+=1
    
    
print(Ex)
print("\n")     
print(Ey)
print("\n")     
print(Ez)

E_j=np.zeros((4,dtype=np.complex)
Ej=np.asmatrix(E_j)

makeEj(E_j,j_z)

print(Ej)
print("\n\n\n")

hm_l=np.zeros((4,dtype=complex)
hml=np.asmatrix(hm_l)

makehml(hm_l,E_j)

print(hml)

values,vectors = lg.eig(Ej)

print(values)

plt.plot(values,phi)
plt.show()

我想将特征值绘制为 phi 的“函数”。你能帮我么? 现在我想我只是得到了最后一个矩阵特征值,我认为这就是问题所在。但我不知道我该如何修复它。 看起来它只给出了最后一个矩阵的特征值,当我尝试用 lg.eig 获取它时,所以我认为问题出在 while 循环上。

提前致谢

解决方法

这里是我如何绘制 3x3 矩阵的特征值作为 φ 的函数。

import numpy as np
from scipy.linalg import eigvals
import matplotlib.pyplot as plt

M0 = np.array([[6,7,3],[2,8,5],[3,5,5]])

def f(φ):
    # a linear scalar function of φ
    return 3*φ-2

def M(φ):
    # Returns M but the element at [2,1] is calculated as f(φ)
    M = M0.copy()
    M[2,1]=f(φ)
    return M

def M_eigvals(φ):
    # calculate the eigenvals
    return lg.eigvals(M(φ))


M_eigvals_v = np.vectorize(M_eigvals,signature='()->(3)')

M_eigvals_v([1,2])

x=np.linspace(0,10)
plt.plot(np.real(M_eigvals_v(x)))
plt.xlabel('φ'); plt.ylabel("eigenvalues");

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。