Mathematik für Ingenieure mit Python

Mathematische Grundlagen
www.grund-wissen.de/mathematik
WinPython
Alles was man für Mathematik mit Python unter Windows braucht.
winpython.sourceforge.net
Download WinPython
Python-Code
vollständiger Python-Code: atom_orbital_2d.py
Fragen & Antworten
Python Forum:
Kugelflächenfunktionen in 3D visualisieren
Atomorbital psi_100 Atomorbital psi_200 Atomorbital psi_320 Atomorbital psi_411 Atomorbital psi_430

Atomorbitale in 2D

Atomorbital psi_310
In diesem Beispiel werden die Atomorbitale des Wasserstoffatoms mit Numpy, Scipy und Matplotlib in 2D visualisiert.
import numpy as np
from scipy.special import sph_harm, genlaguerre
from scipy.misc import factorial
import matplotlib.pyplot as plt
from matplotlib import cm

Z   = 1  # Anzahl der Elementarladungen
a_0 = 1. # Bohrscher Atomradius

def R(n,l, r):
    """Radialfunktion"""
    Z_n = 2*Z/(n*a_0)
    root = np.sqrt(Z_n**3 * factorial(n-l-1)/(2*n*factorial(n+l)))
    rho = Z_n * r
    L = np.polyval(genlaguerre(n-l-1, 2*l+1), rho)
    return root * np.exp(-0.5*rho) * rho**l * L

def psi(n,l,m, r,theta,phi):
    """de.wikipedia.org/wiki/Wasserstoffatom#Mathematische_Details"""
    R_nl = R(n,l, r)
    Y_lm = sph_harm(m,l,phi,theta) 
    return R_nl * Y_lm

def plot(n,l,m, x,z, r,theta,phi):
    print( n,l,m)
    plt.figure(figsize=(7,7))
    plt.title(r"$\Psi_{%i%i%i}$" % (n,l,m))
    s_nlm = np.abs(psi(n,l,m, r,theta,phi))
    plt.pcolormesh(x, z, s_nlm, cmap=plt.get_cmap("CMRmap"))
    plt.gca().set_aspect("equal") 
    plt.xlim(x.min(),x.max())
    plt.ylim(z.min(),z.max())
    plt.savefig("psi_%i%i%i.jpg" % (n,l,m), bbox_inches="tight") 
    
n_max = 4
for n in range(1,n_max+1):
    for l in range(n):
        plot_range = (4*n + 4*l) * a_0
        x_1d = np.linspace(-plot_range,plot_range,521)
        y = 0
        z_1d = np.linspace(-plot_range,plot_range,521)
        x,z = np.meshgrid(x_1d,z_1d)
        r     = np.sqrt(x**2 + y**2 + z**2)
        theta = np.arctan2(np.sqrt(x**2+y**2), z )
        phi   = np.arctan2(y, x)
        for m in range(0, l+1):
            plot(n,l,m, x,z, r,theta,phi)

plt.show()