Es ist geschafft! Den C-kurs (sowie noch ein paar andere Klausuren) endlich bestanden, kann ich mich jetzt den spaßigen Dingen im Studium widmen. Das heißt viel Freizeit, viel mit Freunden machen und viele lange aufgeschobene Projekte angehen. Was das Programmieren angeht, so macht es mir deutlich mehr Spaß mit python zu arbeiten. Zwar kann ich sagen, dass ich C mittlerweile gut durchstiegen habe, aber die Arbeit mit python macht einfach mehr Spaß und ist auch einfacher.

Natürlich muss ich in diesem Semester auch Lehrveranstaltungen besuchen. Dabei höre ich neben Quantenmechanik und Spanisch auch numerische Strömungsmechanik. Hier schauen wir uns vorerst einfache strömungsmechanische Probleme an und versuchen sie mit Hilfe eines Programmes zu lösen. Da hier und überall in der Physik viele Differentialgleichungen zum Tragen kommen, müssen wir oftmals Algorithmen implementieren, die solche Gleichungen lösen. Namentlich sind diese: Euler-Methode und Runge-Kutta-Verfahren. Es gibt noch viele mehr, aber bis jetzt haben wir nur diese implementiert. Nun schauen wir uns mal ein konkretes Beispiel an. Die Aufgabe war es das Lorenz-System zu lösen:

\(\frac{\mathrm{d}x}{\mathrm{d}t} = \sigma (y-x)\)

\(\frac{\mathrm{d}y}{\mathrm{d}t} = x(\rho -z)-y\)

\(\frac{\mathrm{d}z}{\mathrm {d}t} = xy-\beta z\)

wobei \(\sigma = 10\), \(\rho = 28\) und \(\beta = \frac{8}{3}.\)

In diesem Beispiel habe ich die Euler-Methode verwendet und diese Methode in meinen Python-Code wie folgt implementiert:


import numpy as np
import matplotlib.pyplot as plt
x_vec = []
y_vec = []
z_vec = []
h = 0.01
dt = 0.01
t = 0
x = 1
y = 1
z = 1


def f(x,y,z,t):
    return 10*(y-x)

def g(x,y,z,t):
    return (-x*z+28*x-y)

def h1(x,y,z,t):
    return (x*y-8/3*z)

for k in range(0,10000):
	x_alt = x
	y_alt = y
	z_alt = z

	x_vec = np.append(x_vec, x_alt)
	x = x_alt + h*f(x_alt,y_alt,z_alt,t)

	y_vec = np.append(y_vec, y_alt)
	y = y_alt + h*g(x_alt,y_alt,z_alt,t)

	z_vec = np.append(z_vec, z_alt)
	z = z_alt + h*h1(x_alt,y_alt,z_alt,t)

	t = k*dt
			    

Es sollte dann noch der Attractor geplottet werden. Dies geschah mit der in Python integrierten Bibliothek matplotlib.pyplot. Das Ergebnis sah so aus:

Der Code für den Plot sieht wie folgt aus:

		
from matplotlib import pyplot as plt
from matplotlib import animation
from mpl_toolkits.mplot3d import Axes3D

plt.style.use('dark_background')
# Create a figure and a 3D Axes
fig = plt.figure()
ax = Axes3D(fig)
plt.axis('off')


def init():
    ax.plot(x_vec, y_vec, z_vec, linewidth = 0.23, color = 'orange')
    return fig,

def animate(i):
    ax.view_init(elev=10., azim=i)
    return fig,

anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=360, interval=20, blit=True)

anim.save('basic_animation_2.mp4', fps=30, extra_args=['-vcodec', 'libx264'], dpi = 400)