Mathematik für Biologiestudierende¶
Wintersemester 2023/24
- Oktober 2023
© 2023 Prof. Dr. Rüdiger W. Braun
Exponentialfunktion und Logarithmus¶
$$ \exp(\ln(y)) = y \quad\text{und}\quad \ln(\exp(x)) = x $$
$$ a^x = \exp(x \cdot \ln(a)) $$
Wachstums- und Abklingprozesse¶
- Bei einem exponentiellen Wachstumsprozess sind die prozentualen ZuwƤchse pro (Zeit-)Einheit konstant.
- Bei einem exponentiellen Abklingprozess sind die prozentualen Verluste pro (Zeit-)Einheit konstant.
- Beispiel: Eine Bakterienkonzentration nehme pro Stunde um 15% ab. Man startet mit 10000 Bakterien pro $mm^2$:
Zeit [h] | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
Konzentration [$mm^{-2}$] | 10000 | 8500 | 7225 | 6141 | 5220 | 4437 | 3771 | 3206 |
- Abklingprozesse besitzen eine Halbwertszeit. Das ist derjenige Zeitraum, in dem sich die verbleibende Menge jeweils halbiert
- Wachstumsprozesse besitzen eine Verdoppelungszeit. Das ist derjenige Zeitraum, in dem sich die Menge jeweils verdoppelt
- Zur Bestimmung der Halbwerts- und Verdoppelungszeiten benƶtigt man den Logarithmus
Beispiel zur Halbwertszeit¶
- Abklingprozess $$ k(x) = 10000 \cdot e^{-A \cdot x} $$
- $ k(0) = 10000 $
- nach einer Stunde um 15% geschrumpft: $ k(1) = 8500 $
- Andererseits $ k(1) = 10000 e^{-A} $, also $$ 8500 = 10000 e^{-A} $$
- Dividiere durch 10000 $$ 0.85 = e^{-A} $$
- Logarithmiere (beachte $ \ln(e^y) = y $) $$ \ln(0.85) = -A $$
Bakterienkonzentration, Fortsetzung¶
- $ \ln(0.85) = -A $
- Also $ A = -\ln(0.85) = 0.1625 $
- Die Konzentration folgt also der Formel $ k(x) = 10000 e^{-0.1625\cdot x} $
- Die Halbwertszeit ist derjenige Wert $ x_{\text{hw}} $ mit $ k(x_{hw}) = 5000 $
- Lƶse die Gleichung $$ e^{-0.1625\cdot x_{\text{hw}}} = 0.5 $$
- Das geschieht wieder durch Logarithmieren $$ -0.1625 \cdot x_{\text{hw}} = \ln(0.5) = -0.6931 $$
- Also $$ x_{\text{hw}} = \frac{-0.6931}{-0.1625} = 4.266 $$
- Alle $ 4.266 $ Stunden halbiert sich die Konzentration.
Verdopplungszeit¶
- Beispiel: Eine Seerose verfünffacht ihre Fläche in einer Woche. Was ist ihre Verdopplungszeit?
- Wachstumsprozess ($x$ in Tagen) $$ k(x) = e^{A \cdot x} $$
- Wir haben den Anfangswert auf 1 normiert, weil es auf die absolute GrƶĆe nicht ankommt
- Bestimme zuerst $A$ $$ k(7) = 5 = e^{A\cdot7} $$
- Logarithmiere $$ \ln(5) = A \cdot 7 $$
- Also $ A = \frac{\ln(5)}7 = 0.2299 $
- Die FlƤche folgt also der Formel $$ k(x) = e^{0.2299\cdot x} $$
Seerose, Fortsetzung¶
- FlƤche $ k(x) = e^{0.2299\cdot x} $
- Die Verdopplungszeit ist derjenige Wert $ x_{\text{d}} $ mit $ k(x_{d}) = 2 $
- Lƶse die Gleichung $$ e^{0.2299\cdot x_{\text{d}}} = 2 $$
- Das geschieht wieder durch Logarithmieren $$ 0.2299 \cdot x_{\text{d}} = \ln(2) = 0.6931 $$
- Also $$ x_{\text{d}} = \frac{0.6931}{0.2299} = 3.015 $$
- Alle $ 3 $ Tage verdoppelt sich die FlƤche
Halbwertstiefe von blauem Licht¶
- In 140m Tiefe nimmt die IntensitƤt von blauem Licht auf 1% ab.
- Bestimme $A$ für die Intensitätsfunktion $ k(x) = e^{-A\cdot x} $
- Gleichung $$ e^{-A\cdot 140} = 0.01 $$
- Logarithmieren $$ -A \cdot 140 = \ln(0.01) = -4.605 $$
- Also $$ A = \frac{4.605}{140} = 0.03289 $$
blaues Licht, Fortsetzung¶
- Die Intensitätsfunktion für blaues Licht ist $ e^{-0.03289\cdot x} $, wenn $ x $ die Wassertiefe bezeichnet.
- Gleichung für die Halbwertstiefe $ x_{\text{hw}} $ $$ e^{-0.03289\cdot x_{\text{hw}}} = 0.5 $$
- Also $$ x_{\text{hw}} = - \frac{\ln(0.5)}{0.03289} = 21.07 $$
- Die Halbwertstiefe für blaues Licht beträgt $21m$.
- Taucht man $21m$ tiefer, halbiert sich die IntensitƤt des blauen Lichts
Erklärung des Blaustichs¶
- Die Halbwertstiefe von rotem Licht beträgt $2m$, die von grünem Licht ungefähr $6m$
- In $24m$ Tiefe hat sich die IntensitƤt des roten Lichts schon 12mal halbiert, die IntensitƤt ist also nur ein 4000-tel der IntensitƤt an der OberflƤche.
- Dagegen betrƤgt die IntensitƤt des blauen Lichts in $24m$ Tiefe ungefƤhr 50%
Wasserfarbe in Abhängigkeit von der Tiefe in Metern¶
%run wasser.py
Statistik mit Python¶
Installationshinweise auf https://www.math.uni-duesseldorf.de/~internet/bio2324/software.html
123456 * 987654
121931812224
88/12
7.333333333333333
- Addition
+
- Subtraktion
-
- Multiplikation
*
- Division
/
- Potenz
**
2**10
1024
import numpy as np
- Es gibt mindestens fünf Implementierungen von $exp$ in Python
- Daher müssen die benötigten Bibiotheken explizit geladen werden
np.exp(2)
7.38905609893065
Der Logarithmus wird aufgerufen als
np.log(7.389)
1.9999924078065106
Im Notebook
- grüner Randbalken: Editiermodus
- blauer Randbalken: Kommandomodus
nur im Editiermodus ist der Zelleninhalt verƤnderlich
Im Kommandomodus kann die Art der Zelle geƤndert werden
- Markdown: Text
- Code: Programmcode
jeweils Ausführung durch <Umschalt>
-<Eingabe>
oder "$\blacktriangleright$ Run" aus der Werkzeugleiste
Plots¶
Wir schauen uns die Daten aus dem Beispiel "Bakterien" an
zeit = np.arange(8)
zeit
array([0, 1, 2, 3, 4, 5, 6, 7])
konzentration = np.array([10000, 8500, 7225, 6141, 5220, 4437, 3771, 3206])
konzentration
array([10000, 8500, 7225, 6141, 5220, 4437, 3771, 3206])
np.array([ , , , ])
Liste von Zahlennp.arange(n)
Spezieller array von 0 bisn
-1 (fürn
konkrete Zahl einsetzen)
Python beginnt ZƤhlungen bei 0
import seaborn as sns
sns.scatterplot(x=zeit, y=konzentration)
<Axes: >
Wir wollen die Achsen beschriften
ax = sns.scatterplot(x=zeit, y=konzentration)
ax.set_xlabel("Zeit")
ax.set_ylabel("Konzentration")
Text(4.444444444444452, 0.5, 'Konzentration')
Die Grafik muss nun explizit aufgerufen werden
ax.figure
Es wird immer das Objekt aus der letzten Zeile einer Zelle dargestellt
Jetzt malen wir noch die Kurve $10000 \cdot e^{-0.1625\cdot x}$ dazu.
zeitstrahl = np.linspace(0, 7)
# 50 Zeitpunkte zwischen 0 und 7
zeitstrahl
array([0. , 0.14285714, 0.28571429, 0.42857143, 0.57142857, 0.71428571, 0.85714286, 1. , 1.14285714, 1.28571429, 1.42857143, 1.57142857, 1.71428571, 1.85714286, 2. , 2.14285714, 2.28571429, 2.42857143, 2.57142857, 2.71428571, 2.85714286, 3. , 3.14285714, 3.28571429, 3.42857143, 3.57142857, 3.71428571, 3.85714286, 4. , 4.14285714, 4.28571429, 4.42857143, 4.57142857, 4.71428571, 4.85714286, 5. , 5.14285714, 5.28571429, 5.42857143, 5.57142857, 5.71428571, 5.85714286, 6. , 6.14285714, 6.28571429, 6.42857143, 6.57142857, 6.71428571, 6.85714286, 7. ])
werte = 10000 * np.exp(-0.1625*zeitstrahl)
werte
array([10000. , 9770.53092819, 9546.32746188, 9327.2687717 , 9113.23680095, 8904.11620196, 8699.79427395, 8500.16090225, 8305.10849901, 8114.53194516, 7928.3285338 , 7746.39791484, 7568.6420409 , 7394.96511451, 7225.27353642, 7059.47585523, 6897.48271803, 6739.20682232, 6584.5628689 , 6433.46751592, 6285.83933399, 6141.59876224, 6000.6680655 , 5862.97129238, 5728.43423433, 5596.98438567, 5468.55090448, 5343.06457446, 5220.45776761, 5100.66440778, 4983.61993505, 4869.26127098, 4757.52678456, 4648.35625902, 4541.6908594 , 4437.47310081, 4335.64681745, 4236.15713236, 4138.95042784, 4043.97431655, 3951.17761327, 3860.51030732, 3771.92353563, 3685.36955637, 3600.80172323, 3518.17446031, 3437.44323753, 3358.56454662, 3281.49587771, 3206.19569639])
sns.lineplot(x=zeitstrahl, y=werte)
<Axes: >
Das malen wir jetzt in die andere Achse hinein
ax2 = sns.lineplot(x=zeitstrahl, y=werte, ax=ax)
ax2.figure
sns.scatterplot
einzelne Punktesns.lineplot
durchgezogene Linie
Es gibt eine Unzahl von statistischen Zeichenfunktionen. Die wichtigsten werde ich nach und nach vorstellen.
Jetzt auch noch eine Grafik zu den Absorbationstiefen¶
tiefe = np.linspace(0, 24)
blau = np.exp(-0.03289*tiefe)
blau
array([1. , 0.98401967, 0.96829472, 0.95282105, 0.93759466, 0.9226116 , 0.90786796, 0.89335994, 0.87908375, 0.86503571, 0.85121216, 0.83760951, 0.82422424, 0.81105287, 0.79809198, 0.78533821, 0.77278825, 0.76043884, 0.74828678, 0.73632891, 0.72456214, 0.7129834 , 0.70158969, 0.69037806, 0.67934559, 0.66848943, 0.65780675, 0.64729479, 0.6369508 , 0.62677212, 0.6167561 , 0.60690014, 0.59720168, 0.5876582 , 0.57826723, 0.56902633, 0.5599331 , 0.55098519, 0.54218027, 0.53351605, 0.52499029, 0.51660078, 0.50834533, 0.5002218 , 0.4922281 , 0.48436213, 0.47662187, 0.46900529, 0.46151044, 0.45413535])
gruen = np.exp(-.1151*tiefe)
rot = np.exp(-.3466*tiefe)
sns.lineplot(x=tiefe, y=blau, color='blue')
sns.lineplot(x=tiefe, y=gruen, color='green')
ax = sns.lineplot(x=tiefe, y=rot, color='red')
ax.set_xlabel('Tiefe [m]')
ax.set_ylabel('Anteil')
Text(0, 0.5, 'Anteil')
ax.grid(True)
ax.figure