def rk_explicit_w_energy(acc, x0, v0, tmax, h): N = len(x0) result = rk_explicit(rk_klassisch, f, concatenate((x0, v0)), tmax, h) tns = result[:,0] xns = result[:,1:N+1] vns = result[:,N+1:2*N+1] ens = [ tot_en(xn, vn) for xn, vn in zip(xns, vns) ] return tns, xns, ens
# Ausgabe ############################################# figure = pyplot.figure(figsize=(8,6)) figure.subplots_adjust(left=0.15, right=0.95, top=0.95, wspace=0.3) x = linspace(-L/2.0, L/2.0, N+2) # links: homogen, ein Teilchen ############################################# # Am Anfang ein Teilchen in der Mitte p0 = zeros(N) p0[N/2] = 1.0/h tnpns = rk_explicit(rk_klassisch, fhomogen, p0, tmax, dt) ts, ps, mass = unpack(tnpns) # oben: Verlauf ############################################# graph = figure.add_subplot(221) for step, style in ((int(5.0/dt), "r-"), (int(20.0/dt), "g--"), (int(tmax/dt), "b:")): graph.plot(x, [0] + list(ps[step]) + [0], style, linewidth=2, label=("t=%0.1f" % ts[step])) graph.axis((-L/2.0,L/2.0,0,0.2)) graph.xaxis.set_label_text("$x$") graph.yaxis.set_label_text("$p(x,t)$") # unten, Masse
from rk import rk_explicit, euler, rk_klassisch y0 = array((100,1)) # Ausgabe ############################################# figure = pyplot.figure(figsize=(8,4)) figure.subplots_adjust(left=0.15, right=0.95,wspace=0.3) # links oben, Expliziter Euler ############################################# graph = figure.add_subplot(221) tnyns_ee = rk_explicit(euler, f, y0, 50, 1./365) t, beute, raeuber = zip(*tnyns_ee) graph.plot(t, beute, "b:", linewidth=2) graph.plot(t, raeuber, "r--", linewidth=2) graph.axis((0,10,0,300)) graph.yaxis.set_label_text("Populationen") # links unten, RK ############################################# graph = figure.add_subplot(223) tnyns_rk = rk_explicit(rk_klassisch, f, y0, 50, 1./365) t, beute, raeuber = zip(*tnyns_rk)