Mathematik für Biologiestudierende¶
Wintersemester 2024/25
- Oktober 2024
© 2024 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 etwas weniger als 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/bio2425/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.set_printoptions(legacy='1.25')
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
Dazu geben wir als erstes dem Bild den Namen ax
(von axis)
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, 100)
# 100 Zeitpunkte zwischen 0 und 7
zeitstrahl
array([0. , 0.07070707, 0.14141414, 0.21212121, 0.28282828, 0.35353535, 0.42424242, 0.49494949, 0.56565657, 0.63636364, 0.70707071, 0.77777778, 0.84848485, 0.91919192, 0.98989899, 1.06060606, 1.13131313, 1.2020202 , 1.27272727, 1.34343434, 1.41414141, 1.48484848, 1.55555556, 1.62626263, 1.6969697 , 1.76767677, 1.83838384, 1.90909091, 1.97979798, 2.05050505, 2.12121212, 2.19191919, 2.26262626, 2.33333333, 2.4040404 , 2.47474747, 2.54545455, 2.61616162, 2.68686869, 2.75757576, 2.82828283, 2.8989899 , 2.96969697, 3.04040404, 3.11111111, 3.18181818, 3.25252525, 3.32323232, 3.39393939, 3.46464646, 3.53535354, 3.60606061, 3.67676768, 3.74747475, 3.81818182, 3.88888889, 3.95959596, 4.03030303, 4.1010101 , 4.17171717, 4.24242424, 4.31313131, 4.38383838, 4.45454545, 4.52525253, 4.5959596 , 4.66666667, 4.73737374, 4.80808081, 4.87878788, 4.94949495, 5.02020202, 5.09090909, 5.16161616, 5.23232323, 5.3030303 , 5.37373737, 5.44444444, 5.51515152, 5.58585859, 5.65656566, 5.72727273, 5.7979798 , 5.86868687, 5.93939394, 6.01010101, 6.08080808, 6.15151515, 6.22222222, 6.29292929, 6.36363636, 6.43434343, 6.50505051, 6.57575758, 6.64646465, 6.71717172, 6.78787879, 6.85858586, 6.92929293, 7. ])
werte = 10000 * np.exp(-0.1625*zeitstrahl)
werte
array([10000. , 9885.75857812, 9772.82226649, 9661.17615534, 9550.80550524, 9441.69574514, 9333.83247046, 9227.20144116, 9121.7885799 , 9017.57997015, 8914.56185439, 8812.72063222, 8712.04285866, 8612.51524229, 8514.12464357, 8416.85807304, 8320.70268964, 8225.64579901, 8131.67485181, 8038.77744208, 7946.94130557, 7856.15431813, 7766.40449415, 7677.67998492, 7589.9690771 , 7503.26019117, 7417.54187987, 7332.80282675, 7249.03184462, 7166.21787411, 7084.34998216, 7003.41736066, 6923.40932493, 6844.31531238, 6766.12488107, 6688.82770837, 6612.41358956, 6536.87243651, 6462.19427633, 6388.36925007, 6315.38761141, 6243.23972537, 6171.91606703, 6101.40722031, 6031.70387668, 5962.79683396, 5894.67699509, 5827.33536695, 5760.76305914, 5694.95128284, 5629.89134963, 5565.57467035, 5501.99275396, 5439.13720643, 5376.9997296 , 5315.57212015, 5254.84626844, 5194.81415749, 5135.46786192, 5076.79954686, 5018.80146698, 4961.46596541, 4904.78547276, 4848.75250612, 4793.35966805, 4738.59964565, 4684.46520953, 4630.9492129 , 4578.04459063, 4525.74435828, 4474.04161123, 4422.92952371, 4372.40134794, 4322.45041324, 4273.07012512, 4224.25396443, 4175.9954865 , 4128.28832029, 4081.12616753, 4034.5028019 , 3988.41206824, 3942.84788167, 3897.80422684, 3853.27515713, 3809.25479385, 3765.73732546, 3722.71700681, 3680.1881584 , 3638.1451656 , 3596.58247793, 3555.49460831, 3514.87613235, 3474.72168765, 3435.02597302, 3395.78374789, 3356.98983151, 3318.63910236, 3280.72649738, 3243.2470114 , 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.
Der folgende Aufruf wählt die Standard-Darstellung. Für uns ist das Gitter wichtig.
sns.set_theme()
Jetzt auch noch eine Grafik zu den Absorbationstiefen¶
tiefe = np.linspace(0, 24, 100)
blau = np.exp(-0.03289*tiefe)
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')