Skip to content

Instantly share code, notes, and snippets.

@certik
Created August 30, 2012 21:08
Show Gist options
  • Select an option

  • Save certik/3541041 to your computer and use it in GitHub Desktop.

Select an option

Save certik/3541041 to your computer and use it in GitHub Desktop.
from sympy import var, Function, sqrt, exp
P = Function("P")
V = Function("V")
var("r E l")
eq = P(r).diff(r, 2) - 2*(V(r) - E + l*(l+1)/(2*r**2)) * P(r)
print "Schroedinger equation:"
print eq
print "For Coulombic potential:"
var("Z")
eq = eq.subs(V(r), -Z/r)
print eq
print "Transform lam = sqrt(-2*E):"
var("lam")
# lam = sqrt(-2*E) => lam^2 = -2*E => E = -lam^2/2
eq = eq.subs(E, -lam**2/2)
print eq
print "Transform P(r) = r^{l+1}*e^{-lam*r}*F(r)"
F = Function("F")
eq = eq.subs(P(r), r**(l+1) * exp(-lam*r) * F(r))
eq = eq.doit().simplify()
print eq
print
eq = eq/(r**l * exp(-lam*r))
# This should print:
# 2*Z*F(r) - 2*l*lam*F(r) + 2*l*Derivative(F(r), r) - 2*lam*r*Derivative(F(r),
# r) - 2*lam*F(r) + r*Derivative(F(r), r, r) + 2*Derivative(F(r), r)
print eq
print
print "Coefficient F(r):"
print eq.coeff(F(r))
print "Coefficient F'(r):"
print eq.coeff(F(r).diff(r))
print "Coefficient F''(r):"
print eq.coeff(F(r).diff(r, 2))
print
print "Transform x = 2*lambda*r:"
var("x")
eq = eq.subs(r, x/(2*lam))
print eq
Schroedinger equation:
-(-2*E + l*(l + 1)/r**2 + 2*V(r))*P(r) + Derivative(P(r), r, r)
For Coulombic potential:
-(-2*E - 2*Z/r + l*(l + 1)/r**2)*P(r) + Derivative(P(r), r, r)
Transform lam = sqrt(-2*E):
-(-2*Z/r + l*(l + 1)/r**2 + lam**2)*P(r) + Derivative(P(r), r, r)
Transform P(r) = r^{l+1}*e^{-lam*r}*F(r)
r**l*(2*Z*F(r) - 2*l*lam*F(r) + 2*l*Derivative(F(r), r) - 2*lam*r*Derivative(F(r), r) - 2*lam*F(r) + r*Derivative(F(r), r, r) + 2*Derivative(F(r), r))*exp(-lam*r)
2*Z*F(r) - 2*l*lam*F(r) + 2*l*Derivative(F(r), r) - 2*lam*r*Derivative(F(r), r) - 2*lam*F(r) + r*Derivative(F(r), r, r) + 2*Derivative(F(r), r)
Coefficient F(r):
2*Z - 2*l*lam - 2*lam
Coefficient F'(r):
2*l - 2*lam*r + 2
Coefficient F''(r):
r
Transform x = 2*lambda*r:
2*Z*F(x/(2*lam)) - 2*l*lam*F(x/(2*lam)) + 2*l*Subs(Derivative(F(r), r), (r,), (x/(2*lam),)) - 2*lam*F(x/(2*lam)) - x*Subs(Derivative(F(r), r), (r,), (x/(2*lam),)) + 2*Subs(Derivative(F(r), r), (r,), (x/(2*lam),)) + x*Subs(Derivative(F(r), r, r), (r,), (x/(2*lam),))/(2*lam)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment