【发布时间】:2021-03-10 18:29:11
【问题描述】:
我有以下代码:
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, n, m, 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, n, 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, n, 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,4),dtype=np.complex)
Ej=np.asmatrix(E_j)
makeEj(E_j, n, m, Ex, Ey, Ez, j_x, j_y, j_z)
print(Ej)
print("\n\n\n")
hm_l=np.zeros((4,4),dtype=complex)
hml=np.asmatrix(hm_l)
makehml(hm_l, n, m, l, E_j)
print(hml)
values, vectors = lg.eig(Ej)
print(values)
plt.plot(values, phi)
plt.show()
我想将特征值绘制为 phi 的“函数”。你能帮我么? 现在我想我只是得到了我认为这是问题的最后一个矩阵特征值。但我不知道我该如何解决它。 当我尝试使用 lg.eig 获取它时,它看起来只给出了最后一个矩阵的特征值,所以我认为问题出在 while 循环周围。
提前谢谢你
【问题讨论】:
-
你能添加变量的值以便代码可以运行吗?
-
对不起,我现在添加了完整的代码。
标签: python numpy matplotlib matrix eigenvalue