hm2-cheat-sheet

Symbolisch Rechnen mit Python

Allgemeine Verwendung

Import

import sympy as sp

Symbols

x, y, z = sp.symbols('x y z')

Rechnen

def f(y, z):
    return sp.exp(y) - sp.sin(z) + y ** 2

Variabeln substituieren:

print(f(y, z).subs(y, 4))

Auswerten

print(f(y, z).subs(y, 2).subs(z, 4).evalf())

Matrizen und Jacobi-Matrix

f1 = x ** 2 + ...
f2 = x ** 4 + ...

f = sp.Matrix([f1, f2])
X = sp.Matrix([x, y, z])
Df = f.jacobian(X)
print(Df) # ==> Jacobi-Matrix

Die Jacobi-Matrix hat gemäss Definition folgende Form:

\[Df(x)=\begin{bmatrix} \frac{df_1}{dx_1}\ \frac{df_1}{dx_2}\ \ldots\ \frac{df_1}{dx_n} \\ \frac{df_2}{dx_1}\ \frac{df_2}{dx_2}\ \ldots\ \frac{df_2}{dx_n} \\ \vdots \\ \frac{df_m}{dx_1}\ \frac{df_m}{dx_2}\ \ldots\ \frac{df_m}{dx_n} \end{bmatrix}\]

Danach können Variabeln substituiert werden:

Df0 = Df.subs([(x, 3), (y, 4), (z, 5)]).evalf()

Oft wird auch eine Funktion generiert:

import numpy as np

func = sp.lambdify([(x, y, z)], f, "numpy")
jac = sp.lambdify([(x, y, z)], Df, "numpy")

# Beispiel-Aufruf
print(jac(np.array([7, 8, 9])))