import math
import numpy as np
import matplotlib.pyplot as plt
import ipywidgets as widgets
from matplotlib import figure
from scipy import special
from ipywidgets import FloatSlider, HBox, VBox, Layout, Output, Label, Box, GridBox
from matplotlib import ticker
#set up how range of plot, ticks, grid
#def slfvee(m,k):
def slfvee(m,k):
sl = 0.5*(k/m)**0.5
return sl
def alfvee(m,k):
al = 1.5*(k/m)**0.5
return al
def blfvee(m,k):
bl = 2.5*(k/m)**0.5
return bl
def clfvee(m,k):
cl = 3.5*(k/m)**0.5
return cl
def dlfvee(m,k):
dl = 4.5*(k/m)**0.5
return dl
def elfvee(m,k):
el = 5.5*(k/m)**0.5
return el
def flfvee(m,k):
fl = 6.5*(k/m)**0.5
return fl
def glfvee(m,k):
gl = 7.5*(k/m)**0.5
return gl
def hlfvee(m,k):
hl = 8.5*(k/m)**0.5
return hl
def ilfvee(m,k):
il = 9.5*(k/m)**0.5
return il
px=1.0/96 #pixel in inches
xmin=-5
xmax=5
xgrid=.1
x_ticks = np.arange(xmin,xmax+xgrid,xgrid)
show_x_ticks=False
show_x_tick_labels=False
ymin=0
ymax=10.
ygrid=2.5
show_y_ticks=False
show_y_tick_labels=False
y_ticks = np.arange(ymin, ymax+ygrid, ygrid)
show_grid=False
npts=500
x = np.linspace(xmin, xmax, npts)
y=np.linspace(ymin, ymax, npts)
V=np.linspace(xmin, xmax, npts)
psi0=np.linspace(ymin, ymax, npts)
psi1=np.linspace(ymin, ymax, npts)
psi2=np.linspace(ymin, ymax, npts)
psi3=np.linspace(ymin, ymax, npts)
psi4=np.linspace(ymin, ymax, npts)
psi5=np.linspace(ymin, ymax, npts)
psi6=np.linspace(ymin, ymax, npts)
psi7=np.linspace(ymin, ymax, npts)
psi8=np.linspace(ymin, ymax, npts)
psi9=np.linspace(ymin, ymax, npts)
psi00=np.linspace(ymin, ymax, npts)
psi11=np.linspace(ymin, ymax, npts)
psi22=np.linspace(ymin, ymax, npts)
psi33=np.linspace(ymin, ymax, npts)
psi44=np.linspace(ymin, ymax, npts)
psi55=np.linspace(ymin, ymax, npts)
psi66=np.linspace(ymin, ymax, npts)
psi77=np.linspace(ymin, ymax, npts)
psi88=np.linspace(ymin, ymax, npts)
psi99=np.linspace(ymin, ymax, npts)
def HOplot(m,k,pl_1):
x = np.linspace(xmin, xmax, npts)
y=np.linspace(ymin, ymax, npts)
V=np.linspace(xmin, xmax, npts)
psi0=np.linspace(ymin, ymax, npts)
psi1=np.linspace(ymin, ymax, npts)
psi2=np.linspace(ymin, ymax, npts)
psi3=np.linspace(ymin, ymax, npts)
psi4=np.linspace(ymin, ymax, npts)
psi5=np.linspace(ymin, ymax, npts)
psi6=np.linspace(ymin, ymax, npts)
psi7=np.linspace(ymin, ymax, npts)
psi8=np.linspace(ymin, ymax, npts)
psi9=np.linspace(ymin, ymax, npts)
psi00=np.linspace(ymin, ymax, npts)
psi11=np.linspace(ymin, ymax, npts)
psi22=np.linspace(ymin, ymax, npts)
psi33=np.linspace(ymin, ymax, npts)
psi44=np.linspace(ymin, ymax, npts)
psi55=np.linspace(ymin, ymax, npts)
psi66=np.linspace(ymin, ymax, npts)
psi77=np.linspace(ymin, ymax, npts)
psi88=np.linspace(ymin, ymax, npts)
psi99=np.linspace(ymin, ymax, npts)
e1=0.5*(k/m)**0.5
e2=1.5*(k/m)**0.5
e3=2.5*(k/m)**0.5
e4=3.5*(k/m)**0.5
e5=4.5*(k/m)**0.5
e6=5.5*(k/m)**0.5
e7=6.5*(k/m)**0.5
e8=7.5*(k/m)**0.5
e9=8.5*(k/m)**0.5
e10=9.5*(k/m)**0.5
fig = plt.figure(figsize=(800*px,600*px),dpi=96)
ax = fig.add_subplot(111)
plt.plot([-5,5], [e1,e1], linestyle='-', lw=1,color='red')
plt.plot([-5,5], [e2,e2], linestyle='-', lw=1,color='red')
plt.plot([-5,5], [e3,e3], linestyle='-', lw=1,color='red')
plt.plot([-5,5], [e4,e4], linestyle='-', lw=1,color='red')
plt.plot([-5,5], [e5,e5], linestyle='-', lw=1,color='red')
plt.plot([-5,5], [e6,e6], linestyle='-', lw=1,color='red')
plt.plot([-5,5], [e7,e7], linestyle='-', lw=1,color='red')
plt.plot([-5,5], [e8,e8], linestyle='-', lw=1,color='red')
plt.plot([-5,5], [e9,e9], linestyle='-', lw=1,color='red')
plt.plot([-5,5], [e10,e10], linestyle='-', lw=1,color='red')
plt.plot([-5,5], [0,0], linestyle='-', lw=1,color='black')
plt.plot([-5,-5], [0,11], linestyle='-', lw=1,color='black')
plt.plot([5,5], [0,11], linestyle='-', lw=1,color='black')
plt.plot([0,0], [0,11], linestyle=':', lw=1,color='grey')
plt.plot(x,y,linewidth=0,linestyle='-')
plt.axis([-6,6,-1,10])
plt.axis('off')
for i in range (0, npts):
V[i] = 0.5*k*x[i]**2
psi0[i] = ((k*m)**0.25/(math.pi**0.5*2**0*math.factorial(0)))**0.5*math.exp(-0.5*(x[i]*(m*k)**0.25)**2)+e1
psi1[i] = ((k*m)**0.25/(math.pi**0.5*2**1*math.factorial(1)))**0.5*2*x[i]*(m*k)**0.25*math.exp(-0.5*(x[i]*(m*k)**0.25)**2)+e2
psi2[i] = ((k*m)**0.25/(math.pi**0.5*2**2*math.factorial(2)))**0.5*(4*(x[i]*(m*k)**0.25)**2-2)*math.exp(-0.5*(x[i]*(m*k)**0.25)**2)+e3
psi3[i] = ((k*m)**0.25/(math.pi**0.5*2**3*math.factorial(3)))**0.5*(8*(x[i]*(m*k)**0.25)**3-12*x[i]*(m*k)**0.25)*math.exp(-0.5*(x[i]*(m*k)**0.25)**2)+e4
psi4[i] = ((k*m)**0.25/(math.pi**0.5*2**4*math.factorial(4)))**0.5*(16*(x[i]*(m*k)**0.25)**4-48*(x[i]*(m*k)**0.25)**2+12)*math.exp(-0.5*(x[i]*(m*k)**0.25)**2)+e5
psi5[i] = ((k*m)**0.25/(math.pi**0.5*2**5*math.factorial(5)))**0.5*(32*(x[i]*(m*k)**0.25)**5-160*(x[i]*(m*k)**0.25)**3+120*x[i]*(m*k)**0.25)*math.exp(-0.5*(x[i]*(m*k)**0.25)**2)+e6
psi6[i] = ((k*m)**0.25/(math.pi**0.5*2**6*math.factorial(6)))**0.5*(64*(x[i]*(m*k)**0.25)**6-480*(x[i]*(m*k)**0.25)**4+720*(x[i]*(m*k)**0.25)**2-120)*math.exp(-0.5*(x[i]*(m*k)**0.25)**2)+e7
psi7[i] = ((k*m)**0.25/(math.pi**0.5*2**7*math.factorial(7)))**0.5*(128*(x[i]*(m*k)**0.25)**7-1344*(x[i]*(m*k)**0.25)**5+3360*(x[i]*(m*k)**0.25)**3-1680*x[i]*(m*k)**0.25)*math.exp(-0.5*(x[i]*(m*k)**0.25)**2)+e8
psi8[i] =((k*m)**0.25/(math.pi**0.5*2**8*math.factorial(8)))**0.5*(256*(x[i]*(m*k)**0.25)**8-3584*(x[i]*(m*k)**0.25)**6+13440*(x[i]*(m*k)**0.25)**4-13440*(x[i]*(m*k)**0.25)**2+1680)*math.exp(-0.5*(x[i]*(m*k)**0.25)**2)+e9
psi9[i] = ((k*m)**0.25/(math.pi**0.5*2**9*math.factorial(9)))**0.5*(512*(x[i]*(m*k)**0.25)**9-9216*(x[i]*(m*k)**0.25)**7+48384*(x[i]*(m*k)**0.25)**5-80640*(x[i]*(m*k)**0.25)**3+30240*(x[i]*(m*k)**0.25))*math.exp(-0.5*(x[i]*(m*k)**0.25)**2)+e10
psi00[i] = (((k*m)**0.25/(math.pi**0.5*2**0*math.factorial(0)))**0.5*math.exp(-0.5*(x[i]*(m*k)**0.25)**2))**2+e1
psi11[i] = (((k*m)**0.25/(math.pi**0.5*2**1*math.factorial(1)))**0.5*2*x[i]*(m*k)**0.25*math.exp(-0.5*(x[i]*(m*k)**0.25)**2))**2+e2
psi22[i] = (((k*m)**0.25/(math.pi**0.5*2**2*math.factorial(2)))**0.5*(4*(x[i]*(m*k)**0.25)**2-2)*math.exp(-0.5*(x[i]*(m*k)**0.25)**2))**2+e3
psi33[i] = (((k*m)**0.25/(math.pi**0.5*2**3*math.factorial(3)))**0.5*(8*(x[i]*(m*k)**0.25)**3-12*x[i]*(m*k)**0.25)*math.exp(-0.5*(x[i]*(m*k)**0.25)**2))**2+e4
psi44[i] = (((k*m)**0.25/(math.pi**0.5*2**4*math.factorial(4)))**0.5*(16*(x[i]*(m*k)**0.25)**4-48*(x[i]*(m*k)**0.25)**2+12)*math.exp(-0.5*(x[i]*(m*k)**0.25)**2))**2+e5
psi55[i] = (((k*m)**0.25/(math.pi**0.5*2**5*math.factorial(5)))**0.5*(32*(x[i]*(m*k)**0.25)**5-160*(x[i]*(m*k)**0.25)**3+120*x[i]*(m*k)**0.25)*math.exp(-0.5*(x[i]*(m*k)**0.25)**2))**2+e6
psi66[i] = (((k*m)**0.25/(math.pi**0.5*2**6*math.factorial(6)))**0.5*(64*(x[i]*(m*k)**0.25)**6-480*(x[i]*(m*k)**0.25)**4+720*(x[i]*(m*k)**0.25)**2-120)*math.exp(-0.5*(x[i]*(m*k)**0.25)**2))**2+e7
psi77[i] = (((k*m)**0.25/(math.pi**0.5*2**7*math.factorial(7)))**0.5*(128*(x[i]*(m*k)**0.25)**7-1344*(x[i]*(m*k)**0.25)**5+3360*(x[i]*(m*k)**0.25)**3-1680*x[i]*(m*k)**0.25)*math.exp(-0.5*(x[i]*(m*k)**0.25)**2))**2+e8
psi88[i] =(((k*m)**0.25/(math.pi**0.5*2**8*math.factorial(8)))**0.5*(256*(x[i]*(m*k)**0.25)**8-3584*(x[i]*(m*k)**0.25)**6+13440*(x[i]*(m*k)**0.25)**4-13440*(x[i]*(m*k)**0.25)**2+1680)*math.exp(-0.5*(x[i]*(m*k)**0.25)**2))**2+e9
psi99[i] = (((k*m)**0.25/(math.pi**0.5*2**9*math.factorial(9)))**0.5*(512*(x[i]*(m*k)**0.25)**9-9216*(x[i]*(m*k)**0.25)**7+48384*(x[i]*(m*k)**0.25)**5-80640*(x[i]*(m*k)**0.25)**3+30240*(x[i]*(m*k)**0.25))*math.exp(-0.5*(x[i]*(m*k)**0.25)**2))**2+e10
if pl_1=='plot wavefunction':
if slfvee(m,k) <10:
plt.plot(x,psi0, lw=2, linestyle='-', color='purple')
if alfvee(m,k) <10:
plt.plot(x,psi1, lw=2, linestyle='-', color='purple')
if blfvee(m,k) <10:
plt.plot(x,psi2, lw=2, linestyle='-', color='purple')
if clfvee(m,k) <10:
plt.plot(x,psi3, lw=2, linestyle='-', color='purple')
if dlfvee(m,k) <10:
plt.plot(x,psi4, lw=2, linestyle='-', color='purple')
if elfvee(m,k) <10:
plt.plot(x,psi5, lw=2, linestyle='-', color='purple')
if flfvee(m,k) <10:
plt.plot(x,psi6, lw=2, linestyle='-', color='purple')
if glfvee(m,k) <10:
plt.plot(x,psi7, lw=2, linestyle='-', color='purple')
if hlfvee(m,k) <10:
plt.plot(x,psi8, lw=2, linestyle='-', color='purple')
if ilfvee(m,k) <10:
plt.plot(x,psi9, lw=2, linestyle='-', color='purple')
if pl_1=='plot square of wavefunction':
if slfvee(m,k) <10:
plt.plot(x,psi00, lw=2, linestyle='-', color='purple')
if alfvee(m,k) <10:
plt.plot(x,psi11, lw=2, linestyle='-', color='purple')
if blfvee(m,k) <10:
plt.plot(x,psi22, lw=2, linestyle='-', color='purple')
if clfvee(m,k) <10:
plt.plot(x,psi33, lw=2, linestyle='-', color='purple')
if dlfvee(m,k) <10:
plt.plot(x,psi44, lw=2, linestyle='-', color='purple')
if elfvee(m,k) <10:
plt.plot(x,psi55, lw=2, linestyle='-', color='purple')
if flfvee(m,k) <10:
plt.plot(x,psi66, lw=2, linestyle='-', color='purple')
if glfvee(m,k) <10:
plt.plot(x,psi77, lw=2, linestyle='-', color='purple')
if hlfvee(m,k) <10:
plt.plot(x,psi88, lw=2, linestyle='-', color='purple')
if ilfvee(m,k) <10:
plt.plot(x,psi99, lw=2, linestyle='-', color='purple')
# if pl_1=='plot square of wavefunction':
plt.plot(x,V, lw=2, linestyle='-', color='steelblue')
plt.text(0,-0.5,'0',fontsize='x-large',horizontalalignment='center')
plt.text(0,-0.9,'Displacement',fontsize='x-large',horizontalalignment='center')
plt.text(2.5,-0.9,'+ve',fontsize='x-large',horizontalalignment='center')
plt.text(-2.5,-0.9,'$-$ve',fontsize='x-large',horizontalalignment='center')
# plt.text(-0.095,e1-0.1,'1',fontsize='x-large',horizontalalignment='center')
#plt.text(l+0.105,e1-0.1,'1',fontsize='x-large',horizontalalignment='center')
plt.text(4.75,10.9,'$v$',fontsize='x-large',horizontalalignment='center')
#lt.text(-4.75,10.5,'$E_v$',fontsize='x-large',horizontalalignment='center')
plt.text(-5.5,5,'Energy',horizontalalignment='center',fontsize='x-large',rotation='vertical')
plt.axis([-6,6,-1,10.8])
if slfvee(m,k) <10:
plt.text(4.75,e1+0.2,'0',fontsize='x-large',horizontalalignment='center')
if alfvee(m,k) <10:
plt.text(4.75,e2+0.2,'1',fontsize='x-large',horizontalalignment='center')
if blfvee(m,k) <10:
plt.text(4.75,e3+0.2,'2',fontsize='x-large',horizontalalignment='center')
if clfvee(m,k) <10:
plt.text(4.75,e4+0.2,'3',fontsize='x-large',horizontalalignment='center')
if dlfvee(m,k) <10:
plt.text(4.75,e5+0.2,'4',fontsize='x-large',horizontalalignment='center')
if elfvee(m,k) <10:
plt.text(4.75,e6+0.2,'5',fontsize='x-large',horizontalalignment='center')
if flfvee(m,k) <10:
plt.text(4.75,e7+0.2,'6',fontsize='x-large',horizontalalignment='center')
if glfvee(m,k) <10:
plt.text(4.75,e8+0.2,'7',fontsize='x-large',horizontalalignment='center')
if hlfvee(m,k) <10:
plt.text(4.75,e9+0.2,'8',fontsize='x-large',horizontalalignment='center')
if ilfvee(m,k) <10.01:
plt.text(4.75,e10+0.2,'9',fontsize='x-large',horizontalalignment='center')
plt.show()
k=FloatSlider(description='',min=1, max=10, step=0.1, value=5,continuous_update=False,
orientation='vertical',readout=False,readout_format='.1f',
style=dict(description_width='25px',handle_color='gray'),
layout=dict(width='50px', height='200px',margin='10px 0px 0px 0px'))
m=FloatSlider(description='',min=0.1, max=1.0, step=0.01, value=.5,continuous_update=False,
orientation='vertical',readout=False,readout_format='.1f',
style=dict(description_width='25px',handle_color='gray'),
layout=dict(width='50px', height='200px',margin='10px 0px 0px 0px'))
pl_1=widgets.RadioButtons(options=['no wavefunction', 'plot wavefunction', 'plot square of wavefunction'],
value='plot wavefunction', description='',disabled=False,
layout=dict(width='200px',margin='70px 0px 0px 0px'))
out = widgets.interactive_output(HOplot,
{'pl_1':pl_1, 'm':m,
'k':k})
m_label=widgets.HTMLMath(value='<i>m</i>',layout=dict(margin='30px 0px 0px 0px'))
k_label=widgets.HTMLMath(value='<i>k</i><sub>f</sub>',layout=dict(margin='30px 0px 0px 0px'))
m_control=VBox([m_label,m],layout=Layout(align_items='center',width='50px'))
k_control=VBox([k_label,k],layout=Layout(align_items='center',width='50px'))
GridBox(children=[VBox([pl_1,HBox([m_control,k_control])]),out],
layout=Layout(
width='1000px',
grid_template_columns='200px 800px',
grid_template_rows='auto',
grid_gap='0px 0px')
)