【问题标题】:Plotting eigenvalues in python在python中绘制特征值
【发布时间】: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


【解决方案1】:

这是我如何将 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,8,10)
plt.plot(np.real(M_eigvals_v(x)))
plt.xlabel('φ'); plt.ylabel("eigenvalues");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-09
    • 2021-08-15
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    相关资源
    最近更新 更多