Mathematik für Biologiestudierende¶
Wintersemester 2023/24
10.01.2024
© 2024 Prof. Dr. Rüdiger W. Braun
Differentialrechnung¶
Abbildung für das Beispiel¶
import numpy as np
import pandas as pd
import seaborn as sns
sns.set_theme()
df = pd.DataFrame()
x = np.linspace(0, 10, 1000)
df['x'] = x
df['y'] = x**2 * np.exp(-x)
df['ys'] = (2*x - x**2) * np.exp(-x)
ax = sns.lineplot(data=df, x='x', y='y')
ax = sns.lineplot(data=df, x='x', y='ys')
Qualitatives Verhalten¶
- wenn $f'(x)>0$, dann wächst die Funktion
- wenn $f'(x)<0$, dann fällt sie
Das bedeutet: Für einen Hoch- oder Tiefpunkt $x_0$ von $f$ gilt $f'(x_0)=0$.
Höhere Ableitungen¶
- Die Ableitung der Ableitung nennt man zweite Ableitung und schreibt $f''(x)$ dafür
- Zweite Ableitungen treten in der Physik (als Beschleunigung) und überhaupt bei dynamischen Systemen auf
- "Die Infaltion hat sich abgeschwächt" bedeutet: "Die zweite Ableitung der Konsumentenpreise ist negativ"
Beispiel¶
$$ f(x) = x^2 \cdot \exp(-x) $$
$$ f'(x) = \left( 2x - x^2 \right) \cdot \exp(-x) $$
\begin{align*} f''(x) &= \left( 2 - 2x \right) \cdot \exp(-x) + \left( 2x - x^2 \right) (-x) \exp(-x) && \text{Produktregel} \\ &= \left( 2 - 4x + x^2 \right) \cdot \exp(-x) \end{align*}
- Wir wollen $f$, $f'$ und $f''$ in ein Bild zeichnen, und zwar mit
seaborn
- Im Gegensatz zu
df
von oben benötigen wir dazu ein DataFrame inLangform - Das bedeutet, dass die Werte $f(x)$, $f'(x)$ und $f''(x)$ alle in derselben Spalte stehen und durch einen kategoriellen Wert in einer weiteren Spalte unterschieden werden
- Einige der statistische Auswertefunktionen erwarten die Daten in Langform
d0 = pd.DataFrame()
d0['x'] = x
d0['y'] = x**2 * np.exp(-x)
d0['Ableitung'] = "nullte"
d1 = pd.DataFrame()
d1['x'] = x
d1['y'] = (2*x - x**2) * np.exp(-x)
d1['Ableitung'] = "erste"
df = pd.concat([d0, d1])
d2 = pd.DataFrame()
d2['x'] = x
d2['y'] = (2-4*x+x**2) * np.exp(-x)
d2['Ableitung'] = "zweite"
df = pd.concat([d0, d1, d2], ignore_index=True)
df[990:1010]
x | y | Ableitung | |
---|---|---|---|
990 | 9.90991 | 0.004879 | nullte |
991 | 9.91992 | 0.004840 | nullte |
992 | 9.92993 | 0.004802 | nullte |
993 | 9.93994 | 0.004763 | nullte |
994 | 9.94995 | 0.004725 | nullte |
995 | 9.95996 | 0.004688 | nullte |
996 | 9.96997 | 0.004650 | nullte |
997 | 9.97998 | 0.004613 | nullte |
998 | 9.98999 | 0.004576 | nullte |
999 | 10.00000 | 0.004540 | nullte |
1000 | 0.00000 | 0.000000 | erste |
1001 | 0.01001 | 0.019721 | erste |
1002 | 0.02002 | 0.038854 | erste |
1003 | 0.03003 | 0.057408 | erste |
1004 | 0.04004 | 0.075397 | erste |
1005 | 0.05005 | 0.092831 | erste |
1006 | 0.06006 | 0.109721 | erste |
1007 | 0.07007 | 0.126079 | erste |
1008 | 0.08008 | 0.141915 | erste |
1009 | 0.09009 | 0.157240 | erste |
import warnings
warnings.filterwarnings('ignore', message='The figure layout has changed')
sns.relplot(data=df, x='x', y='y', hue='Ableitung', kind='line');
sns.relplot(data=df, x='x', y='y', col='Ableitung', kind='line');
sns.lineplot
: Eine einzelne Kurvesns.relplot(…, kind='line')
: mehrere Kurven- je nachdem, ob
hue
odercol
zur Unterscheidung benutzt wird, erhält man einen oder mehrere Graphen
- je nachdem, ob
sns.scatterplot
: Eine einzelne Punktwolkesns.relplot(…, kind='scatter')
: mehrere Punktwolken
Beispiel: Konzentrationen in einer Zelle¶
- Die Konzentration eines bestimmten Proteins in einer Zelle zum Anfangszeitpunkt $t=0$ beträgt $0\mu g/m\ell$
- Zuerst steigt sie schnell mit $0.8\frac{\mu g}{m\ell\cdot s}$
- Nach 2 Sekunden steigt die Konzentration nicht mehr, das Protein wird von da an exponentiell abgebaut
Modell¶
$$ f(t) = A \cdot t \cdot \exp(-b\cdot t) $$
\begin{align*} f'(t) &= A \cdot \exp(-b \cdot t) + A \cdot t \cdot(-b) \cdot \exp(-b \cdot t) \\ &= (A - Abt) \cdot \exp(-b \cdot t) \end{align*}
Wir haben zwei Gleichungen
- f'(0) = 0.8
- f'(2) = 0
Einsetzen
- $f'(0) = A$, also $A=0.8$
$f'(2) = 0$, also $ (A - 2Ab) \cdot \exp(-2b) = 0 $
$\exp(-2b)$ ist nicht Null, also muss $ A -2b = 0$ gelten, d.h. $b=0.5$
Unser Modell ist also
$$ f(t) = 0.8t \cdot \exp(-0.5t) $$
t = np.linspace(0, 8)
y = 0.8*t * np.exp(-0.5*t)
ax = sns.lineplot(x=t, y=y)
- Maximum bei $t=2$, das ist eine der Ausgangsgleichungen
- Wert dort
0.8 * 2 * np.exp(-0.5*2)
0.5886071058743079
Integralrechnung¶
Flächeninhalt¶
- $f(x)$ eine Funktion, die keine negativen Werte annimmt
- $a$ und $b$ Intervallgrenzen
- den Inhalt der Fläche unter $f(x)$ zwischen $a$ und $b$ bezeichnet man mit $$ \int_a^b f(x) dx $$
- $ \int_a^b f(x) dx $ ist das Integral von $f(x)$ in den Grenzen von $a$ bis $b$
Skizze¶
- Funktion $f(x)$ darf nun auch negative Werte annehmen
- Dann ist $$ \int_a^b f(x) dx $$ die Differenz zwischen dem Flächeninhalt oberhalb und dem Flächeninhalt unterhalb der $x$-Achse
- $\int_a^b f(x) dx$ ist also negativ, wenn die Fläche unterhalb der $x$-Achse größer ist als die Fläche oberhalb ist
- Das Zeichen $\int_a^b$ ist das "bestimmte Integral"
Stammfunktion¶
Falls $$ F'(x) = f(x) $$
- dann ist $f$ die Ableitung von $F$
- und $F$ ist eine Stammfunktion von $f$
- Man schreibt $$ \int f(x) dx = F(x) $$
- Das Zeichen $ \int $ ist das "unbestimmte Integral"
- Stammfunktionen sind nicht eindeutig
- Wenn $F(x)$ eine Stammfunktion von $f(x)$ ist, dann ist auch $F(x) + C$ eine Stammfunktion von $f(x)$, wenn $C$ eine Konstante ist
- Das liegt daran, dass $C' = 0$
Beispiel¶
- $\frac{x^2}2$ ist eine Stammfunktion von $x$, denn $(x^2)' = 2x$
- Wir schreiben $$ \int x\, dx = \frac{x^2}2 $$
- In Lehrbüchern findet man auch die Schreibweise $$ \int x\, dx = \frac{x^2}2 + C $$ um anzudeuten, dass die Stammfunktion nicht eindeutig ist
Hauptsatz der Differential- und Integralrechnung¶
Wenn $F(x)$ eine Stammfunktion von $f(x)$ ist, dann $$ \int_a^b f(x) dx = F(b) - F(a) $$
Man schreibt $$ \int_a^b f(x) = F(x) \Bigr|_a^b $$
Beispiel $$ \int_0^5 x\, dx = \frac12 x^2 \Bigr|_0^5 = \frac12 5^2 - \frac12 0^2 = \frac{25}2 = 12.5 $$
Skizze¶
Das Dreieck füllt das Quadrat mit der Seitenlänge 5 zur Hälfte aus. Sein Flächeninhalt ist also tatsächlich gleich 12.5
Eigenschaften des Integrals¶
- Wenn $a<b<c$, dann $$ \int_a^b f(x) dx + \int_b^c f(x) dx = \int_a^c f(x) dx $$
- Speziell $$ \int_a^a f(x) dx = 0 $$
Kontinuierliche Zufallsvariable¶
Eine Zufallsvariable $X$ heißt kontinuierlich mit Dichte $f$, wenn $$ P(a \le X < b) = \int_a^b f(x) dx $$
Man bezeichnet
- $f$ als Dichte und
- $F(x) = \int_{-\infty}^x f(x) dx$ als Verteilungsfunktion von $X$
- Wenn $f$ die Dichte und $F$ die Verteilungsfunktion ist, dann ist $F$ eine Stammfunktion der Dichte
- also $$ P(a\le X<b) = \int_a^b f(x) dx = F(b) - F(a) $$
Wegen $ \int_a^a f(x) dx = 0 $ gilt dann auch $$ P(a\le X \le b) = P(a<X<b) = P(a<X\le b) = F(b) - F(a) $$
Forderungen an die Dichte¶
Wenn $f$ die Dichte einer Zufallsvariablen sein kann, müssen Bedingungen erfüllt sein
$$ f(x) \ge 0 \text{ für alle $x$} $$ $$ \int_{-\infty}^\infty f(x) dx = 1 $$
Standard-Normalverteilung¶
- Die Dichte der Standardnormalverteilung ist die Gaußsche Glockenkurve $$ \varphi(x) = \frac1{\sqrt{2\pi}} \exp\!\left( -\frac{x^2}2 \right) $$
- Die Verteilungsfunktion ist $$ \Phi(u) = \frac1{\sqrt{2\pi}} \int_{-\infty}^u \exp\!\left( -\frac{x^2}2 \right) dx $$
- Eine explizitere Formel gibt es nicht
from scipy import stats
Phi = stats.norm() # Normalverteilung
d1 = pd.DataFrame()
x = np.linspace(-4, 4)
d1['x'] = x
d1['y'] = np.exp(-0.5*x**2) / np.sqrt(2*np.pi)
d1['Name'] = "Dichte"
d2 = pd.DataFrame()
d2['x'] = x
d2['y'] = Phi.cdf(x)
d2['Name'] = "Verteilungsfunktion"
df = pd.concat([d1, d2], ignore_index=True)
Standard-Normalverteilung¶
sns.relplot(data=df, x='x', y='y', hue='Name', kind='line');
Eigenschaften der Verteilungsfunktion der Standard-Normalverteilung¶
- $\Phi(x) > 0$ für alle $x$
- $\lim_{x\to-\infty} \Phi(x) = 0$
- $\lim_{x\to\infty} \Phi(x) = 1$
- $\Phi(-x)=1-\Phi(x)$ für alle $x$ (Symmetrie an $x=0$)
Beispiel¶
- Die mittlere Halmlänge eines bestimmten Grases beträgt 10cm
- Die Zufallsvariable $X$ misst den Unterschied eines einzelnen Grashalms zur mittleren Halmlänge
- Unser Modell sagt, dass $X$ standard-normalverteilt ist
- Das bedeutet: Die Halmlänge in cm wird modelliert als $10+X$
Welcher Anteil der Halme hat eine Länge zwischen 9cm und 11cm?
Antwort $$ P(-1\le X<1) = \int_{-1}^1 \varphi(x) dx = \Phi(1) - \Phi(-1) $$
Phi = stats.norm()
Phi.cdf(1) - Phi.cdf(-1)
0.6826894921370859
Welcher Anteil der Halme hat eine Länge von mindestens 10cm?
Antwort $$ P(0\le X) = \int_{0}^\infty \phi(x) dx = 1 - \Phi(0) $$
1 - Phi.cdf(0)
0.5
Welcher Anteil der Halme hat eine Länge von höchstens 8.2cm?
Antwort $$ P(X\le-1.8) = \int_{-\infty}^{-1.8} \phi(x) dx = \Phi(-1.8) $$
Hinweis: $10-8.2=-1.8$
Phi.cdf(-1.8)
0.03593031911292579