Die grafische Darstellung von mathematischen Funktionen ist ein wichtiges Hilfsmittel für die Veranschaulichung mathematischer Zusamenhänge. Sowohl Python als auch Julia ermöglichen Funktionsplots für 2D- und 3D-Darstellungen.
Das Modul matplotlib verfügt über eine fast unübersichtliche Vielzahl von Möglichkeiten physikalische Zusammenhänge im 2D- oder 3D-Raum zu visualisieren. Neben den üblichen statischen Darstellungen von mathematischen Funktionen in x-y-Koordinaten sind auch Animationen und interaktive Anwendungen implementierbar.
Ein Figure-Objekt legt den gesamten Zeichenbereich fest, in dem ein Funktionsplot eingefügt werden soll.
Ein Axes-Objekt ist zuständig für die Gestaltung des Koordinatensystems: Beschriftung der x,y-Achsen, Einfügen von beliebigen Text und Formeln mit der Latex-Notation usw.. In einem Figure-Objekt können mehrere Axes-Objekte eingebettet werden.
Mit der Axes-Methode axis([x1,x2,y1,y2])
kann man den Wertebereich des Koordinatensystems festlegen.
Die Matplotlib-Methode plot(x,y, ...)
stellt mathematische Funktionen y = f(x) in einem 2D-Koordinatensystem dar.
Die Julia-Funktion plot(x,y, ...)
stellt mathematische Funktionen y = f(x) in einem 2D-Koordinatensystem dar. Dazu muss das Paket Plot
mit
using Pkg; Pkg.add("Plots")
installiert werden.
Das erste Beispiel zeigt, wie ein typischer Funktionsplot für eine 50 Hz-Wechselspannung erstellt werden kann.
\[u=\widehat{u} \cdot sin\left( 2\pi \cdot f\cdot t\right) \]
Mit den Terminal-Befehlen
pip3 install numpy
und
pip3 install matplotlib
müssen die Python-Module installiert werden.
Ein Matplotlib-Programm besteht aus drei Teilen:
#plot_wechselspannung.py
import numpy as np
import matplotlib.pyplot as plt
#Funktionsdefinitionen
Ueff=[230,230] #Daten für Effektivwert
def u(t):
return 325*np.sin(2*np.pi*50*t/1e3)
#Grafikbereich
t=np.arange(0,20,0.001)
fig,ax=plt.subplots() #Objekte erzeugen
ax.plot(t,u(t),'b',lw=2,label="Momentanwert: u(t)")
ax.plot([0,20],Ueff,'r--',label="Effektivwert: 230V")
ax.plot(5,325,'ro',label="Spitzenwert:325V")
ax.set_title("50 Hz Wechselspannung")
ax.set_ylabel("$u(t)$ in V")
ax.set_xlabel("$t$ in ms")
ax.legend(loc='best')
ax.grid(color='g',ls='dashed',lw='0.5')
fig.savefig("wechselspannung.svg")
plt.show() #Plot anzeigen
Mit der Methode plot(x,y,...)
werden die x-y-Koordinaten der Funktion berechnet und intern im Arbeitsspeicher (RAM) abgespeichert.
Die Methode show()
bewirkt, dass der Funktionsplot auf dem Monitor angezeigt wird. Mit der Methode savefig(...)
kann der Plot in einem gewünschten Bildformat auf der Festplatte gespeichert werden.
Die Befehlszeile im Julia-Terminal wird als REPL (englisch read-evaluate-print-loop) bezeichnet. Geben Sie in die REPL folgende Befehle ein:
using Pkg
Pkg.add("Plots")
Pkg.add("LaTeXStrings")
Der Julia-Quelltext ist kompakter als der Python-Quelltext.
#plot_wechselspannung.jl
using Plots,LaTeXStrings
fn=50 #Netzfrequenz in Hz
Um=230. #Effektivwert der Wechselspannung in Volt
u(t) = sqrt(2)*Um*sin.(2*pi*fn*t*1e-3)
Urms(t) = Um
#Grafikbereich
t = 0:1e-2:20 #ms
plot(t,u,lw=2,label=L" \ \textnormal{Momentanwert} \ u\left( t \right)",
xlabel=L"t \ \textnormal{in \ ms}",
ylabel=L"u(t) \ \textnormal{in \ V}",
title="50 Hz Wechselspannung",lc=:blue)
plot!(t,Urms,lw=2,ls=:dash,label=L"\ \textnormal{Effektivwert} \ U_{eff}",lc=:red)
scatter!(5:5,325:325,ms=4,label=L"\ \textnormal{Spitzenwert \ 325 V}",color=:red)
#savefig("jl_wechselspannung.svg")
Die Funktion
\[p=f\left( T,V\right) =\frac{n\cdot R\cdot T}{V} \]
soll in eine 3D-Koordinatensystem dargestellt werden.
Mit der Anweisung fig.add_subplot(projection='3d')
können 3D-Funktionsplots erstellt werden.
#3d_funktionsplot.py
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
#p=n*R*T/V
def p(V,T):
T=T+273.15 #Umwandlung in K
n=1 #mol ideales Gas
R=8.314 #Gaskonstante J/(mol*K)
return 10*n*R*T/V
#Grafikbereich
fig = plt.figure(figsize=(6,6))
ax = fig.add_subplot(projection='3d') #1
V=np.linspace(10,50,100) #Volumen in dm^3, dann p in hPas
T=np.linspace(0,200,100)
V,T=np.meshgrid(V,T) #2
#x,y,z
ax.plot_wireframe(V, T, p(V,T), rstride=10, cstride=10) #3
#Standardbedingungen Liter, °C, mbar
ax.plot(22.41, 0, 1013,'ro') #roten Punkt zeichen
ax.set(xlabel='V in Liter',ylabel='T in °C',zlabel='p in mbar')
plt.show()
#1: Das ax-Objekt enthält alle Eigenschaften, um einen 3D-Funktionsplot zu zeichnen.
#2: Die NumPy-Funktion meshgrid(...)
erzeugt ein Gitternetz von 100×100=10000 Punkten für die x-y-Ebene.
#3: Die Matplotlib-Methode plot_wireframe(...)
zeichnet die Funktion p=f(T,V).
Die Julia-Funktion wireframe(x,y,z, ...)
stellt mathematische Funktionen in einem 3D-Koordinatensystem dar.
#3d_funktionsplot.jl
using Plots
#p=n*R*T/V
function druck(V,T)
T=T+273.15 #Umwandlung in K
n=1 #mol ideales Gas
R=8.314 #Gaskonstante J/(mol*K)
return 10*n*R*T/V
end
#Grafikbereich
V=10:2:50
T=0:20:200
wireframe(V,T,druck,xlabel="V in Liter",ylabel="T in °C",zlabel="p in mbar")
scatter!(22.41:22.41, 0:0, 1013:1013,ms=4,color=:red,label=false)
#savefig("jl_zustandsflaeche.svg")
Besuchen Sie die Seite von Matplotlib.
Besuchen Sie die Seite von Julia.
Startseite | Matrizen | Differenzieren | Integrieren | Differenzialgleichungen | Animationen | Literaturverzeichnis | Impressum