Atkins Dynamic graph: 7E.6

7e_6_Ho_wavefuncs_1000
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')
       )

Back to top