用Python绘制概率密度函数
我需要用Python绘制与时间无关的薛定谔方程的概率密度函数。我需要使用方程的特征值和特征向量(特征函数)来实现这一点 我对特征值和特征向量的求解没有问题,但我不知道如何绘制它们,我尝试了许多不同的方法。也许我误解了这个问题 对于每个能级(n),应绘制一次图形。我有两个列表,一个用于本征向量,一个用于本征值(仅每个的实部)。这两个列表都按照与特征值相关的数字顺序进行排序,以便对特征向量列表进行排序,从而使用Python绘制概率密度函数,python,eigenvalue,eigenvector,Python,Eigenvalue,Eigenvector,我需要用Python绘制与时间无关的薛定谔方程的概率密度函数。我需要使用方程的特征值和特征向量(特征函数)来实现这一点 我对特征值和特征向量的求解没有问题,但我不知道如何绘制它们,我尝试了许多不同的方法。也许我误解了这个问题 对于每个能级(n),应绘制一次图形。我有两个列表,一个用于本征向量,一个用于本征值(仅每个的实部)。这两个列表都按照与特征值相关的数字顺序进行排序,以便对特征向量列表进行排序,从而使eigvects[0]与eigvals[0]相关联 以下是我的代码的相关部分: from _
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
,它适用于对称矩阵,速度更快,并返回已排序的特征值。现在,如果你的特征值和特征向量被确认是正确的。。。有什么问题吗?