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