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. |
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
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.
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()
Ü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)
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).