Differenzieren

Unter Differenzieren (oder Ableiten) versteht man die Berechnung der Steigung einer Tangente an der Stelle x einer Funktion y = f(x). Die Ableitung wird mit y' = f'(x) bezeichnet. Die Ableitung einer mathematischen Funktion ist selbst wieder eine Funktion. Will man die Steigung an der Stelle x0 berechnen, so muss man in die Ableitungsfunktion diesen Wert einsetzen: f'(x0). Man erhält so den Funktionswert der Ableitungsfunktion.

Symbolisches Differenzieren

Für die Berechnung der Ableitung gilt:

\[ \frac{dy}{dx} =\lim_{x\rightarrow \Delta x} \frac{f(x+\Delta x)-f(x)}{\Delta x} =f^{\prime}(x)\]

Lösung mit Python

Mit der SymPy-Methode diff() können mathematische Funktionen symbolisch differenziert werden.

Mit dem Terminalbefehl
pip3 install sympy
wird das Modul SymPy installiert.

Mit dem Sympy-Programm können Sie (fast) alle gültigen mathematischen Funktionen ableiten. Außerdem können Sie die Produkt- und die Quotientenregel testen.

#sym_differenzieren.py
from sympy import *
x,a = symbols('x,a') #1
y = sin(a*x)         #2
dy = diff(y,x,1)     #3
print("%s' = %s" %(y,dy))  

Ausgabe

sin(a*x)' = a*cos(a*x)    

Analyse

In #1 werden die symbolischen Variablen vereinbart. In #2 können Sie den Term einer gültigen mathematischen Funktion eintragen. In #3 wird die die erste Ableitung berechnet. Sie können auch höhere Ableitungen berechnen lassen, indem Sie als drittes Argument eine 2, 3 oder eine andere positive Ganzzahl eintragen. Testen Sie das Programm auch mit dy = y.diff(x,1).

Lösung mit Julia

Die Julia-Funktion expand_derivatives() berechnet die erste Ableitung einer mathematischen Funktion symbolisch. Damit Sie diese Funktion benutzen können müssen Sie die Pakete Calculus und Symbolics mit
using Pkg
Pkg.add("Calculus")
Pkg.add("Symbolics")
im Julia-Terminal installieren.

In #3 können Sie andere mathematischen Funktionen eintragen.

#sym_differenzieren.jl
using Calculus,Symbolics
@variables x a               #1
Df = Differential(x)         #2
y=sin(a*x)                   #3
dy=expand_derivatives(Df(y)) #4
println(y,"' = ",dy)

Ausgabe

sin(a*x)' = a*cos(a*x)

Analyse

In #1 werden die symbolischen Variablen vereinbart. In #2 wird das Differential dx festgelegt. In #3 steht die mathematische Funktion, die abgeleitet werden soll. In #4 berechnet die Julia-Funktion expand_derivatives(Df(y)) die erste Ableitung. Testen Sie das Programm mit anderen mathematischen Funktionen. Überprüfen Sie dabei auch die Produkt- und Quotientenregel.

Numerischisches Differenzieren

Einen ersten Zugang zur numerischen Differentiation verschafft uns die Analyse des zentralen Differenzenquotienten.

Ableitung

Aus dem Bild kann die Berechnungsvorschrift für den zentalen Differenzenquotienten abgelesen werden:

\[ \ f^{\prime}\left( x \right) \approx \frac{f(x+\Delta x)-f(x-\Delta x)}{2\Delta x} \]

Anhand eines Beispiels aus der Kinnematik soll gezeigt werden, wie mathematische Funktionen numerisch differenziert werden können. Gegeben ist die Weg-Zeit-Funktion s=f(t) einer Bewegung mit konstanter Beschleunigung a:

\[s=\frac{1}{2} a\cdot t^{2} \]

Es sollen der Geschwindigkeitsverlauf v=f(t) und die Beschleunigung a=f(t) berechnet und grafisch dargestellt werden.

Lösung mit Python

Die SciPy-Dokumentation empfiehlt für die numerische Differentation das Modul Numdifftools zu verwenden.

Als erstes müssen Sie das Python-Modul Numdifftools installieren:
pip3 install numdifftools

Die Ableitungen werden mit der Numdifftools-Methode Derivative() berechnet. In #1 können Sie den Wert für die Beschleunigung ändern.

#diff_weg_zeit_gesetz.py
import numpy as np
import matplotlib.pyplot as plt
from numdifftools import Derivative
a=10                                   #1
#Weg
def weg(t):
    return a*t**2/2
#Geschwindigkeit
def geschwindigkeit(t):
    df=Derivative(weg,n=1)             #2
    return df(t)
#Beschleunigung
def beschleunigung(t):
    df=Derivative(geschwindigkeit,n=1) #3
    return df(t)
#Grafikbereich
t = np.linspace(0,10,100) #Sekunden
fig,ax =plt.subplots(3,1)
#Weg
ax[0].plot(t, weg(t), 'b-', lw=1)
ax[0].set(ylabel='s')
#Geschwindigkeit
ax[1].plot(t, geschwindigkeit(t), 'g-', lw=1)
ax[1].set(ylabel='v')
#Beschleunigung
ax[2].plot(t, beschleunigung(t), 'r-', lw=1)
ax[2].set(xlabel='t in s',ylabel='a')
ax[2].set_ylim(0,12)
[ax[i].grid(True) for i in range(len(ax))]
fig.tight_layout()
plt.show()

Ausgabe

Ableitung

Analyse

Die Beschleunigung hat die Einheit m/s2 (#1). In #2 berechnet die Numdifftools-Methode Derivative(weg,n=1) die Ableitung der Wegfunktion. Der Parameter n=1 muss nicht angeben werden, wenn die erste Ableitung berechnet werden soll. In #3 wird die Ableitung der Geschwindigkeitspunktion berechnet.

Lösung mit Julia

Julia berechnet die erste Ableitung mit der Funktion derivative(). Um diese Funktion nutzen zu können müssen Sie das Paket ForwardDiff mit
using Pkg;Pkg.add("ForwardDiff")
installieren.

In #1 können Sie den Wert für die Beschleunigung ändern.

#diff_weg_zeit_gesetz.jl
using Plots, ForwardDiff
#die Beschleunigung ist konstant
a=10                                                 #1
#Wegfunktion s=f(t)
function weg(t)
    return 1/2*a*t^2
end
#Geschwindigkeitsfunktion v=f(t)
function geschwindigkeit(t)
    return ForwardDiff.derivative(weg,t)             #2
end
#Beschleunigungsfunktion a=f(t)
function beschleunigung(t)
    return ForwardDiff.derivative(geschwindigkeit,t) #3
end
#Grafikbereich
t=0:1e-2:10
p1=plot(t,weg,ylabel="s")
p2=plot(t,geschwindigkeit,ylabel="v")
p3=plot(t,beschleunigung,ylim=(0,1.1*a),xlabel="t in s",ylabel="a")
plot(p1,p2,p3,layout=(3,1),legend=false,lc=["blue" "green" "red"])

Ausgabe

Ableitung

Analyse

Die Beschleunigung hat die Einheit m/s2 (#1). In #2 berechnet die Julia-Funktion derivative(weg,t) die Ableitung der Wegfunktion. In #3 wird die Ableitung der Geschwindigkeitspunktion berechnet.

Besuchen Sie die Seite von SciPy.
Besuchen Sie die Seite von Julia.


Startseite | Funktionsplots | Matrizen | Integrieren | Differenzialgleichungen | Animationen