用Python绘制概率密度函数

用Python绘制概率密度函数,python,eigenvalue,eigenvector,Python,Eigenvalue,Eigenvector,我需要用Python绘制与时间无关的薛定谔方程的概率密度函数。我需要使用方程的特征值和特征向量(特征函数)来实现这一点 我对特征值和特征向量的求解没有问题,但我不知道如何绘制它们,我尝试了许多不同的方法。也许我误解了这个问题 对于每个能级(n),应绘制一次图形。我有两个列表,一个用于本征向量,一个用于本征值(仅每个的实部)。这两个列表都按照与特征值相关的数字顺序进行排序,以便对特征向量列表进行排序,从而使eigvects[0]与eigvals[0]相关联 以下是我的代码的相关部分: from _

我需要用Python绘制与时间无关的薛定谔方程的概率密度函数。我需要使用方程的特征值和特征向量(特征函数)来实现这一点

我对特征值和特征向量的求解没有问题,但我不知道如何绘制它们,我尝试了许多不同的方法。也许我误解了这个问题

对于每个能级(n),应绘制一次图形。我有两个列表,一个用于本征向量,一个用于本征值(仅每个的实部)。这两个列表都按照与特征值相关的数字顺序进行排序,以便对特征向量列表进行排序,从而使
eigvects[0]
eigvals[0]
相关联

以下是我的代码的相关部分:

from __future__ import division
import numpy as np
from scipy import linalg
from math import trunc
import matplotlib.pyplot as plt

#infite square well from 0 to 1

upper=1
lower=0

#step size t

t=10


...  #in this omitted block, the gradient is computed


#D is the gradient 

D*=1/(dx*dx)

#hamiltonian operator

H=-.5*D

#solves the eigenvalues and eigenvectors

eigs=linalg.eig(H)

eigvals=np.real(eigs[0])
eigvects=np.real(eigs[1])


... #in this omitted block, the two lists are sorted


plt.plot(range(0,n),eigvects[0]) #I thought this would graph the probability density function for the first energy level, but it just graphs nonsense
plt.show()
我已经确认我的特征值和特征向量是正确的

我试图让图形看起来像这样(不是格式,只是曲线):

我不需要为自己编写代码,我只希望在绘制这些代码时,能给我一个从何处开始的线索。谢谢

根据评论中的一个问题,以下是eigvals示例列表和t=3时的eigvects示例列表:

eigvals=[1.1715728752538097, 3.9999999999999996]

eigvects=[array([-0.5       ,  0.70710678,  0.5       ]), array([  7.07106781e-01,   4.05925293e-16,   7.07106781e-01])]

当你把它们分类时,你到底在做什么?
eigvects
是浮点列表吗?排序有点复杂,因为我希望eigvects的顺序与eigvals的顺序相同。我用每个特征值及其相关的特征向量组成元组对它们进行排序,然后根据特征值对它们进行排序,然后将值剥离回各自的列表中
eigvects
是一个列表列表(内部列表是
linalg.eig
返回的标准化特征向量/特征函数)。我不知道这是如何工作的-在2D绘图中,X和Y值是什么?排序并不复杂:
val,vec=np.linalg.eig(H)
,然后
s=np.argsort(val)
val=val[s]
vec=vec[:,s]
。现在,您已经对特征值进行了排序,将顺序存储在
s
中,并以相同的方式重新排列了特征向量(存储在
vec
的列中)。顺便说一句,你不认为你的哈密顿量是一个对称矩阵吗?在这种情况下,您可以使用
np.linalg.eigh
,它适用于对称矩阵,速度更快,并返回已排序的特征值。现在,如果你的特征值和特征向量被确认是正确的。。。有什么问题吗?当你把它们分类时,你到底在做什么?
eigvects
是浮点列表吗?排序有点复杂,因为我希望eigvects的顺序与eigvals的顺序相同。我用每个特征值及其相关的特征向量组成元组对它们进行排序,然后根据特征值对它们进行排序,然后将值剥离回各自的列表中
eigvects
是一个列表列表(内部列表是
linalg.eig
返回的标准化特征向量/特征函数)。我不知道这是如何工作的-在2D绘图中,X和Y值是什么?排序并不复杂:
val,vec=np.linalg.eig(H)
,然后
s=np.argsort(val)
val=val[s]
vec=vec[:,s]
。现在,您已经对特征值进行了排序,将顺序存储在
s
中,并以相同的方式重新排列了特征向量(存储在
vec
的列中)。顺便说一句,你不认为你的哈密顿量是一个对称矩阵吗?在这种情况下,您可以使用
np.linalg.eigh
,它适用于对称矩阵,速度更快,并返回已排序的特征值。现在,如果你的特征值和特征向量被确认是正确的。。。有什么问题吗?