Symbolische Mathematik mit SymPy

Das Modul SymPy verfügt zwar über ähnliche Leistungsmerkmale wie Maple, Mathematica oder Maxima, jedoch erreicht es nicht deren vollen Funktionsumfang. Gegenüber diesen Computeralgebrasystemen (CAS) hat es aber den besonderen Vorteil, dass SymPy-Programme vergleichbar einfacher und flexibler erstellt werden können.

In der Tabelle sind häufig genutzte SymPy-Befehle aufgelistet.

Methode Beschreibung
apart(p) Zerlegt das Polynom p in seine Partialbrüche.
cancel(p) Erzeugt aus Partialbrüchen p eine ganzrationale Funktion.
diff(f,x,k) Berechnet die k-te Ableitung einer Funktion f.
dsolve(eq,f(x) Löst eine gewöhnliche Differenzialgleichung eq für die Funktion f(x).
epand(T) Berechnet den Term T.
integrate(f,x) Berechnet die Stammfunktion F(x) der Funktion f(x).
limit(y,x,0) Berechnet den Grenzwert einer Funktion.
simplify(term) Vereinfacht einen Term.

Differenzieren und Integrieren

Mit dem Befehl diff(y,x) kann die Ableitung einer Funktion ermittelt werden. Das Integral einer Funktion wird mit dem Befehl integrate(y,x) symbolisch berechnet. Die Befehle können direkt in die Phyton Shell eingegeben werden.

>>> from sympy import *
>>> x=symbols('x')
>>> y=x**3-2*x**2+10
>>> diff(y,x)
3*x**2 - 4*x
>>> diff(y,x,2)
2*(3*x - 2)
>>> integrate(y,x)
x**4/4 - 2*x**3/3 + 10*x

Laplace-Transformation

Die inverse Laplace-Transformation wird mit der Methode
inverse_laplace_transform(U2_s,s,t)
ermittelt. Die Übertragungsfunktion H(s) ist als algebraischer Ausdruck gegeben.

Das Beispiel zeigt, wie die inverse Laplace-Transformation die Sprungantwort eines R-L-C-Gliedes berechnet.

sprungantwort r-c-l-glied

Die Übertragungsfunktion kann aus der Schaltung entwickelt werden:

\[H\left( s\right) =\frac{U_{2}\left( s\right) }{U_{1}\left( s\right) } =\frac{\frac{1}{Cs} }{R+Ls+\frac{1}{Cs} } =\frac{1}{LCs^{2}+RCs+1} \]

Mit der Sprungfunktion aus dem Bildbereich erhält man die Ausgangsspannung für den Bildbereich:

\[U_{2}\left( s\right) =\frac{U_{1}}{s} \cdot \frac{1}{LCs^{2}+RCs+1} \]

Die Sprungantwort wird in Zeile #2 berechnet.

#Sprungantwort mit Laplace-Transformation
from sympy import *
#from sympy.integrals import inverse_laplace_transform
s,t,C,L,R = symbols("s t C L R",positive=True)
U1=10
R,L,C=2,1/2,1/4
#R,L,C=2,1,1
#R,L,C=1,4,8/9
U1_s=U1/s
Z_s=R+L*s+1/(C*s)
I_s=U1_s/Z_s
H_s=1/(R + L*s + 1/(C*s))/(C*s)         #1
#H_s=expand(H_s) #Übertragungsfunktion
U2_s=U1_s*H_s    #Sprungantwort
uc=inverse_laplace_transform(U2_s,s,t)  #2
ic=inverse_laplace_transform(I_s,s,t)   #3
#Ausgaben
print("Übertragungsfunktion")
print(H_s)
print("Spannung am Kondensator")
print("uc=",simplify(uc))
print("Kondensatorstrom")
print("ic=",ic)
plt=plot(uc,ic,(t, 0, 5),show=False)
plt[0].line_color = 'b'
plt[1].line_color = 'r'
plt.show()

Ausgabe

Übertragungsfunktion
4.0/(s*(0.5*s + 2 + 4.0/s))
Spannung am Kondensator
uc= 10.0 - 10.0*sqrt(2)*exp(-2.0*t)*sin(2.0*t + pi/4)
Kondensatorstrom
ic= 10.0*exp(-2.0*t)*sin(2.0*t)
spannungs- und stromverlauf r-c-l-glied

Analyse

In Zeile #1 steht die Übertragungsfunktion des R-L-C-Gliedes. In den Zeilen #2 und #3 berechnet die inverse Laplace-Transformation die Ausgangsspannung und den Kondensatorstrom des Zweitors (Übertragungssystem).

Besuchen Sie die Seite von SymPy.

Startseite NumPy Matplotlib SciPy VPython