Mathematik für Biologiestudierende¶

Wintersemester 2024/25

  1. 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

Absorption¶

Koralle in blaustichigem Wasser

Photo Credit: Jerry Reid, U.S. Fish and Wildlife Service

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¶

In [1]:
%run wasser.py
No description has been provided for this image

Statistik mit Python¶

Installationshinweise auf https://www.math.uni-duesseldorf.de/~internet/bio2425/software.html

In [2]:
123456 * 987654
Out[2]:
121931812224
In [3]:
88/12
Out[3]:
7.333333333333333
  • Addition +
  • Subtraktion -
  • Multiplikation *
  • Division /
  • Potenz **
In [4]:
2**10
Out[4]:
1024
In [5]:
import numpy as np
  • Es gibt mindestens fünf Implementierungen von $\exp$ in Python
  • Daher müssen die benötigten Bibiotheken explizit geladen werden
In [6]:
np.set_printoptions(legacy='1.25')
In [7]:
np.exp(2)
Out[7]:
7.38905609893065

Der Logarithmus wird aufgerufen als

In [8]:
np.log(7.389)
Out[8]:
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

In [9]:
zeit = np.arange(8)
In [10]:
zeit
Out[10]:
array([0, 1, 2, 3, 4, 5, 6, 7])
In [11]:
konzentration = np.array([10000, 8500,  7225, 6141, 5220, 4437, 3771, 3206])
konzentration
Out[11]:
array([10000,  8500,  7225,  6141,  5220,  4437,  3771,  3206])
  • np.array([ , , , ]) Liste von Zahlen
  • np.arange(n) Spezieller array von 0 bis n-1 (für n konkrete Zahl einsetzen)

Python beginnt Zählungen bei 0

In [12]:
import seaborn as sns
In [13]:
sns.scatterplot(x=zeit, y=konzentration)
Out[13]:
<Axes: >
No description has been provided for this image

Wir wollen die Achsen beschriften

Dazu geben wir als erstes dem Bild den Namen ax (von axis)

In [14]:
ax = sns.scatterplot(x=zeit, y=konzentration)
No description has been provided for this image
In [15]:
ax.set_xlabel("Zeit")
ax.set_ylabel("Konzentration")
Out[15]:
Text(4.444444444444452, 0.5, 'Konzentration')

Die Grafik muss nun explizit aufgerufen werden

In [16]:
ax.figure
Out[16]:
No description has been provided for this image

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.

In [17]:
zeitstrahl = np.linspace(0, 7, 100)
#  100 Zeitpunkte zwischen 0 und 7
zeitstrahl
Out[17]:
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.        ])
In [18]:
werte = 10000 * np.exp(-0.1625*zeitstrahl)
werte
Out[18]:
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])
In [19]:
sns.lineplot(x=zeitstrahl, y=werte)
Out[19]:
<Axes: >
No description has been provided for this image

Das malen wir jetzt in die andere Achse hinein

In [20]:
ax2 = sns.lineplot(x=zeitstrahl, y=werte, ax=ax)
In [21]:
ax2.figure
Out[21]:
No description has been provided for this image
  • sns.scatterplot einzelne Punkte
  • sns.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.

In [22]:
sns.set_theme()

Jetzt auch noch eine Grafik zu den Absorbationstiefen¶

In [23]:
tiefe = np.linspace(0, 24, 100)
blau = np.exp(-0.03289*tiefe)
In [24]:
gruen = np.exp(-.1151*tiefe)
rot = np.exp(-.3466*tiefe)
In [25]:
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')
Out[25]:
Text(0, 0.5, 'Anteil')
No description has been provided for this image