• .

  • Of course we can not integrate from

  • , we used a large enough cutoff and assumes
    • .

    CLICK TO SHOW THE CODE!
    Figure 1. Left: forward and backward integration of the radial Schrödinger using scipy.integrate.odeint. The solid cyan line shows the exact solution. Right: the difference between the exact solution and the numerical results. Two different integration schemes are used, i.e. odeint in scipy and Numerov method.

    We then try to get the radial wavefunction of hydrogen (

    ) with quantum number

    . Some remarks here:

    • It turns out that the forward integration of the equation is not stable, as can be seen in the left panel of Figure 1.

    • It is better to use logarithmic mesh for radial variable rather than linear. Radial functions need smaller number of points in logarithmic mesh. For example, use np.logspace(1E-6, 2, 500) to generate the radial grid and pass to the radial_wfc_scipy function. Note that Numerov’s method only support linear mesh, as can be seen in the method section.

    One can show that the Numerov’s method also works fine for higher excited states. For example, below we compare the radial wavefunction

    for

    obtained from Numerov method with the exact solutions. The script can be found here.

    Figure 2. The lowest few radial wavefunctions
    with
    .

    2. Unknown energy levels

    If we don NOT know the correct energy levels, we can utilize the boundary condition to get the energy. Recall that the boundary condition is

    where

    is large enough so that . If corresponds to the correct energy level, when we integrate the radial wavefunction from backward using Numerov’s method, we should get . A deviation of the energy from will result in

    . Therefore we can use the so called “shooting” method to get the correct energy. The basic procedure is

    1. Start wite a guess energy, e.g.

    . In practice, the guess energy should be smaller than the smallest potential energy. In our case, should be smaller than . With the guess energy , integrate the equation and get the value of the function at , which we will denote as . Meanwhile, Set another energy
  • .

  • Increase

  • by an amount and get a new energy . Integrate the equation to get the value at , which we will denote as
  • .

  • Go back to step 2 if

  • .

  • At this step, we should have the correct energy enclosed in

    1. . Use root finding method, e.g. scipy.optimize.brentq to get the correct energy.

    CLICK TO SHOW THE CODE!

    References