Kugelflächenfunktionen werden in der Physik z.B. für Atommodelle benutzt. Hier soll es aber nicht um die Theorie, sondern um die Visualisierung gehen,
z.B. auf Wikipedia: http://en.wikipedia.org/wiki/Spherical_ ... monics.png
Und hier meine Visualisierung mit Hilfe von Numpy, Scipy und Matplotlib:
Den Python-Code und noch ein paar Abbildungen gibt's auf
http://www.magben.de/?h1=mathematik_fue ... funktionen
Kugelflächenfunktionen in 3D visualisieren
Die Kugelflächenfunktionen
sind ein wesentlicher Bestandteil der Atomorbitale vom Wasserstoffatom:
.
Hier (http://www.magben.de/?h1=mathematik_fue ... orbital_2d) gibt's nun 2D Visualisierungen dazu. An der 3D Visualisierung arbeite ich noch.
sind ein wesentlicher Bestandteil der Atomorbitale vom Wasserstoffatom:
.
Hier (http://www.magben.de/?h1=mathematik_fue ... orbital_2d) gibt's nun 2D Visualisierungen dazu. An der 3D Visualisierung arbeite ich noch.
Mit Mayavi
http://docs.enthought.com/mayavi/mayavi/mlab.html#id5
http://docs.enthought.com/mayavi/mayavi/mlab.html#id5
Code: Alles auswählen
import numpy as np
from scipy.special import sph_harm
from mayavi import mlab
theta_1d = np.linspace(0, np.pi, 91) # 2 GRAD Schritte
phi_1d = np.linspace(0, 2*np.pi, 181) # 2 GRAD Schritte
theta_2d, phi_2d = np.meshgrid(theta_1d, phi_1d)
xyz_2d = np.array([np.sin(theta_2d) * np.sin(phi_2d),
np.sin(theta_2d) * np.cos(phi_2d),
np.cos(theta_2d)])
# Animierte Ansicht von Y_lm
def show_Y_lm(l, m, camera):
Y_lm = sph_harm(m,l, phi_2d, theta_2d)
r = np.abs(Y_lm.real)*xyz_2d
for i in range(camera.shape[0]):
azimuth,elevation,distance,roll = camera[i]
mlab.figure(size=(500,500))
s = mlab.mesh(r[0], r[1], r[2], scalars=Y_lm.real, colormap="cool")
mlab.view(azimuth=azimuth, elevation=elevation, distance=distance, roll=roll)
mlab.savefig("plot/Y_%i_%i_%02i.png" % (l,m, i))
# kamerafuehrung
nf = 40
camera = np.zeros((nf,4))
camera[:,0] = np.linspace( 70, 55,nf) # azimuth
camera[:,1] = np.linspace( 50,130,nf) # elevation
camera[:,2] = np.linspace( 3,1.2,nf) # distance
camera[:,3] = np.linspace(-50,-50,nf) # roll
show_Y_lm(l=3,m=0, camera=camera)
mlab.show()
#convert -delay 10 -duplicate 1,-2-1 -loop -0 plot/*.png Y_3_0.gif
Update
Code: Alles auswählen
import numpy as np
from scipy.special import sph_harm
from mayavi import mlab
theta_1d = np.linspace(0, np.pi, 91) # 2 GRAD Schritte
phi_1d = np.linspace(0, 2*np.pi, 181) # 2 GRAD Schritte
theta_2d, phi_2d = np.meshgrid(theta_1d, phi_1d)
xyz_2d = np.array([np.sin(theta_2d) * np.sin(phi_2d),
np.sin(theta_2d) * np.cos(phi_2d),
np.cos(theta_2d)])
# Animierte Ansicht von Y_lm
def show_Y_lm(l, m, camera):
Y_lm = sph_harm(m,l, phi_2d, theta_2d)
r = np.abs(Y_lm.real)*xyz_2d
mlab.figure(size=(500,500))
s = mlab.mesh(r[0], r[1], r[2], scalars=Y_lm.real, colormap="cool")
for i in range(camera.shape[0]):
azimuth,elevation,distance,roll = camera[i]
mlab.view(azimuth=azimuth, elevation=elevation, distance=distance, roll=roll)
mlab.savefig("plot/Y_%i_%i_%02i.png" % (l,m, i))
# kamerafuehrung
nf = 40
camera = np.zeros((nf,4))
camera[:,0] = np.linspace( 70, 55,nf) # azimuth
camera[:,1] = np.linspace( 50,130,nf) # elevation
camera[:,2] = np.linspace( 3,1.2,nf) # distance
camera[:,3] = np.linspace(-50,-50,nf) # roll
show_Y_lm(l=3,m=0, camera=camera)
mlab.show()
#convert -delay 10 -duplicate 1,-2-1 -loop -0 plot/*.png Y_3_0.gif
@MagBen: über den Index zu iterieren ist ein Antipattern, weil man auch direkt über die Elemente iterieren kann. Wenn man trotzdem einen Index braucht, nimmt man enumerate:
Code: Alles auswählen
def show_Y_lm(l, m, camera):
Y_lm = sph_harm(m, l, phi_2d, theta_2d)
r = abs(Y_lm.real) * xyz_2d
mlab.figure(size=(500, 500))
s = mlab.mesh(r[0], r[1], r[2], scalars=Y_lm.real, colormap="cool")
for i, (azimuth,elevation,distance,roll) in enumerate(camera):
mlab.view(azimuth=azimuth, elevation=elevation, distance=distance, roll=roll)
mlab.savefig("plot/Y_%i_%i_%02i.png" % (l, m, i))
enumerate kommt bei Nicht-Software-Entwicklern schlecht an.
Der Clou von dem Post war auch eher folgendes:
Der Clou von dem Post war auch eher folgendes:
- Ich kann bei Mayavi die gleichen Datenstrukturen benutzen wie bei Matplotlib.
- Ich brauche weniger Code für das Plotten.
- Die 3D-Plots sehen bei Mayavi mehr nach 3D aus als bei Matplotlib.
- Ich kann sogar die selbe Farbskala benutzen.
Foto vom Gesichtsausdruck oder war stellst du dir als Beleg vor?__deets__ hat geschrieben:Und für die Aussage das enumerate unbeliebt ist hast du sicher einen Beleg, oder?
Das DU enumerate nicht magst, das glaube ich sofort, und ohne Beleg. Aber Bei Aussagen über von Gruppen von Leuten reicht ein Datenpunkt nicht. Wenn du behauptest, nicht-Softwareentwickler (geschätzt 7 Milliarden Menschen) mögen etwas nicht, dann sollte man das schon belegen können. Oder nicht?