Вы находитесь на странице: 1из 139

Eberhard-Karls-Universitt Tbingen

Wissenschaftliche Arbeit

Modellierung und Analyse von


Ruber-Beute-Populationsdynamiken

Autor:
Sanja Stegerer

Betreut durch:
Prof. Rainer Nagel
Arbeitsbereich:
Funktionalanalysis

16. September 20152

1 Quelle: https://500px.com/photo/741583/cheetah-chasing-gazelle-by-austin-thomas
Datum: 10.09.2015, 12.37 Uhr PST
2 Titelseite entwickelt anhand Vorlage von: https://de.wikibooks.org/wiki/LaTeX/_Eine_
Titelseite_erstellen Datum: 10.09.2015, 12.59 Uhr PST

Danksagung
Auf dieser Seite mchte ich den Menschen danken, die mich durch den Prozess des
Schreibens meiner wissenschaftlichen Arbeit begleitet und untersttzt haben.
In erster Linie mchte ich meinem Betreuer Prof. Rainer Nagel danken. Er hat mir die
Mglichkeit gegeben, meine Zulassungsarbeit meinen Lebensumstnden entsprechend
in Los Angeles zu schreiben und war trotzdem immer fr Fragen erreichbar. Er hat
mir alle Freiheiten gelassen, das Thema meiner Zulassungsarbeit zu bestimmen und
sie dann auch nach meinen Vorstellungen zu entwerfen, aber gleichzeitig Schranken
gesetzt, wenn ich vor lauter Ideen ber Bord zu gehen drohte. Deswegen an dieser
Stelle ein groes Dankeschn an die tolle Betreuung durch Prof. Nagel.
Weiter mchte ich meinem Ehemann und meinen Eltern danken, die mich durch die
ganze Zeit des Schreibens untersttzt und mit Rat und Tat bei wichtigen Entscheidungen geholfen haben. Besonders mein Ehemann hat mir mit seiner moralischen Untersttzung immer den Rcken gestrkt und aus den gelegentlichen Motivationstiefs
heraus geholfen.

Inhaltsverzeichnis
I

Einleitung

1 Modelle in der Biologie

2 berblick

II

Die Ruber-Beute-Beziehung - Biologischer Exkurs

3 Einfhrung in die Populationskologie

4 Die Ruber-Beute-Beziehung (Allgemeines)

4.1

Ruber und der Einfluss von Koevolution auf Eigenschaften beider Populationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

III Die Ruber-Beute-Beziehung - Modellierung und Analyse


6
5 Das Modell von Lotka und Volterra
5.1

5.2

Modellierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.1.1

Modellannahmen . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.1.2

Das Differenzialgleichungssystem . . . . . . . . . . . . . . . . . .

Grafische Analyse des Lotka-Volterra-Differenzialgleichungssystems . . . 10


5.2.1

Gleichgewichtslsungen . . . . . . . . . . . . . . . . . . . . . . . 10

5.2.2

Richtungsvektoren von Lsungen mit Anfangswerten auerhalb


der Gleichgewichtslsungen . . . . . . . . . . . . . . . . . . . . . 12

5.3

Qualitative Analyse des Lotka-Volterra Differenzialgleichungssystems . . 15


5.3.1

Existenz und Eindeutigkeit von Systemen von Differenzialgleichungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

5.3.2

Stabilitt der Gleichgewichtspunkte . . . . . . . . . . . . . . . . 17

5.3.3

Linearisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

5.3.4

Die Lsung des linearisierten Lotka-Volterra Modells . . . . . . . 19

5.3.5

Eigenwertanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Phasenportrait von G1 : . . . . . . . . . . . . . . . . . . . . . . . 24
Phasenportrait von G2 : . . . . . . . . . . . . . . . . . . . . . . . 25

5.4

5.3.6

Stabil, asymptotisch stabil, instabil . . . . . . . . . . . . . . . . . 28

5.3.7
5.3.8

Skizzieren der Lsung des nichtlinearen Lotka-Volterra Modells . 29


Schlussfolgerung . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Schwachpunkte des Lotka-Volterra Modells . . . . . . . . . . . . . . . . 33


Verbesserungsmglichkeiten: . . . . . . . . . . . . . . . . . . . . . 34

6 Modellerweiterung Logistisches Wachstum der Beutepopulation


6.1

6.2

36

Modellierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
6.1.1

Modellannahmen . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

6.1.2

Das Differenzialgleichungssystem . . . . . . . . . . . . . . . . . . 38

Grafische Analyse des logistischen Ruber-Beute Modells . . . . . . . . 39


6.2.1

Gleichgewichtslsungen . . . . . . . . . . . . . . . . . . . . . . . 39

6.2.2

Richtungvektoren von Lsungen mit Anfangswerten auerhalb


der Gleichgewichtslsungen . . . . . . . . . . . . . . . . . . . . . 41
Abschtzung: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

6.3

Qualitative Analyse des logistischen Modells . . . . . . . . . . . . . . . . 45


6.3.1

Stabilitt der Gleichgewichtspunkte . . . . . . . . . . . . . . . . 45

6.3.2

Linearisierung im Gleichgewichtspunkt . . . . . . . . . . . . . . . 45

6.3.3

Die Lsung der Linearisierung um G2 und G3 . . . . . . . . . . 47

6.3.4

Eigenwertanalyse von G2 und G3 . . . . . . . . . . . . . . . . . 53


Einordnen in die 3 Oberkategorien . . . . . . . . . . . . . . . . . 53
Zusammenfassung: . . . . . . . . . . . . . . . . . . . . . . . . . . 56

6.3.5

Kurvenverlauf in der Phasenebene . . . . . . . . . . . . . . . . . 57


Skizzieren der nichtlinearen Lsung des logistischen RuberBeute Modells . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

6.4

Diskussion des logistischen Lotka-Volterra Modell . . . . . . . . . . . . . 64


6.4.1

Vergleich zu Lotka-Volterra Modell . . . . . . . . . . . . . . . . . 64


Vergleich der Modelle fr die Beutepopulation: . . . . . . . . . . 65
Vergleich der Modelle fr die Ruberpopulation: . . . . . . . . . 66
Zusammenfassung und Verbesserungsvorschlge: . . . . . . . . . 66

7 Abschluss

68

Appendix

70

A Differenzialgleichungen

70

A.1 Gewhnliche Differenzialgleichung erster Ordnung . . . . . . . . . . . . . 70


A.2 Lsungen von Differenzialgleichungen . . . . . . . . . . . . . . . . . . . . 72
B Matrixexponentialfunktion

73

B.1 Die Matrixexponentialfunktion . . . . . . . . . . . . . . . . . . . . . . . 73


B.2 Stze und Definitionen fr die Matrixexponentialfunktion und ihre
Asymptotik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
C Die Lsung eines zweidimensionalen linearen Systems von Differenzialgleichungen
D Programme zur Erstellung der Graphiken

78
81

D.1 Lotka-Volterra Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81


D.1.1 2D-Grafiken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
D.1.2 3D-Grafiken und Trajektorie . . . . . . . . . . . . . . . . . . . . 93

D.2 Logistisches Lotka-Volterra Modell . . . . . . . . . . . . . . . . . . . . . 98


D.3 Grafiken fr Finale Diskussion

. . . . . . . . . . . . . . . . . . . . . . . 119

D.4 Grafiken fr Appendix . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

Teil I

Einleitung
1

Modelle in der Biologie

Mathematische Modellierung in den Naturwissenschaften ist heutzutage eines der


wichtigsten Handwerkzeuge zum Abstrahieren der komplexen Vorgnge und Interaktionen in der Natur.
Gerade in der Biologie werden sie mit wachsendem Wissen immer wichtiger und
unabdingbarer. Zwei herauszuhebende Beispiele sind die Molekularbiologie und die
Naturschutzwissenschaft.
Seit dem Start des Humangenomprojekts (1990) ([Hum]) hat das Feld der Molekularbiologie immense Fortschritte gemacht (siehe [PEDP99]). Diese versprechen
unter dem Schlagwort personalisierte Medizin baldige Mglichkeiten zur Erkennung
der einer Krankheit zugrunde liegenden molekularen Zusammenhnge und schafft
Hoffnung auf eine Heilung einer Vielzahl an Krankheiten ([PEDP99]).
Die Zusammenhnge und Interaktionen von Moleklen und Genen, sowie deren
Einwirkung auf die Zelle, das Organ und den gesamten Krper, in dem diese Zelle
lebt, wurden erst in den letzten Jahren entdeckt. Dabei wird ganz nach den Worten
von Hans Kng, Wer viel wei, wei auch, dass er nichts wei, - zumindest, wenn er
weise ist 3 klar, dass mit mehr Wissen ber diese Zusammenhnge auch die Komplexitt der Interaktionen und Abhngigkeiten zunimmt und neue bessere Modelle,
sowie computergesttzte Methoden bentigt werden, um sie fr das menschliche
Verstndnis zugnglich zu machen (siehe [Mat], Importance). Eine Zusammenarbeit
von Mathematikern, Molekularbiologen und Computerwissenschaftlern wird in diesem
Feld immer wichtiger.
Die Populationskologie (fr die Definition siehe Kapitel 3) ist eine der ersten biologischen Felder, in denen berhaupt mathematische Modelle entwickelt wurden. Das
Vorhandensein von Pflanzen und Wildtieren war fr die Menschen schon immer von
lebensnotwendiger Bedeutung, sei es als Nahrungs-, sowie Fell- und Lederlieferanten,
aber auch als Bedrohung durch Raubtiere. Somit ist es nachvollziehbar, dass das erste
mathematische Modell in der Biologie versucht, grundlegende Populationsdynamiken
zu beschreiben.
Diese Publikation wurde von Thomas Robert Malthus 1798 mit dem Titel An Essay
on the Principle of Population (Wiederverffentlichung in 2012 siehe [Mal12]) verffentlicht. Diese inspirierte unter anderem Pierre Francois Verhulst, welcher 1838 das
logistische Wachstumsmodell fr Populationen beschrieb (siehe [Log]), aber auch die
Begrnder der bis heute anerkannten Evolutionstheorie Charles R. Darwin und Alfred
3 Der Anfang aller Dinge: Naturwissenschaft und Religion, Piper 2005, S. 91
gefunden in https://de.wikiquote.org/wiki/Hans_K%C3%BCng

Russel Wallace4 , wobei Wallace zustzlich Begrnder der Inselbiogeographie-Theorie


ist (siehe [Thi12], 5-6 Artenschutz im Rumlichen Kontext, Inselbiogeographie, S.12).

Seither wurden von Mathematikern und Biologen viele weitere Modelle entwickelt und
verbessert. Aufgrund der in den letzten Jahren drastisch erhhten Fhigkeit, Daten zu
sammeln und zu verarbeiten, erhielt dieses Feld der Schnittstelle von Mathematik und
Biologie einen weiteren Aufschwung (siehe [Mat], Importance). Nicht nur haben sich
die Fhigkeit, diese Modelle zu nutzen, verbessert, sondern auch die Mglichkeiten
przisere Modelle fr spezifische Populationsinteraktionen zu entwickeln und fr den
Naturschutz nutzbar zu machen.
Das Erstellen und Nutzen solcher Modelle ist mit steigender Wahrnehmung des drohenden sechsten groen Artensterbens (siehe [Thi12], Einfhrung S.3 und [Jac]) besonders
essentiell im Natur- und Artenschutz geworden. Eine gute und mglichst realistische
Vorhersage der Entwicklung wichtiger Populationen innerhalb eines kosystems kann
Naturschtzern die Mglichkeit geben, passend in die Dynamiken einzugreifen und
somit ber das Fortbestehen oder Aussterben des gesamten kosystems zu bestimmen.

berblick

In dieser wissenschaftlichen Arbeit werden zwei der ersten und grundlegenden


mathematische Modelle zur Modellierung der Beziehung zwischen Rubern und ihrer
Beute beschrieben und analysiert. Hierfr wird zu Beginn der biologische Hintergrund
im Rahmen der Populationskologie angefhrt um die Modellierung in biologischen
Kontext zu bringen. Historische Hintergrnde zu den einzelnen Modellen werden in
den jeweiligen Kapiteln ebenfalls weiter ausgefhrt.
Im mathematischen Teil dieser Arbeit wird mit dem bekanntesten und einfachsten
Modell begonnen: Das Lotka-Volterra Modell. Zuerst werden die Modellannahmen
angefhrt und das Modell beschrieben. Es folgt eine grafische, sowie qualitative
Analyse des Modells. Als zweites Modell wird das logistische Lotka-Volterra Modell
behandelt und analog zum Lotka-Volterra Modell grafisch und qualitativ analysiert.
Im Hintergrund wurden numerische Methoden fr die grafische Darstellung der
Modelle benutzt. Der Code hierfr wird im Appendix D angefhrt.

4 siehe [DW58] fr den Brief von Wallace an Darwin, noch vor der Verffentlichung von Darwins
berhmten Werk The Origin of species (siehe [Dar09]), geschrieben und spter von the Linnean
Society of London als Journal-Artikel publiziert. Siehe auerdem http://www.100welshheroes.
com/en/biography/alfredrussellwallace Datum: 14.09.2015 15.29 Uhr PST, sowie [Thi12],
5-6 Artenschutz im Rumlichen Kontext, Inselbiogeographie, S.12

Teil II

Die Ruber-Beute-Beziehung Biologischer Exkurs


3

Einfhrung in die Populationskologie

Die Ruber-Beute-Beziehung ist ein Teilgebiet der Populationskologie (Teilbereich der


kologie), der sich im Speziellen mit der Interaktion von Populationen verschiedener
oder gleicher Arten untereinander und mit ihrer Umwelt beschftigt ([Pop]). Hierbei
untersucht sie im Speziellen die Gren von Populationen, zu geringeren Teilen auch
ihre Verteilungen und die Prozesse, welche zu beidem fhren ([BMT96], Preface, S. vii).
Diese werden mit mathematischen Modellen beschrieben ([BMT96], Preface, S. vii).
Sie ermglichen ein besseres Verstndnis von den Verhltnissen und Zusammenhngen
von Populationsdynamiken in der realen Welt, zu Teilen besser als Beobachtungen der
realen Welt selbst (bersetzt aus [BMT96], Preface, S. vii). Eine allgemeine Populationsdynamik kann durch 4 grundlegende Prozesse beschrieben werden: Geburt (G),
Tod (T), Einwanderung (E) und Auswanderung (A), die einer einfachen Gleichung
Nt+1 = Nt + G T + E A
gengen, wobei Nt die Populationsgre zum Zeitpunkt t, und Nt+1 die Populationsgr derselben Population eine Zeitperiode spter bei t+1 darstellt ([BMT96], Chapter
1: Describing Populations, S.4). Ein Anstieg in der Populationsgre kann beobachtet werden, falls die Zahl der Geburten und Einwanderungen grer ist als die der
Todesflle und Auswanderungen.

Die Ruber-Beute-Beziehung (Allgemeines)

Die Ruber-Beute-Beziehung ist eine besondere Beziehung zwischen mindestens zwei


Populationen. Hierbei fressen Individuen der einen Population, die so genannten Ruber, Teile oder Individuen einer anderen Population, die so genannte Beute.

4.1

Ruber und der Einfluss von Koevolution auf Eigenschaften beider Populationen

Ruber knnen in 4 unterschiedliche Gebiete unterteilt werden. ([BMT96], Chapter 5:


Predation, Section 1: Introduction S. 117)5
Echte Ruber:
Ruber, welche andere Tiere tten und fressen, um das eigene berleben zu
sichern.
5 Quelle

fr die Aufzhlung siehe ebenfalls [BMT96]

Parasitoide:
Dies sind Organismen, meist Insekten der Ordnung Hymenoptera, welche im
Adult-Stadium unabhngig von einer bestimmten anderen Population leben, aber
ihre Eier in unmittelbarer Nhe oder direkt an Individuen der Beutepopulation
legen. Die aus den Eiern schlpfenden Larven ernhren sich im Larvenstadium
ausschlielich von der Beute, was gegen Ende des Larvenstadiums zum Tod des
Beutindividuums fhrt.
Parasiten:
Organismen, welche den Groteil ihres Lebens in unmittelbarer Nhe oder direkt
an oder in der Beute, in diesem Fall Wirtspopulation genannt, leben, ihre
Nahrung von dem Wirt beziehen und dabei dessen Fitness reduzieren. In den
meisten Fllen fhrt eine Besiedelung eines Wirts durch einen Parasit nicht zum
Tod des Wirts.
Herbivoren:
Dies sind pflanzenfressende Tiere, welche ihr berleben durch den teilweisen
oder ganzen Fra von Pflanzen sichern. Dabei gibt es Herbivoren, welche den
Tod einer Pflanze direkt durch komplettes Auffressen hervorrufen und andere,
welche die Fitness der Pflanze durch teilweises Fressen verringern, aber nicht
direkt tten. In vielen Fllen jedoch fhrt der Konsum durch Herbivoren direkt
oder indirekt zum Tod der Pflanze.
Populationen, welche in einer Ruber-Beute-Beziehung miteinander leben, beeinflussen sich gegenseitig stark in ihrer Evolution und ihren Eigenschaften. Diese Art von
Evolution wird als Koevolution bezeichnet.
Koevolution ist ein Entwicklungsprozess, welcher, abhngig von Umgebungs- und Populationseigenschaften, schnell oder langsam laufen kann. Die Populationen erzeugen
hierbei Teile des der Evolution zu Grunde liegenden Selektionsdruck ([BMT96], Chapter 5: Predation, Section 3: Coevolution S. 120), welcher sich aus vielen kleinen Selektionsdrcken zusammensetzt:
Ruberpopulation:
Ein Selektionsdruck, welcher Individuen mit effizienterer Beute-Wahl und BeuteBeschaffung einen Vorteil gegenber anderen Individuen mit anderen Methoden
gibt. Diese Individuen haben deswegen eine grere Fitness und eine hhere
Wahrscheinlichkeit zur Fortpflanzung und somit Weitergabe ihrer Gene. Durch
die Weitergabe der Gene ist allerdings nicht gesichert, dass genau dieses Vorteil
bringende Verhalten an die nchste Generation weitergegeben wird. Es besteht
jedoch die Chance auf Anpassung der ganzen Population, da die Nachkommen
dieses Individuums wieder eine hhere Fitness als ihre Artgenossen und somit
eine hhere Wahrscheinlichkeit zur Fortpflanzung haben.
Beutepopulation:
Ein Selektionsdruck, welcher Individuen mit besseren Flucht-, Tarn- oder sonstigen Abwehrmechanismen eine hhere berlebenswahrscheinlichkeit und somit

eine hhere Wahrscheinlichkeit zur Fortpflanzung und somit zur Weitergabe ihrer
Gene an die nchste Generation gibt ([BMT96], Chapter 5: Predation, Section
3: Coevolution, S. 120). Auch hier ist wieder nicht gesichert, dass die Vorteil
bringenden Eigenschaften durch die Gene an die nchste Generation weiter gegeben werden. Wie bei der Ruber-Population besteht jedoch die Chance auf
Anpassung der ganzen Population.
Hierbei knnen Individuen der Beutepopulation durch eine Anpassung in eine bestimmte Richtung ein breiteres Spektrum an Rubern abwehren als sich umgekehrt
die Ruber an mehrere Beutepopulationen anpassen knnen. Ruberpopulationen verlieren hufig durch die Anpassung an eine bestimmte Beutepopulation die Fhigkeit
weitere Beutepopulationen effizient zu bejagen ([BMT96], Chapter 5: Predation, Section 3: Coevolution, S. 120).
Dies fhrt dazu, dass Ruberpopulationen in den meisten Fllen eine LieblingsBeutepopulation haben. Diese zeichnet sich dadurch aus, dass die Ruber durch die
Bejagung dieser Beute am effizientesten ihre Nahrungsbedfnisse abdecken knnen
und eine Bejagung dieser Beute besonders hufig beobachtet werden kann ([BMT96],
Chapter 5: Predation, Section 3: Coevolution, S. 120). Als Beispiel fr eine solche
Ruber-Beute-Beziehung kann der kanadische Luchs und der Schneeschuhhase genannt
werden ([Kan], Hunting and Diet)
Ausgehend von der Variation und Gre der Population an Beutetieren haben sich
deswegen 2 Grobkategorien von Rubern entwickelt: Generalisten und Spezialisten.
In einer Umwelt von geringem Selektionsdruck auf die Ruberpopulation durch viele
Beutepopulationen ist der Ruber nicht gezwungen, sich auf seine Lieblings-Beuteart
zu konzentrieren und kann diese bei Bedarf wechseln. Diese Ruber nennt man Generalisten.
In Umgebungen, in denen nur wenige Beutearten vorkommen, ist es fr die Ruberpopulationen essenziel, mglichst effizient eine bestimmte Beuteart bejagen zu knnen,
da sonst die Extinktion droht. Solche Ruber nennt man Spezialisten. In solchen Gebieten gilt dasselbe in umgekehrter Form auch fr die Beute, weswegen gerade dort
Koevolution besonders schnell stattfinden kann.

Teil III

Die Ruber-Beute-Beziehung Modellierung und Analyse


Es stellt sich nun die Frage, welches mathematische Modell eine reale Ruber-BeutePopulationsdynamik reproduzieren kann und wie gut dieses Modell die Realitt wieder
gibt. Des Weiteren ist interessant ob mit diesem Modell die weitere Entwicklung
beider Populationen vorhergesagt werden kann. Dies ist in der heutigen Zeit besonders
wertvoll, da in den letzten Jahren mehr und mehr Arten aussterben ([Thi12], Einfhrung S.3 und [Jac]) und die noch Lebenden den Schutz der Menschen bentigen.
Gerade die Beziehung zwischen Rubern und ihrer Beute kann ein ganzes kosystem
beeinflussen (Siehe [Thi12], Einfhrung, S.37), man nennt solche Ruberarten dann
keystone species ([Thi12], Einfhrung, S.39), aufgrund ihrer Schlsselrolle in diesem
kosystem, und deswegen ist die Vorhersage dieser Entwicklung ein wichtiger Bestandteil des aktuellen Artenschutzes (Siehe Folien zu Keystone Species in [Thi12],
Einfhrung, S. 37-42).
Das erste Modell zur Beschreibung einer Ruber-Beute Beziehung stammt von Alfred
J. Lotka (1925) und Vito Volterra (1926). Wobei das Modell von beiden je unabhngig
entwickelt wurde ([Lot]). Es wird deswegen auch das Lotka-Volterra Modell fr die
Ruber-Beute-Beziehung genannt.
Das zweite in dieser Arbeit betrachtete Modell integriert logistisches Wachstum
fr die Beute-Population in das Lotka-Volterra Modell. Das Modell fr logistisches
Wachstum fr Populationen und die logistische Gleichung wurde 1838 von PierreFrancois Verhulst erstmals entwickelt (Siehe [Log], Applications), welche auch von
Alfred J. Lotka 1925 nochmals unter dem Namen law of population growth (siehe
[Log], Applications) neu entwickelt und niedergeschrieben wurde. Heute wird die
logistische Gleichung auch auerhalb der Modellierung von Populationswachstum
verwendet (z.B. Logistische Regression und zur Modellierung Neuronaler Netze im
Feld machine learning in den Computerwissenschaften oder zur Modellierung von
Tumor-Wachstum in den Medizinwissenschaften (siehe [Log]), Applications).

Das Modell von Lotka und Volterra

5.1
5.1.1

Modellierung
Modellannahmen

Sei P die Anzahl der Individuen einer Population von Rubern (bezeichne die Ruberpopulation im Folgenden mit P ) und N die Anzahl der Individuen einer Population
von Beutetieren der Ruberpopulation P (bezeichne die Beutepopulation im Folgenden mit N ).
Ziel ist es, P (t) und N (t) in Abhngigkeit der Zeit t zu finden.
Das Lotka-Volterra Modell hat 4 grundlegende Annahmen.6 :
1. Die Beutepopulation wchst in Abwesenheit des Rubers exponentiell.
2. In Anwesenheit der Ruberpopulation sinkt die Beutepopulation proportional
zur Interaktionshufigkeit von Ruber- und Beutepopulation.
3. Die Ruberpopulation stirbt in Abwesenheit der Beutepopulation mit exponentieller Sterberate aus.
4. In Anwesenheit der Beutepopulation wchst die Ruberpopulation proportional
zur Interaktionshufigkeit von Ruber- und Beutepopulation.
Hieraus knnen die folgenden Differenzialgleichungen formuliert werden:
1. Sei a > 0 die Wachstumsrate der Beutepopulation. Dann wird das Wachstum
der Beutepopulation beschrieben durch
dN
(t) = a N (t),
dt

t 0.

2. Die Hufigkeit von Interaktionen der beiden Populationen ist abhngig von der
Gre beider Populationen. Je grer eine Population, desto grer die Wahrscheinlichkeit, dass Interaktion zwischen den Populationen stattfinden, desto grer die Interaktionshufigkeit. Die Interaktionshufigkeit kann also modelliert
werden durch das Produkt der Populationen P (t) N (t). Sei b > 0 auerdem der
Sterbeparameter der Beute bei Interaktionen von Ruber- und Beutepopulationen, dann ergibt sich fr die Beutepopulation
dN
(t) = aN (t) b N (t)P (t),
dt

t 0.

3. Sei d > 0 die Sterberate der Ruberpopulation in Abwesenheit der Beutepopulation. Dann kann die Abnahme der Ruberpopulation beschrieben werden
als

dP
(t) = d P (t),
dt

t 0.

6 Die 4 grundlegenden Annahmen wurden anlehnend an den online-Kurs von Prof. Paul Blanchard, Boston University und Patrick Cummings auf der website www.edX.org mit dem Namen BUx
Math226.1x (die bersichtsseite zum Kurs siehe [Edx]) entwickelt. Das Video hierzu befindet sich in
Module 10, Systems of Differential Equations, Video 2.

4. Die Hufigkeit der Interaktionen zwischen beiden Populationen kann wieder


durch P (t) N (t) beschrieben werden mit c > 0 als Wachstumsparameter fr
die Ruberpopulation. Daraus ergibt sich fr die Ruberpopulation
dP
(t) = c P (t)N (t) dP (t),
dt
5.1.2

t 0.

Das Differenzialgleichungssystem

Folgerung 5.1.2.1 (Lotka-Volterra-Gleichungen).


Aus den Modellannahmen ergibt sich das folgende System von Differenzialgleichungen
dN
(t) =N (t)(a bP (t)),
dt
dP
(t) =P (t)(cN (t) d).
dt

(1)

Ein solches System kann auch in Vektorschreibweise umformuliert werden. Sei hierbei

N (t)
,
x(t) :=
P (t)

dN
dx
dt (t)
.
(t) :=
dP
dt
(t)
dt

Somit ergibt sich fr das Differenzialgleichungssystem von Lotka-Volterra


dN
N (t)(a bP (t)))
dx
dt (t)
=:
=
(t) =
dP
dt
P (t)(cN (t) d)
(t)
dt

!
fN (N (t), P (t))
fP (N (t), P (t))

fN (x(t))
fP (x(t))

!
.
(1 )

Ziel ist nun, die Lsungen der Differenzialgleichungen zu finden, um die tatschlichen Populationsgren zu erhalten.

Bemerkung 5.1.2.2.
Das Differenzialgleichungssytem (1) aus Folgerung 5.1.2.1
dN
(t) =N (t)(a bP (t)),
dt
dP
(t) =P (t)(cN (t) d)
dt

(1)

ist ein System von autonomen gewhnlichen Differenzialgleichungen erster Ordnung


mit den Lsungen P (t) und N (t).
Fr eine Einfhrung in Differenzialgleichungen siehe Appendix A und insbesondere
Definitionen A.1.1 fr gewhnliche Differenzialgleichungen erster Ordnung, A.1.2 fr
autonome Differenzialgleichungen und A.2.3 fr Systeme von Differenzialgleichungen.
Zum Vertieften Lesen, sowie eine detaillierte Einfhrung in Differenzialgleichungen
siehe [TP63].

Im folgenden Kapitel wird das Lotka-Volterra Modell hauptschlich grafisch analysiert.


Hierbei wird zuerst nach der einfachsten Lsung eines Systems von Differenzialgleichungen gesucht, die sogenannten Gleichgewichtslsungen (siehe Definition 5.2.1.1).
Diese geben dem bis jetzt noch vllig unbekannten Verlauf der Lsungen Struktur,
welche als Grundlage fr die weitere Analyse dient.

5.2

Grafische
Analyse
Differenzialgleichungssystems

5.2.1

des

Lotka-Volterra-

Gleichgewichtslsungen

Definition 5.2.1.1 (Gleichgewichtslsungen).


Sei g eine Differenzialgleichung wie in Definition A.1.1. Sei x(t) eine Lsung der Differenzialgleichung g. Man nennt x(t) eine Gleichgewichtslsung von g, falls
dx
(t) = 0.
dt
Theorem 5.2.1.2.
Die Gleichgewichtslsungen zum Lotka-Volterra-Differenzialgleichungssystem (1) sind

G1 (t) =

N (t) =
c
G2 (t) =

a
P (t) =
b

N (t) = 0
P (t) = 0

Beweis.

Lsung G1 (t) ist klar.

Fr P (t) = 0 oder N (t) = 0 gilt: Aus P (t) = 0 folgt N (t) = 0 und umgekehrt
und fhrt somit zu G1 (t).
Zeige nur den Fall P (t) = 0, da Fall N (t) = 0 analog geht.
Es ist
0=

dN
(t) = N (t)(c 0 d) = N (t) d N (t) = 0.
dt

Fr G2 (t) betrachte den Fall P (t) 6= 0 und N (t) 6= 0. Es gilt also


0 = N (t)(a bP (t)),
0 = P (t)(cN (t) d).
Somit
0 = cN (t) d,

d = cN (t)

d
=: N (t),
c

0 = a bP (t),

a = bP (t)

a
=: P (t).
b

Es gibt also zwei Zustnde, in denen sich die Populationsgren beider Populationen nicht verndern. Dabei ist die Gleichgewichtslsung G1 (t) (Es existieren keine
Populationen) nicht weiter interessant.
Bei Gleichgewichtslsung G2 (t) hingegen existieren Individuen in beiden Populationen
im Gleichgewichtszustand.

10

Es stellt sich die Frage, wie sich die Dynamik entwickelt, wenn die StartPopulationsgren nicht die Gleichgewichts-Populationsgren sind.
Da die Gleichungen im Lotka-Volterra Modell voneinander abhngig sind, ist es in
Grafiken sinnvoll, die Funktionen P (t) und N (t) gegeneinander aufzuzeigen, und die
t-Achse in der Grafik wegfallen zu lassen. Diese Ebene nennt man N-P-Ebene oder
auch Phasenebene.
Falls eine spezifische Lsung des Differenzialgleichungssystems existiert, nennt man die
Lsungskurve in der Phasenebene auch Trajektorie oder Phasenkurve ([MG87],
S 42).
Die Vernderungen, welche durch t hervorgerufen werden, werden in der Phasenebene
indirekt dargestellt.

Die folgende Abbildung zeigt die Gleichgewichtslsungen der Gleichungen des LotkaVolterra Modells mit gegebenen Parametern.

a =2.0, b =1.2, c =1.0, d =0.9



d
c
a
b

P(t) =0
N(t) =0
GGPunkt





Rauber



G2








G1








Beute









Abbildung 1: Die 4 Gleichgewichtsgeraden mit den zugehrigen


Gleichgewichtspunkten

11

5.2.2

Richtungsvektoren von Lsungen mit Anfangswerten auerhalb der


Gleichgewichtslsungen

Die Gleichgewichtslsung G2 (t) ist in der Phasenebene als Punkt reprsentiert, weswegen Gleichgewichtslsungen auch hufig Gleichgewichtspunkte in der Phasenebene
genannt werden. Der Gleichgewichtspunkt G2 := ( dc , ab ) ist genau der Schnittpunkt
der beiden Geraden N (t) =

d
c

und P (t) = ab .

Als nchsten Schritt gilt es abzuschtzen, wie sich die Populationen verndern, falls
eine oder beide Populationen nicht ihre Gleichgewichtsgre haben.
Betrachte hierfr die Differenzialgleichungen einzeln. Fr die Abschtzung von

dP
dt

wird N (t) jeweils oberhalb und unterhalb seiner Gleichgewichtslsung betrachtet und
umgekehrt.
1.

dN
(t) = N (t)(a bP (t))
dt
Sei P (t) > ab , dann gilt
dN
a
(t) = N (t)(a bP (t)) < N (t)(a b ) = 0,
dt
b

also

dN
(t) < 0.
dt

also

dN
(t) > 0.
dt

Sei P (t) < ab , dann gilt


dN
a
(t) = N (t)(a bP (t)) > N (t)(a b ) = 0,
dt
b

dP
(t) = P (t)(cN (t) d)
dt
Sei N (t) > dc , dann gilt
dP
d
(t) = P (t)(cN (t) d) > P (t)(c d) = 0,
dt
c

also

dP
(t) > 0.
dt

also

dP
(t) < 0.
dt

Sei N (t) < dc , dann gilt


d
dP
(t) = P (t)(cN (t) d) < P (t)(c d) = 0,
dt
c

Die folgende Abbildung zeigt diese Abschtzung. Hierbei hat nur die Pfeilrichtung
Bedeutung, die Lngen der Pfeile haben keine Bedeutung.

12

a =2.0, b =1.2, c =1.0, d =0.9




d
c
a
b



P(t) =0
N(t) =0
GGPunkt

Rauber



G2






G1











Beute







Abbildung 2: Richtungspfeile aufgrund obiger Abschtzung


Die Pfeile deuten darauf hin, dass sich die Populationen kreisfrmig um G2 bewegen.
Definition 5.2.2.1 (Richtungsfeld).
Mithilfe einer computergesttzen Auswertung der Differenzialgleichung in regelmigen Abstnden fr verschiedene Werte von P (t), sowie N (t) kann man eine Grafik
erstellen, welche die Werte der Differenzialgleichung in Form von Pfeilrichtung und
Pfeillnge darstellt. Eine solche Abbildung nennt man Richtungsfeld in der Phasenebene.
Bemerkung 5.2.2.2.
Die folgende Grafik zeigt das Richtungsfeld aus Theorem 5.1.2.1 fr die Parameter
a = 2, b = 1.2, c = 1, d = 0.9 des Lotka Volterra Modells. Sie wurde erstellt mit der
quiver()-Funktion in python (Benutzt wurde die Library Matplotplib fr Grafiken in
python, fr die Dokumentation der Funktion quiver, siehe [Pytb]). Zur Betrachtung
des Codes zum Erstellen dieser Grafik siehe D.1.1 Zeilen 126-182 und den Aufruf in
Zeile 423.

13

d
c
a
b

a =2.0, b =1.2, c =1.0, d =0.9

P(t) =0
N(t) =0
GGPunkt





Rauber














Beute







Abbildung 3: Richtungsfeld fr das Lotka-Volterra Modell mit


0,05-facher Skalierung der Richtungsvektoren
Die Richtungspfeile deuten eine kreisfrmige Bewegung der beiden Populationen
um den Gleichgewichtspunkt G2 , mit langsamer nderungsrate in der Nhe des
Gleichgewichtspunktes und schnellerer bei weiter entfernten Punkten, an. Im Folgenden soll mehr ber den genauen Verlauf der Funktionen P (t) und N (t) in der Nhe
von G2 herausgefunden werden.
Dabei wird untersucht, ob sich die Populationsgren auf den Gleichgewichtspunkt
zu oder davon weg bewegen, oder ob keines von beidem zutrifft und sie in gleichem
Abstand zum Gleichgewichtspunkt bleiben und periodisch sind.

14

5.3

Qualitative Analyse des Lotka-Volterra Differenzialgleichungssystems

In diesem Abschnitt wird das Lotka-Volterra Modell qualitativ analysiert. Dies ist die
Analyse der Eigenschaften der Lsungskurven, ohne die Lsung selbst zu berechnen
([Enc]). Dadurch erhlt man den berblick ber das Verhalten der Lsungskurven mit
unterschiedlichen Anfangswerten auerhalb der Gleichgewichtslsungen.
Die folgenden Fragen sollen in diesem Kapitel behandelt werden.
1. Sind die Gleichgewichtslsungen anziehend oder abstoend fr Lsungen mit
Anfangswerten in der Nhe der Gleichgewichtslsungen?
2. Wie sieht das Verhaten fr t aus?
3. Knnen Lsungskurven skizziert werden?
Das Kapitel wird mit Grundlagen und der Existenz und Eindeutigkeit von Lsungen
von Differenzialgleichungen und Systemen von Differenzialgleichungen begonnen und
im Anschluss auf die 3 Leitfragen eingegangen.
5.3.1

Existenz und Eindeutigkeit von Systemen von Differenzialgleichungen

Definition 5.3.1.1 (Anfangswertproblem eines Systems von gewhnlichen Differenzialgleichungen).


Sei ein n-dimensionales System an Differenzialgleichungen wie in Definition A.2.3 gegeben und ein Anfangswert
b = (b1 , b2 , . . . , bn )T ,
sodass
y1 (t0 )

= b1

y2 (t0 )

= b2
..
.

yn (t0 )

= bn .

Dann nennt man das System von Differenzialgleichungen zusammen mit dem Anfangswert ein Anfangswertproblem.
Folgerung 5.3.1.2 (Anfangswert fr Lotka-Volterra Modell).
Das Differenzialgleichungssystem (1) aus Theorem 5.1.2.2 fr das Lotka-Volterra Modell in Vektorschreibweise (1 ) mit Anfangswert b kann zum Anfangswertproblem
dx
(t) =
dt

!
fN (x(t))
fP (x(t))

zusammengefasst werden.

15

b = x0

(2 )

Bemerkung 5.3.1.3.
In der Modellierung gibt es in den meisten Fllen einen Ist-Zustand als Anfangswert.
Um Klarheit ber die Existenz und Eindeutigkeit einer Lsung zu erhalten, werden im
Folgenden die grundlegenden Stze hierfr zitiert.
Theorem 5.3.1.4 (Existenz und Eindeutigkeit fr die Lsung von Differenzialgleichungen).
Sei

dx
dt (t)

= f (t, x) eine beschrnkte, stetige Funktion von t und x(t) in S R2 ((t,x)-

Ebene). Sei auerdem ein Punkt (t0 , x0 ) S gegeben.


Die Funktion f (t, x(t)) genge der Bedingung fr die Lipschitz-Stetigkeit in S. Es existiert also fr je 2 Punkte (t, x), (t, x
) S eine Konstante N, sodass
|f (t, x) f (t, x
)| N |x x
|

(t, x), (t, x


) S.

Dann existiert ein Intervall


I0 : |x x0 | < h,

h > 0,

auf dem genau eine einzige stetige Funktion x(t) mit stetiger Ableitung auf I0 existiert,
fr die gilt
dx
(t)
dt

= f (t, x(t)),

x(t0 )

= x0 .

Beweis. Siehe [TP63], S. 734 ff.


Theorem 5.3.1.5 (Existenz und Eindeutigkeit fr ein System von Differenzialgleichungen erster Ordnung).
Sei das Differenzialgleichungssystem
dy1
(t) = f1 (t, y1 (t), y2 (t), . . . , yn (t)),
dt
dy2
(t) = f2 (t, y1 (t), y2 (t), . . . , yn (t)),
dt
..
.
dyn
(t) = fn (t, y1 (t), y2 (t), . . . , yn (t)),
dt
und der Anfangswert
y1 (t0 )

= b1 ,

y2 (t0 )

= b2 ,
..
.

yn (t0 )

= bn ,

16

mit b Rn , f1 , . . . , fn S stetig, gegeben. Hierbei sei S definiert durch


|t t0 | k0 ,
|y1 (t) b1 | k1 , . . . , |yn (t) bn | kn .
Jede

der

Funktionen

f1 , . . . , fn

sei

Lipschitzstetig,

d.h.

fr

je

Punkte

(t, y1 , y2 , . . . , yn ), (t, y1 , y2 . . . yn ) fr alle i = 1, . . . , n N Konstante, sodass gilt


|fi (t, y1 , . . . , yn ) fi (t, y1 , . . . , yn )| N (|y1 y1 | + |y2 y2 | + + |yn yn |) .
Dann existiert ein Intervall
I0 : |t t0 | < h

h>0

in dem genau eine Familie von stetigen Funktionen y1 (t), . . . , yn (t) existiert, deren stetige Ableitungen das gegebene Differenzialgleichungssystem mit gegebenem Anfangswert
erfllen.
Beweis. Siehe [TP63], S. 764 ff.
Bemerkung 5.3.1.6.
Fr eine etwas andere Formulierung mit vollstndigem Beweis des Existenz- und Eindeutigkeitssatzes siehe [HSD13] Kapitel 17, S. 385 ff.
Fr ein vertieftes Studium von Eindeutigkeit und Existenz der Lsung von Differenzialgleichungen erster Ordnung, sowie Systemen von Differenzialgleichungen erster Ordnung siehe [CL55] Chapter 1 und [TP63].
5.3.2

Stabilitt der Gleichgewichtspunkte

Um die Leitfragen 1 (Eigenschaften des Gleichgewichtspunkts) und 2 (Verhalten


der Lsung fr t ) zu beantworten ist die Linearisierung des Modells in seinen
Gleichgewichtspunkten typischerweise der erste Schritt zur Analyse der lokalen
Stabilitt des nichtlinearen Differenzialgleichungssystems (siehe [Lin]).
Lineare Systeme sind meistens einfacher zu analysieren und es sind bereits Lsungsmethoden zur Betrachtung des Verhaltens fr t bekannt. Auerdem zeigen
linearisierte Systeme nahe der Gleichgewichtslsung in den meisten Fllen hnliches
Verhalten wie ihre nichtlinearen Originale. Dies wird am Ende des Kapitels im Satz
5.3.6.3 gezeigt.
Wir werden also fr Lsungen nahe des Gleichgewichtspunkts das Verhalten des
linearisierten Lotka-Volterra Modells betrachten und, wenn mglich, Rckschlsse auf
das tatschliche System ziehen.

17

5.3.3

Linearisierung

Linearisierung eines Systems kann erreicht werden durch Linearisierung beider Gleichungen mithilfe der Taylorreihe (siehe [Tay]). Die daraus resultierenden linearen Gleichungen bilden dann ein System von Linearen Differenzialgleichungen (zur Definition
von Systemen linearer Differenzialgleichungen siehe C.0.1). Da im Gleichgewichtspunkt
linearisiert werden soll, wird fr die Herleitung ein allgemeiner Gleichgewichtspunkt
G = (g1 , g2 ) angenommen. Es gilt also
dN
fN
fN
(t) fN (g1 , g2 ) +
(g1 , g2 ) (N (t) g1 ) +
(g1 , g2 ) (P (t) g2 ),
| {z } N (t)
dt
P (t)
=0

fP
fP
dP
(t) fP (g1 , g2 ) +
(g1 , g2 ) (N (t) g1 ) +
(g1 , g2 ) (P (t) g2 ).
| {z } N (t)
dt
P (t)
=0

Die Partiellen Ableitungen fr das Lotka Volterra Modell sind


fN
(N (t) (a P (t)b)
=
= a P (t) b
N (t)
N (t)
(N (t)a N (t)P (t)b)
fN
=
= N (t)b
P (t)
P (t)
fP
(P (t) cN (t) P (t)d)
=
= c P (t)
N (t)
N (t)
fP
(P (t) (cN (t) d)
=
= c N (t) d
P (t)
P (t)

Mit der Jacobi-Matrix


f
JP,N =

N (t) (g1 , g2 )

fN
P (t) (g1 , g2 )

fP
N (t) (g1 , g2 )

fP
P (t) (g1 , g2 )

a g2 b

=
g2 c

g1 b

cg1 d

kann das linearisierte Gleichungssystem umgeschrieben werden in

dN
dt (t)
dP
dt

JP,N

(t)

N (t) g1
P (t) g2

!
.

(L1)

Mit der Linearisierung durch die Taylor Reihe wird ein System von Gleichungen berechnet, welches den Punkt, in dem linearisiert wurde, ebenfalls annimmt.
Wir bentigen fr die weitere Analyse des linearisierten Systems den genauen Gleichgewichtspunkt jedoch nicht und es ist generell einfacher, wenn man ein System mit
dem Ursprung als Gleichgewichtspunkt betrachtet. Betrachte deswegen hier O.B.d.A.

18

das in den Ursprung verschobene System

dN
dt (t)
dP
dt (t)

dN
dt (t)
dP
dt

+ JP,N

(t)
N (t)

JP,N

g1

g2

!
JP,N

P (t)

g1

g2

+ JP,N

g1

g2

= JP,N

N (t)

P (t)

N (t)

.
cg1 d
P (t)

a g2 b

g1 b

=
g2 c

(L2)

Setzen wir nun die tatschlichen Werte von G2 (t) und G1 (t) in L2 ein, erhalten wir
die zwei Gleichungssysteme
G1 = (0, 0)

dN
dt (t)

dP
dt (t)

N (t)
P (t)

G2 = ( dc , ab )

5.3.4

dN
dt (t)

dP
dt (t)

a ab b
a
bc

N (t)
0 dc b
N (t)

.
a
c dc d
P (t)
c
0
P
(t)
b
dc b

Die Lsung des linearisierten Lotka-Volterra Modells

Aus der Vorlesung Lineare Dynamische Systeme von Prof. Nagel ([Nag12]) ist bekannt, dass die Lsung eines linearen Systems durch die Matrix-Exponentialfunktion
dargestellt werden kann. Genaueres dazu ist in Appendix B zu finden. Die Berechnung
der Matrix-Exponentialfunktion fr diagonalisierbare Matrizen ist besonders einfach.
Es wird deswegen mit der Berechnung der Eigenwerte in den beiden Gleichgewichtspunkten des linearisierten Lotka-Volterra Modells gestartet, um die Diagonalisierbarkeit der Matrix zu bestimmen.
1. Fr G1 : Dazu ist

a
A=
0

bereits in Diagonalform mit den Eigenwerten


1 = a,

19

2 = d.

2. Fr G2 : Fr

dc b

A=
a
c
0
b

ist das charakteristische Polynom




d a
pA () = 2 b c = 2 da.
c b
Dann ergibt sich fr


d a
!
2 b c = 0
c b
Es gilt also

1 = i ad,

= i ad.

2 = i ad.

Beide Matrizen sind somit diagonalisierbar.


Der folgende Satz vereinfacht die Lsung eines linearen Systems mit diagonalisierbarer Matrix7 . In Appendix C wird ein berblick ber weitere Lsungsmglichkeiten
zweidimensionaler Systeme gegeben und auerdem generell mgliche Eigenwerte eines
solchen Systems betrachtet.
Satz 5.3.4.1 (A diagonalisierbar).
Sei ein zweidimensionales lineares Differenzialgleichungssystem wie in Definition C.0.1
gegeben und A sei diagonalisierbar. Dann ist die Lsung dieses Differenzialgleichungssystems gegeben als
z(t) = c1 v1 e1 t + c2 v2 e2 t .
Dabei sind v1 , v2 Eigenvektoren zu Eigenwerten 1 , 2 und c1 , c2 allgemeine Konstanten, welche durch die Anfangswerte des Systems festgelegt werden.
Beweis. Da A L(X) diagonalisierbar ist, existiert ein S, S 1 L(X), wobei L(X)
die Banachalgebra der Operatoren auf dem Vektorraum X ist (siehe [Nag12]), sodass
S 1 AS = D gilt, mit
D=

!
,

S = (v1 , v2 ).

Hierbei sind v1 , v2 Eigenvektoren zu den Eigenwerten 1 , 2 .


Die Lsung des Differenzialgleichungssystems ist also
z(t) = etA b = SetD S 1 b.
Fasst man S 1 b = (c1 , c2 )T zusammen und multipliziert diese Gleichung aus, erhlt
man die Lsung.

7 Entwickelt

anhand Vorlage in [Sto08], S. 7ff.

20

Es folgt die Lsung fr das linearisierte Lotka-Volterra Modell in der Nhe der Gleichgewichtspunkte.
1. Fr G1 :
Berechnung der Eigenvektoren:
Fr 1 erhalten wir
!

v1 = a v1

a v11

= a v11

d v12

= a v12


1
v1 = .
0

Fr 2 erhalten
!

v2 = d v2

a v21

= d v21

d v22

= d v22


0
v2 = .
2

Whle der Einfachheit halber 1 = 1 und 2 = 1.


Die Lsung ist dann

N (t)
= c1

P (t)

!
1
0

ta

+ c2

etd .

In der folgenden Grafik wurde fr Beispielwerte a = 2, b = 1.2, c = 1, d = 0.9


und Anfangswert A0 = (1, 1)T die Lsung von N (t) sowie P (t) gegen die Zeit
aufgetragen.

Rauber
Beute

Populationsgroe

a =2.0, b =1.2, c =1.0, d =0.9


































Zeit
Abbildung 4: Linearisierte Lsung um G1 , Populationsgren gegen
die Zeit aufgetragen

21

2. Fr G2 :
Berechnung der Eigenvektoren:

Fr 1 gilt

dc b

a
bc

dc b

a
bc

a
bc

v1 i ad v1 = 0

i ad
a
bc

i ad

i ad I

d
b
c

v1 = i

v1 = 0

!
dc b

i ad

v11

dc b

!
=0

v12

i ad + i ad

v1 = i ad v1

!
dc b

v11

v12

=0

ad

1
wobei v12 = 1 gewhlt wurde.
Fr 2 gilt
!
dc b

0
a
bc

0
!
dc b

0
a
bc

dc b

a
bc

i ad
a
bc

22

v2 = i ad v2

v2 + i ad v2 = 0
!

dc b

i ad

+i ad I

v21
v22

!
v2 = 0

!
=0

i ad

v2 =

i ad + i ad

dc b

!
=0

v22

b
i ad
c

v21

1
wobei v22 = 1 gewhlt wurde.
Die Lsung ist dann
d

d
b
c
cb

N (t)

= c01 i ad .ei adt + c02 i ad ei adt .


P (t)
1
1
In folgender Grafik wurde fr Beispielwerte a = 2, b = 1.2, c = 1, d = 0.9 und
Anfangswert A0 = (1, 1)T die Lsung von N (t) sowie P (t) gegen die Zeit aufgetragen.

Rauber
Beute

a =2.0, b =1.2, c =1.0, d =0.9



Populationsgroe























Zeit
Abbildung 5: Linearisierte Lsung um G2 , Populationsgren gegen
die Zeit aufgetragen
In Abbildung 5 sind Oszillationen zu beobachten. Hierbei ist noch unklar, ob sie
periodisch sind. Dies soll in der folgenden Eigenwertanalyse beantwortet werden.

23

5.3.5

Eigenwertanalyse

Unter Verwendung der Lsung aus oberem Kapitel und der berechneten Eigenwerte
wird das Verhalten des linearisierten Lotka-Volterra Modells fr t bestimmt.
Phasenportrait von G1 : Die Lsung ist

N (t)

= c1
P (t)

!
e

ta

+ c2

!
0

etd .

Betrachtung der Grenzwerte ergibt

!
N (t)
1
= lim c1
lim
eta + c2
|{z}
t
t
0
P (t)

|
{z
} |

!
N (t)
1
= lim c1
lim
eta + c2
|{z}
t
t
0
P (t)
0
|
{z
} |

!
0

td

e|{z} =

{z

!
0
1

td

,
e|{z} =

{z
}
0

falls c1 6= 0 6= c2 . Einen solchen Gleichgewichtspunkt nennt man Sattelpunkt.

(b) Allgemeiner Sattelpunkt

(a) fr rein positive Lsungen

Abbildung 6: Grafische Darstellung eines Sattelpunkts


Die Abbildung 7 zeigt den Kurvenverlauf der Lsung des linearisierten LotkaVolterra Modells um G1 mit 3 unterschiedlichen Anfangswerten und Beispielparameter
a = 2, b = 1.2, c = 1, d = 0.9 in der Phasenebene.

24

a =2.0, b =1.2, c =1.0, d =0.9




b =(1,1)
b =(5,2)
b =(2,2)




Rauber





























         

Beute
Abbildung 7: Kurvenverlauf fr Lsungen des linearisierten
Lotka-Volterra Modells nahe G1 in der Phasenebene
Fr die modellierten Populationen bedeutet dies, dass, falls beide Populationen
nahe dem Aussterbepunkt sind, die Ruberpopulation gegen 0 strebt und die Beutepopulation exponentiell gegen unendlich wchst.
Da dies die Grundannahmen an das Modell widerspiegelt, konnte hierdurch kein Zugewinn erlangt werden. Viel interessanter dahingegen ist der Gleichgewichtspunkt G2 .
Phasenportrait von G2 : Die Lsung ist

d
d
b
c
cb

N (t)
= c01 i ad .ei adt + c02 i ad ei adt .

P (t)
1
1

Die Grenzwertbetrachtung

d
d
b
c
cb

N (t)
= lim c01 i ad ei adt + c02 i ad ei adt
lim
t
t
P (t)
1
1
ergibt keinen spezifischen Wert, noch eine Tendenz in Richtung .
Die Eigenwerte sind imaginr und die entsprechende Exponentialfunktion ist
periodisch, in diesem Fall 2
periodisch. Dies bedeutet, dass auch die Lsung
ad
2 periodisch
ad

sein muss. Auf der Phasenebene ist dieses Verhalten reprsentiert

durch kreisfrmige Bewegungen um den Gleichgewichtspunkt. Einen solchen Punkt


nennt man Wirbelpunkt.
Abbildung 23 zeigt den Verlauf der Lsung des linearisierten Lotka-Volterra

25

Modells um G2 mit 3 unterschiedlichen Anfangswerten und Beispielparameter


a = 2, b = 1.2, c = 1, d = 0.9 in der Phasenebene.

b =(1,1)
b =(5,2)
b =(2,2)
GGPunkt

a =2.0, b =1.2, c =1.0, d =0.9





Rauber

























Beute
Abbildung 8: Kurvenverlauf der linearisierten Lsung um G2 in der
Phasenebene
Aus Abbildung 23 knnen zwei wichtige Aspekte heraus gelesen werden.
Sind die Anfangswerte zu weit vom Gleichgewichtspunkt G2 entfernt, kann die
Lsung auch negative Werte annehmen.
Grund:
Die Linearisierung in G2 kennt G1 als Gleichgewichtspunkt nicht mehr. Fr
Anfangswerte b = (2, 2)T und b = (5, 2)T , wenn Populationsgren (insbesondere der Ruberpopulation) zu nah an die 0 kommen, bernimmt im Verlauf
des echten Lotka-Volterra Modells die in G1 linearisierte Lotka-Volterra-Lsung
und geht bei gengend groer Beutepopulation wieder in den Verlauf der in G2
linearisierten Lsung ber.
Der Kurvenverlauf der linearisierten Lsung in der Phasenebene ist ein geschlossener Kreis.
Interpretation:
Die Populationen befinden sich in periodischer Fluktuation ohne zu einem Gleichgewichtspunkt hin zu tendieren.
Aber genau in der zweiten Beobachtung liegt der Schwachpunkt von Wirbelpunkten,

26

welcher sie nahezu nutzlos macht: Bereits kleine Abweichungen von dem idealen Modellverlauf knnen die Eigenwerte lngs der reellen Achse verschieben. Dies kann stark
unterschiedliche Auswirkungen haben. In folgender Abschtzung wird eine Fallunterscheidung fr mgliches Verhalten fr t durchgefhrt.
Gegeben sei
eRe()t+Im()t = eRe()t eIm()t .
Dabei gilt
N R, sodass eIm()t = eIm()(t+N )

und
i = 1, 2 tpi , tmi [t, t + N ] : Re(eIm()tpi ) > 0 und Re(eIm()tmi ) < 0,
tp , tm [t, t + N ] : Re(x(tp )) > 0 und Re(x(tm )) < 0.
Bei der Betrachtung des Grenzwertes ergibt sich dann
Re() > 0
Im()t
lim eRe()t
) = ,
{z } |Re(e{z
}

t |

[1,1]

Re() < 0
Im()t
lim eRe()t
) = 0.
{z } Re(e
|
{z
}

t |

[1,1]

Diese Form eines Kurvenverlaufs in der Phasenebene nennt man dann einen Strudelpunkt.
Abbildung 9: Grafische Darstellung eines Strudelpunktes

(b) Asymptotisch stabiler


Strudelpunkt

(a) instabiler Strudelpunkt

27

5.3.6

Stabil, asymptotisch stabil, instabil

Alle oben angefhrten Formen von Lsungskurven linearer Differenzialgleichungssysteme in der Phasenebene kann man in 3 allgemeine Kategorien einteilen.
Definition 5.3.6.1 (Stabilittsbegriffe von Gleichgewichtspunkten).
Sei x
ein Gleichgewichtspunkt des autonomen gewhnlichen Differentialgleichungssystems erster Ordnung und definiert wie in Definition 5.3.1.1. Man kann fr das Verhalten der Lsung in der Nhe von x
(t) verschiedene Eigenschaften festhalten. Hierbei
sei x0 (t) eine Lsung des Differenzialgleichungssystems auf dem Intervall I R in
benachbarter Umgebung von x
(t).
Man nennt x
(t) I
stabil auf I, falls
t I > 0 > 0, sodass: x0 (t) : kx0 (t0 ) x
(t)k < kx0 (t) x
(t)k < .
In Worten: Alle Lsungen des Differenzialgleichungssystems, deren Anfangswerte
im -Umkreis von x
(t) liegen, bleiben in einem -Umkreis von x
(t).
attraktiv auf I, falls > 0 mit: Fr jede Differenzialgleichung x0 (t) mit
kx0 (t) x
k <

t > t0

existiert eine Lsung, fr die gilt


lim x0 (t) = x
(t).

asymptotisch stabil, falls x


(t) stabil und attraktiv ist.
instabil, falls x
(t) nicht stabil ist.
Folgerung 5.3.6.2.
Der Sattelpunkt ist also immer instabil.
Der Wirbelpunkt ist stabil, aber nicht asymptotisch stabil.
Der Strudelpunkt kann instabil oder asymptotisch stabil sein.
Fr Re(1,2 ) > 0 ist er instabil,
fr Re(1,2 ) < 0 ist er asymptotisch stabil.
Fr eine ausfhrliche Einfhrung in die qualitative Analyse von Differenzialgleichungen
und bersicht der Phasenportraits fr unterschiedliche Eigenschaften der Eigenwerte
siehe [Sto08] und [Pan10], Chapter 4, S. 51 ff.
Nun haben wir das Verhalten der linearisierten Lsung des Lotka-Volterra Modells
betrachtet. Es stellt sich nun die Frage, inwiefern diese Lsung tatschlich auf das
nichtlineare System bertragbar ist. Hierzu hilft das Prinzip der linearisierten Stabilitt.

28

Satz 5.3.6.3 (Prinzip der linearisierten Stabilitt).


Sei A die Linearisierung des Systems F von nichtlinearen Differenzialgleichungen in
einem Gleichgewichtspunkt x
des Systems F.
Sei (A) := { C : (A I) = 0} die Menge aller Eigenwerte von A. Dann gilt fr
alle (A(
x))
Re() < 0

(A)

= x
ist asymptotisch stabil,

(A) s.d. Re() > 0

= x
ist instabil.

Beweis. Siehe [Wer08] S. 38 ff Satz 3.7.


Es kann also geschlossen werden, dass G1 auch fr das echte Lotka-Volterra Modell ein
Sattelpunkt ist. Fr G2 ist bereits die Linearisierung mit ihrer minimalen Abweichung
in direkter Nhe zum Gleichgewichtspunkt problematisch. Die Aussage aus der
Linearisierung kann deswegen nicht auf das nichtlineare Problem bertragen werden.
Zu Frage 3: Durch die grafische, wie auch mathematische Analyse wurden mehrere
Hinweise auf ein mgliches periodisches Verhalten der Lsungen um den Gleichgewichtspunkt G2 ermittelt. Die folgende Analyse hat das Ziel eine mglichst exakte
Skizze der Lsungen zu zeichnen und die Lsung auf Periodizitt zu untersuchen.

5.3.7

Skizzieren der Lsung des nichtlinearen Lotka-Volterra Modells

Da die Ableitung von N (t) sowie P (t) durch ihre Differenzialgleichungen gegeben sind,
knnen wir den Richtungsvektor
dP
dt
dN
dt

P (t)(cN (t) d)
dP
:=
N (t)(a bP (t))
dN

fr die Phasenebene in jedem Punkt (Ni , Pi ) berechnen.


Dies ist nicht nur ein Richtungsvektor in einzelnen Punkten sondern die Ableitung eines
Systems von autonomen Differenzialgleichungen reduziert auf die Phasenebene. Durch
Integration knnen wir den Verlauf der Lsungskurve in der Phasenebene berechnen.
Es gilt also

dP
dN

P (t)(cN (t)d)
N (t)(abP (t))

abP (t) dP
P (t) dN

cN (t)d
N (t)

abP (t)
P (t)

1
P (t)

Z
dP

b dP

a ln(P (t)) bP (t)

cN (t)d
N (t)

| P 1(t) (a bP (t)),
Z
| . . . dN

dN

c d N1(t) dP

= cN (t) d ln(N (t)) + c1 ,

wobei c1 durch den Anfangswert des Lotka-Volterra Modells festgelegt wird.

29

Folgerung 5.3.7.1.
Sei das Lotka-Volterra Modell mit Anfangswert gegeben und die Konstante c1 in der
Lsung durch den Anfangswert bestimmt, dann kann der Lsungsverlauf in der Phasenebene dargestellt werden durch die Gleichung
a ln(P (t)) bP (t) cN (t) + d ln(N (t)) = c1 .
Diese Gleichung ist durch die dreidimensionale Funktion
E(N, P ) = a ln(P (t)) bP (t) cN (t) + d ln(N (t)) + c2
beschrieben, wobei c2 = c1 . In Abbildung 10 ist ein Graph dieser Funktion mit den
Parametern a = 5, b = 1, c = 0.3, d = 4 und Anfangswert A0 = (3, 3)T , welches zu
c1 = 6 fhrt, zu sehen.

a =5.0, b =1.0, c =0.3, d =4.0






E(N,P)















Rauber



















Beute

Abbildung 10: Dreidimensionaler Graph der Funktion E(N, P )


Fr eine eindeutige Vorstellung dieser dreidimensionalen Funktion folgt eine Reihe von
4 Bildern, welche dieselbe Funktion aus 4 verschiedenen Blickwinkeln zeigt. Der Graph
wurde im Uhrzeigersinn jeweils um 90 Grad gedreht.

30

a =5.0, b =1.0, c =0.3, d =4.0

a =5.0, b =1.0, c =0.3, d =4.0
































Rauber






















Beute

Beute





















Rauber

(b) Drehung um 90 Grad im


Uhrzeigersinn

(a) Startblickwinkel

a =5.0, b =1.0, c =0.3, d =4.0

a =5.0, b =1.0, c =0.3, d =4.0













E(N,P)













E(N,P)

E(N,P)





E(N,P)





















Rauber



















Beute




Beute





















Rauber

(b) Drehung um 270 Grad im


Uhrzeigersinn

(a) Drehung um 180 Grad

Abbildung 12: 360 Grad Betrachtung der dreidimensionalen Funktion aus 4 Blinkwinkeln im Abstand von 90 Grad
Die Konstante c2 wird durch den Anfangswert bestimmt. Sei b = (b1 , b2 ) der Anfangswert fr ein Lotka-Volterra Modell, dann gilt
E(b1 , b2 ) = 0 a ln(b2 ) bb2 cb1 + d ln(b2 ) + c2 = 0
c2 = a ln(b2 ) + b b2 + cb1 d ln(b2 ).
Der Anfangswert b verschiebt somit die Funktion E(N, P ) entlang der z-Achse. Der
Schnittpunkt der E(N, P )-Funktion mit der N-P-Ebene ergibt dann den gesuchten
Kurvenverlauf fr gegebenen Anfangswert b. Abbildung 13 zeigt die Trajektorien fr
mehrere Werte von c1 mit Parametern a = 5, b = 1, c = 0.3, d = 4. Fr den Anfangswert A0 = (3, 3)T ergibt sich c2 = 5, 9875 6, welcher in Abbildung 13 als die
uere Trajektorielinie dargestellt ist. In folgender Grafik wurden die Trajektorielinien
und Fllungen mithilfe der Funktion contour/contourf in python (siehe [Pyta]) erstellt.

31

a =5.0, b =1.0, c =0.3, d =4.0







Rauber











:HUWGHU$OOJHPHLQHQ.RQVWDQWH



                   



Beute

Abbildung 13: Trajektorien des Lotka-Volterra-Systems fr


verschiedene Werte von c1 in der Phasenebene
5.3.8

Schlussfolgerung

Es folgt eine Zusammenfassung der Ergebnisse der qualitativen Analyse der Gleichgewichtspunkte G1 und G2 .
G1:
Es konnte gezeigt werden, dass der Gleichgewichtspunkt G1 ein Sattelpunkt ist
und sein Verhalten fr t bestimmt werden.
G2:
Fr G2 hat die Linearisierung nicht ausgereicht um eine eindeutige Aussage ber
das Verhalten der Populationsgren zu machen. Um dies zu erreichen, musste
eine weitere Methode zur Analyse genutzt werden. Durch das Bilden des Quotienten der 2 Differenzialgleichungen

dP
dt

(t) und

dN
dt (t)

wurde die nderungsrate in

der Phasenebene, sowie, durch Integration, eine dreidimensionale Funktion berechnet, deren Schnittebene mit der N-P-Ebene das Phasenportrait fr G2 ergab.
Somit konnten auch alle 3 Fragen fr G2 beantwortet und ein Phasenportrait fr
das Verhalten des Lotka-Volterra Modells angefertigt werden.

32

5.4

Schwachpunkte des Lotka-Volterra Modells

Das Lotka Volterra Modell hat von Anfang an zwei Probleme:


1. Die Modellannahme von exponentiellem Wachstum der BeutePopulation ist unrealistisch.
Natrliche Populationen haben immer ein beschrnktes Wachstum aufgrund von
limitierten Habitateigenschaften, wie Nahrung, Wasser und einem passenden Unterschlupf (siehe [GY]). Die Annahme des exponentiellen Wachstums der Beutepopulation ist daher ungeeignet zur Modellierung natrlicher Populationen.
Dazu im Zusammenhang stehend ist, dass die Futter-Aufnahmekapazitt
der Ruber im Lotka-Volterra Modell nicht beschrnkt ist. Das Modell
basiert auf der Annahme, dass jedes gestorbene Beuteindividuum vollstndig
von den Rubern zum Wachstum der eigenen Population genutzt werden kann,
selbst dann, wenn pro Ruber-Individuum ein vielfaches seiner natrlichen FressKapazitt aufgenommen werden msste.
2. Die Populationsgren werden als kontinuierliche Zahlen modelliert.
Laut Modell existieren Populationsgren von z.B. 1,2 Ruberindividuen. Dies
hat zwei schwerwiegende Nachteile
Die modellierten Populationen bleiben nicht auf einer Trajektorie.
Im Kapitel ber die Lsung des linearisierten Lotka-Volterra Modells wurde auf die Instabilitt von Wirbelpunkten eingegangen. Im Fall des echten
Lotka-Volterra Modells ist diese Kritik genauso zutreffend. Da das zu modellierende Problem aber diskret ist und das Modell kontinuierlich, ergeben
sich automatisch kleinere bis grere Abweichungen von den errechneten
Trajektorien. Die Populationsdynamik springt also auf eine andere, nahe
gelegene Trajektorie. Wenn dies in der Nhe einer Achse passiert, kann die
neue Trajektorie weit von der ursprnglichen Trajektorie entfernte Populationsgren haben. Vergleiche die Trajektorien fr c2 = 6 und c02 = 6 in
Abbildung 13. Diese sind nahe der Achsen dicht genug fr einen Sprung,
sind aber im sonstigen Verlauf stark unterschiedlich. Dies macht eine przise Modellierung unmglich und kann zu Fehlern in der Interpretation von
Datenpunkten fhren.
Die Modell-Populationen nehmen Werte von bis zu 0,001 Individuen an und erholen sich dann wieder.
Laut Modell bewegen sich die Populationsgren periodisch um Gleichgewichtspunkt G2 mit sehr starker Neigung zu den Achsen. Insbesondere groe
Populationen von Rubern und Beute werden zu bestimmten Zeitpunkten
besonders klein (< 1). Im Anschluss erholen sich die Populationen wieder. Das ist bei natrlichen Populationen nicht mglich, weshalb das Lotka
Volterra-Modell zur Vorhersage von Aussterbewahrscheinlichkeiten ungeeignet ist.

33

Ein weiterer Schwachpunkt ist, dass nur kleine Populationen keinem starken Zug in Richtung der Achsen ausgesetzt sind und nie den Zahlenbereich
unterhalb der 2 erreichen. Laut Modell sind sie absolut sicher vor Aussterbegefahren, wohingegen groe Populationen immer eine Populationsgre
unterhalb der 2 erreichen. Aus biologischen Studien (siehe [Thi12], Kapitel 2-3, einen guten berblick bietet die Zusammenfassung auf S. 49) ist
aber bekannt, dass gerade kleine Populationsgren einer besonders starken Extinktionsgefahr ausgesetzt sind und groe Populationen besonders
stabil und langlebig sind.
Der Grund liegt hierbei in einer strkeren Anflligkeit gegenber demografischem Rauschen, Umweltfaktoren und einem kleineren Genpool von
kleinen Populationen. Ersteres sind stochastische Prozesse innerhalb von
Populationen, welche Geburtenraten, Sterberaten und Geschlechterverteilung beeinflussen, welche eine wichtige Rolle in der Fertilitt der nchsten
Generation spielen (so hat eine Population von 5 Individuen mit nur einem
Weibchen schlechte berlebensschancen als eine Population mit 5 Individuen und 2-3 Weibchen). Umweltfaktoren sind stochastische Schwankungen
in der Umwelt und knnen eine Population berraschend und stark reduzieren. Die Gre und Qualitt des Genpools ist der evolutionstreibende
Faktor der Anpassungsfhigkeit einer Population an eine sich stndig ndernde Umwelt. Je grer der Genpool, desto besser die Anpassungsfhigket
der Population.8
All diese Faktoren sind im Lotka-Volterra Modell nicht bercksichtigt,
aber starke Prdiktoren fr die Extinktionsgefahr einer Population (siehe [Thi12], Kapitel 2-3, einen guten berblick bietet die Zusammenfassung
auf S. 49).
Als Schlussfolgerung kann formuliert werden, dass das Lotka-Voterra Modell ein Start
in Richtung der Modellierung von Ruber-Beute-Beziehungen ist, aber es noch viel
Raum fr Verbesserungen gibt.
Dennoch gibt es Situationen, in denen das Lotka-Volterra Modell eine gute Approximation liefert.
Es kann eine gute Approximation fr stabile Ruber-Beute-Beziehungen sein, wenn
beide Populationen viele Individuen haben und der Gleichgewichtspunkt des Modells
weit vom Nullpunkt entfernt liegt. Findet man also Ruber-Beute-Beziehungen, die
diese Voraussetzungen erfllen, ist das Lotka-Volterra Modell eine gute und einfache
Mglichkeit, diese Populationen zu modellieren.

Verbesserungsmglichkeiten: Eine offensichtliche Verbesserungsmglichkeit besteht darin, die Beutepopulation mit logistischem Wachstum zu versehen. Dies wrde
nach wie vor bei kleinen Beutepopulationen zu gewnschtem starkem Wachstum fh8 Dieser Abschnitt ist meine Zusammenfassung zum Thema aus [Thi12] Kapitel 2-3 Aussterben
von Arten, S. 32-53

34

ren, aber bei grer werdender Beute-Anzahl abnehmen und stagnieren (siehe [Log]).
Ein weiterer bereits angesprochener Schwachpunkt im Modell ist die AufnahmeKapazitt von Fressen der Ruber-Individuen. Diese in das Modell zu integrieren
knnte die Sterberate der Beuteindividuen bei groen Beutepopulationen und kleinen Ruberpopulationen reduzieren und somit zu einem weniger starken Abfall der
Beutepopulation und weniger starken Wachstum der Ruberpopulation fhren.
Dies wren Startpunkte, um das Modell dahingehend zu verbessern, die Anziehungskraft der Achsen auf die Populationsgren zu verringern.

35

Modellerweiterung Logistisches Wachstum der

Beutepopulation
Wie in Kapitel 5.4 hervorgehoben, sollten als ersten Schritt in Richtung eines akkurateren Modells die Modellannahmen des Lotka-Volterra Modells verbessert werden.
In diesem Kapitel soll eine der vielen Mglichkeiten hierfr betrachtet werden: Das
Hinzufgen einer oberen Schranke fr die Beutepopulation. Das Ziel ist, die
Anpassung des Modells an die Beutepopulation zu optimieren.
Ein gutes Modell fr eine Population, welche nicht bejagt wird, ist das logistische Modell (siehe [Log], Application). Es integriert eine obere Schranke, welche die Wachstumsschranke in natrlichen Populationen modelliert, aber bei kleinen Populationen
nahezu exponenzielles Wachstum zulsst. In natrlichen Populationen entsteht eine
solche Schranke durch begrenzt vorhandene Nahrung und Platz (siehe [GY]). Ist die
Population allerdings klein, herrscht kaum Konkurrenz um Nahrung und Platz und
die Population wchst quasi-exponentiell.
In diesem Kapitel wird das logistische Modell in die Differenzialgleichung der BeuteGleichung des Lotka-Volterra Modells integriert und, wann immer mglich, mit denselben Methoden analysiert.

6.1
6.1.1

Modellierung
Modellannahmen

Sei wieder P die Anzahl der Individuen einer Population von Rubern und N die
Anzahl der Individuen von Beutetieren der Ruberpopoulation P . Wir bernehmen
zu groen Teilen die Parameter des Lotka-Volterra Modells. Sollten die Parameter
abweichen, wird im Folgenden darauf hingewiesen. Es wird mit den Modellannahmen
begonnen:
1. Das Wachstum der Beutepopulation hat in Abwesenheit des Rubers logistisches
Verhalten.
2. In Anwesenheit der Ruberpopulation wird die Beutepopulation durch die Ruber proportional zur Interaktionshufigkeit von Ruber- und Beutepopulation
reduziert.
3. Die Ruberpopulation stirbt in Abwesenheit der Beutepopulation mit exponentieller Sterberate aus.
4. In Anwesenheit der Beutepopulation wchst die Ruberpopulation proportional
zur Interaktionshufigkeit von Ruber- und Beutepopulation.
Hieraus ergeben sich die folgenden vier Gleichungen
1. Das logistische Modell fr eine nicht bejagte Population hat die Form


dN
aN (t)2
N (t)
(t) = a N (t)
= aN (t) 1
,
dt
K
K

36

t 0,

wobei a > 0 der Wachstumsfaktor und K > 0 die Kapazitt der Beutepopulation
ist. Die Kapazitt einer Population ist die maximale Zahl von Individuen einer
Population, die in dieser Umwelt berleben knnen.
Der Wachstumsfaktor unterscheidet sich von der Wachstumsrate a aus dem
Lotka-Volterra Modell. Er enthlt zustzlich zur Wachstumsrate aus dem LotkaVolterra Modell auch die natrliche Sterberate der Population und hat somit
Einfluss auf die Gesamtsterberate. Der Parameter a ist in den zwei Modellen
also unterschiedlich. Auf die Gesamtsterberate wird in 2 eingegangen. Fr das
logistische Wachstumsverhalten der Beutepopulation gilt:
dN
dt (t) 0.
dN
dt (t) aN (t),

Fr N (t) K =
Fr N (t) 0 =

und somit exponentielles Wachstum fr kleine Beutepopulationen.


2. Der direkte Einfluss der Ruberpopulation auf die Beutepopulation bleibt gleich
mit

dN
(t) = b N (t)P (t).
dt

Mchte man die Gesamtsterberate der Beutepopulation, muss zu oberer Gleichung noch die natrliche Sterberate der Beute hinzugefgt werden und man
erhlt
dN
aN (t)2
(t) =
bN (t)P (t) = N (t)
dt
K


aN (t)
+ bP (t) ,
K

t 0.

3. Die Sterberate der Ruberpopulation hat sich nicht verndert. Es gilt


dP
(t) = d P (t),
dt

t 0.

4. Die Wachstumsrate der Ruberpopulation hat sich ebenfalls nicht verndert. Es


gilt
dP
(t) = c P (t)N (t) dP (t),
dt

t 0.

Fr die bejagte Beutepopulation gilt also mit Wachstumsfaktor a > 0 und Sterberate
aus der Bejagung b > 0 die Gleichung
dN
dt (t)



N (t)
= a N (t) 1
bN (t)P (t),
K
 


N (t)
= N (t) a 1
bP (t) ,
K

37

t 0.

6.1.2

Das Differenzialgleichungssystem

Folgerung 6.1.2.1.
Das Differenzialgleichungssystem fr die logistische Ruber-Beute Beziehung hat die
Form

dN
(t)
dt

 


N (t)
= N (t) a 1
bP (t) ,
K

dP
(t)
dt

= P (t)(cN (t) d).

Fr die Vektorschreibweise setze




 
N (t)
bP (t) ,
fN (N (t), P (t)) = N (t) a 1
K
fP (N (t), P (t)) = P (t)(cN (t) d),
sodass fr x = (N (t), P (t))T die Vektorschreibweise

fN (x(t))
dx

(t) =
dt
f (x(t))

(1log x)

gilt.
Bemerkung 6.1.2.2.
Das Differenzialgleichungssystem fr die logistische Ruber-Beute Beziehung ist, wie
auch die Lotka-Volterra Gleichung, ein System von autonomen gewhnlichen Differenzialgleichungen.

38

6.2

Grafische Analyse des logistischen Ruber-Beute Modells

6.2.1

Gleichgewichtslsungen

Theorem 6.2.1.1.
Die Gleichgewichtslsungen zum logistischen Ruber-Beute Modell aus Folgerung
6.1.2.1 sind

G1 (t) =

N (t) = 0

G2 (t) =

P (t) = 0

N (t)

P (t)

(
G3 (t) =

N (t)

P (t)

d
c

! ,

d
c

Dabei ist zu beachten, dass die Geradengleichungen der einzelnen Gleichgewichtslsungen fr G2 (t) durch

G2allg (t) =

N (t)

d
c

P (t)



a
N (t)
1
b
K

gegeben sind. Hierbei ist


1. G1 der Schnittpunkt der Nulllsungen,
und P (t) =

a
b


1

N (t)
K

3. G3 der Schnittpunkt der 2 Geraden N (t) = 0 und P (t) =

a
b


1

N (t)
K

2. G2 der Schnittpunkt der 2 Geraden N (t) =

d
c

Lsung G1 (t) ist klar.

Beweis.

Aus N (t) = 0 folgt direkt P (t) = 0 und wird somit zu G1 (t).

Fr G2 (t) untersuche den Fall P (t) 6= 0 und N (t) 6= 0. Dann ist


 


N (t)
0 = N (t) a 1
bP (t) ,
K
0 = P (t)(cN (t) d).
Somit
0 = cN (t) d


N (t)
0=a 1
K


bP (t)

d = cN (t)



N (t)
a 1
= bP (t)
K

39

d
=: N (t),
c


a
N (t)
1
=: P (t).
b
K

Setze zum Schluss N (t) =

d
c

in der Gleichgewichtsgerade von P (t), da der

Gleichgewichtspunkt des Systems der Schnittpunkt der beiden GleichgewichtsGeradengleichungen von P (t) und N (t) ist.

Fr G3 zeige den Fall P (t) = 0 und N (t) 6= 0. Es ist


 


dN
N (t)
(t) = N (t) a 1
b0 ,
dt
K
 

N (t)
= N (t) a 1
,
K

0=

=1

N (t)
= 1,
K

N (t) = K.

N (t)
,
K

da N (t) 6= 0 6= a,

Und somit gilt fr G3 P (t) = 0 und N (t) = K.

Bemerkung 6.2.1.2.
In folgender Grafik sind alle 3 Gleichgewichtslsungen als Schnittpunkte ihrer Geraden
grafisch dargestellt. Die Parameter sind a = 10, b = 0.5, c = 0.3, d = 3.8 mit
Kapazitt K = 20.

a =10.0, b =0.5, c =0.3, d =3.8, K =20




d
c



Rauber

P(t) = ab 1 NcK(t)
P(t) =0
N(t) =0
GGPunkt



G2


G1




G3




Beute





Abbildung 14: Grafik der Gleichgewichtspunkte als Schnittpunkte


der jeweiligen Gleichgewichtsgeraden

40

Punkte (0, 20) und ( dc , 0) sind keine Gleichgewichtslsungen. Siehe Beweis von
Theorem 6.2.1.1.
6.2.2

Richtungvektoren von Lsungen mit Anfangswerten auerhalb der


Gleichgewichtslsungen

Als nchsten Schritt soll das Verhalten des Differenzialgleichungssystems fr Punkte


auerhalb der Gleichgewichtspunkte betrachtet werden. Hierfr werden die Differenzialgleichungen wieder einzeln untersucht.

Abschtzung: Da G3 ebenfalls auf den Geraden P1 (t) =

a
b

N (t)
K

und N (t) = 0

liegt, ist keine zustzliche Betrachtung der Gleichgewichtsgeraden von G3 (t) notwendig.
 


dN
N (t)
1.
(t) = N (t) a 1
bP (t)
dt
K


Fr P (t) > ab 1 NK(t) , gilt
 


dN
N (t)
(t) = N (t) a 1
bP (t)
dt
K
 



N (t)
a
N (t)
< N (t) a 1
b
1
,
K
b
K
|
{z
}
=0

also

dN
(t) < 0.
dt

Fr P (t) <

a
b


1

N (t)
K

, gilt

 


N (t)
dN
(t) = N (t) a 1
bP (t)
dt
K
 



N (t)
a
N (t)
> N (t) a 1
b
1
,
K
b
K
|
{z
}
=0

also

2.

dN
(t) > 0.
dt

dP
(t) = P (t)(cN (t) d)
dt
N (t) > dc , gilt
dP
d
(t) = P (t)(cN (t) d) > P (t)(c d) = 0,
dt
c

41

also

dP
(t) > 0.
dt

N (t) < dc , gilt


dP
d
(t) = P (t)(cN (t) d) < P (t)(c d) = 0,
dt
c

also

dP
(t) < 0.
dt

Die folgende Abbildung zeigt diese Abschtzungen. Hierbei hat die Lnge der Pfeile
keine Bedeutung.

d
c

a =10.0, b =0.5, c =0.3, d =3.8, K =20



Rauber

P1 (t) = ab 1 NcK(t)
P(t) =0
N(t) =0
GGPunkt





G2


G1




G3






Beute



Abbildung 15: Richtungspfeile aufgrund Abschtzung in Paragraph Abschtzung im


Kapitel 6.2.2.
Es ist wieder eine kreisfrmige Bewegung um G2 zu vermuten.
Mithilfe der Funktion quiver() in python (siehe [Pytb]) konnte das Richtungsfeld fr
das logistische Ruber-Beute Modell erstellt werden. Zur Betrachtung des Codes mit
dem die Grafiken 16 und 17 erstellt wurden, siehe D.2, Zeilen 202-262 und die Aufrufe
in Zeilen 687-694.
Die folgende Grafik ist das Richtungsfeld fr gegebene Parameter bei einer VektorSkalierung von 0, 025.

42

d
c

a =10.0, b =0.5, c =0.3, d =3.8, K =20



Rauber

P(t) = ab 1 NcK(t)
P(t) =0
N(t) =0
GGPunkt


















Beute

Abbildung 16: 0,025-fache Skalierung der Richtungsvektoren


Das Vektorfeld besttigt unsere Vermutung der kreifrmigen Bewegung der Populationsgren um G2 .
Auffllig ist, dass entlang der Gleichgewichtsgeraden P1 (t) =
d
c

a
b

N (t)
K

fr N (t) >

kaum ein Vektor auszumachen ist.

Dies ist erstmal berraschend, da aus dem Paragraph Abschtzung im Kapitel 6.2.2
klar wurde, dass

dP
dt

(t) > 0 fr N (t) > dc .

Der Grund hierfr liegt in der Skalierung. Diese ist notwendig, da eine 1:1 Darstellung
des Vektors im Punkt N (t) = 20, P (t) = 20 mit dem grten Gradienten
fN (N (t), P (t))

!
=

fP (N (t), P (t)

200

44

nicht sinnvoll ist.


Der Gradient ist am geringsten auf der Gleichgewichtsgeraden P1 (t) =
fr N (t) >

d
c.

a
b

N (t)
K

Es wird hier als Beispiel der Punkt N (t) = 15, P (t) = 5 gewhlt mit

dem Gradienten
fN (N (t), P (t))

!
=

fP (N (t), P (t))

2, 1

Eine Skalierung dieser Gradientenvektoren mit 0, 025 ergibt


!
fN (20, 20)
fP (20, 20)

200
44

43

!
0, 025 =

1, 1

fN (15, 5)
fP (15, 5)

!
0, 025 =

2, 1

0, 025 =

0
0, 0525

!
.

Somit wird der Gradient im Punkt N (t) = 15, P (t) = 5 als 0 dargestellt.
Durch vervierfachen der Skalierung (auf das 0, 1 fache der tatschlichen Lnge) kann
man auch diese Gradienten sichtbar machen, verliert aber die bersichtlichkeit der
Abbildung, siehe nchste Grafik.
d
c

a =10.0, b =0.5, c =0.3, d =3.8, K =20



Rauber

P(t) = ab 1 NcK(t)
P(t) =0
N(t) =0
GGPunkt


















Beute

Abbildung 17: 0,1-fache Skalierung der Richtungsvektoren


Als nchsten Analyseschritt soll, wie auch im Lotka-Volterra Modell, die qualitative
Analyse folgen. Hierbei liegt der Schwerpunkt wieder auf der Stabilitt des Gleichgewichtspunkte.

44

6.3
6.3.1

Qualitative Analyse des logistischen Modells


Stabilitt der Gleichgewichtspunkte

Es soll nun das Verhalten der Lsungskurven mit unterschiedlichen Anfangwerten


auerhalb der Gleichgewichtslsungen analysiert werden. Um Vergleichbarkeit zum
Lotka-Volterra Modell zu schaffen, wird, wenn mglich, auf dieselben Analysetechniken zurck gegriffen und dieselben 3 Fragen als Grundlage genommen.
1. Sind Gleichgewichtslsungen anziehend oder abstoend fr Lsungen mit Anfangswerten in der Nhe der Gleichgewichtslsungen?
2. Wie sieht das Verhalten fr t aus?
3. Knnen Lsungkurven skizziert werden?
Fr die Fragen 1 und 2 wird das Differenzialgleichungssystem fr das logistische
Ruber-Beute Modell wieder mithilfe der Taylorreihe linearisiert und das Verhalten
der linearisierten Modelle mithilfe der Eigenwertanalyse betrachtet. Falls weitere Analyseschritte notwendig sind, werden diese im Anschluss besprochen.
6.3.2

Linearisierung im Gleichgewichtspunkt

Nutze die allgemeine Formel der Linearisierung mithilfe der Taylorreihe aus dem LotkaVolterra Modell.
Mit der Jacobi-Matrix

JN,P =

fN
N (t) (g1 , g2 )

fN
P (t) (g1 , g2 )

fP
N (t) (g1 , g2 )

fP
P (t) (g1 , g2 )

gilt

dN
dt (t)
dP
dt

JN,P

(t)

N (t) g1
P (t) g2

!
.

(L1)

Fr die Berechnung von JN,P wird hier nur auf die partiellen Ableitungen von fN (t)
eingegangen. Die partiellen Ableitungen von fP (t) aus dem Lotka-Volterra Modell
ndern sich nicht und werden daher bernommen.
 




(t)2
N (t) a 1 NK(t) bP (t)
a N (t) NK
bP (t)N (t)
fN
(N (t), P (t)) =
=
N (t)
N (t)
N (t)


2N (t)
=a 1
K

fN
(N (t), P (t)) =
P (t)

 
N (t) a 1


bP (t)

N (t)
K

bP (t)


=

P (t)

= bN (t).

45


aN (t) 1

N (t)
K

bP (t)N (t)

P (t)

Das logistische Modell wird wieder (wie bereits beim Lotka-Volterra Modell) fr den
jeweiligen Gleichgewichtspunkt (hier noch allgemein mit G = (g1 , g2 ) bezeichnet) in
den Ursprung verschoben. Somit gilt

dN
dt (t)
dP
dt (t)

dN
dt (t)

dP
dt

g1

+ JN,P

g2

(t)

JN,P

N (t)

P (t)

a 1
=

2g1
K

N (t)

.
cg1 d
P (t)

g2 b

g1 b

g2 c

(logL2)

Setzen wir G1 (t), G2 (t) und G3 (t) in die Gleichung logL2 ein, erhalten wir die folgenden
Gleichungssysteme.
1. G1 = (0, 0)


a
a(1 0) 0b 0b
N (t)
=

dP
P (t)
0
0c
0c d
dt (t)

dN
dt (t)


2. G2 = ( dc , ab 1

d
c


N (t)
.

P (t)
d
0

dN
dt (t)

2 dc
K

dP
dt (t)

a
b


a 1

a
b

d
c

d
c

N (t)

P (t)
d

dc b
c

d
c

d
2 d
N (t)
a ( c K c ) dc b

=

a
d
P
(t)
c

0
b
K

ad
cK
a
b

N (t)

:= A x(t).
0
P (t)

dc b
d
K

46

3. G3 = (K, 0)

a 1

dN
dt (t)

2K
K

dP
dt (t)

0c

0b

N
(t)

P (t)
cK d
K b

a (1) Kb
N (t)

=
0
cK d
P (t)

a
=
0

N (t)

= B x(t).
cK d
P (t)
Kb

Das linearisierte Differenzialgleichungssystem in der Umgebung von G1 ist genau dasselbe, wie das des Lotka-Volterra Modells. Es ist also nicht ntig, hier die Analyse
ein weiteres mal durchzufhren. Fr eine Skizze und das Verhalten fr t des
linearisierten logistischen Modells um G1 siehe Kapitel 5.3.4 bis 5.3.6.
6.3.3

Die Lsung der Linearisierung um G2 und G3

Fr die Lsung der Linearisierung des logistischen Ruber-Beute Modells um G2 und


G3 wird zuerst auf Diagonalisierbarkeit getestet, anschlieend diagonalisiert, um dann
die zugehrige Lsung analog zum Kapitel 5.3.4 des linearisierten Lotka-Volterra
Modells zu berechnen.

G2 :
Das charakteristische Polynom von A ist
pA () = det(A I) = det


=

=

a
b

ad
cK


+

d
c K

!
dc b
)





ad
a
d
d
+ ()
c
b ,
cK
b
K
c




ad
a
d d
+ +
c
b,
cK
b
K c



ad
d
= +
+ ad 1
.
cK
cK
2

47

Fr pA () = 0 ergibt sich

1,2 =

ad
cK

(ad)2
c2 K 2

4 1 ad 1

d
cK

2
ad
cK

(ad)2
c2 K 2

4adc2 K 2
c2 K 2

4ad2 cK
c2 K 2

2
ad
cK

1
cK

ad(ad 4c2 K 2 + 4dcK)


,
2

p
ad
1

ad(ad 4c2 K 2 + 4dcK).


2cK
2cK

Fr ad + 4dcK < 4c2 K 2 sind die Eigenwerte


1 =

ad
1 p
ad(ad 4c2 K 2 + 4dcK),
+i
2cK
2cK

2 =

ad
1 p
ad(ad 4c2 K 2 + 4dcK).
i
2cK
2cK

Fr ad + 4dcK 4c2 K 2 sind die Eigenwerte


1 =

ad
1 p
+
ad(ad 4c2 K 2 + 4dcK),
2cK
2cK

2 =

ad
1 p

ad(ad 4c2 K 2 + 4dcK).


2cK
2cK

G3 : Da B bereits in oberer Dreicksform ist, wissen wir, dass


1 = a,

2 = cK d.

Es folgt die Berechnung der Eigenvektoren.


G2 :
Fr die Berechnung der Eigenvektoren setze
M :=

ad(ad 4c2 K 2 + 4dcK).

48

Fr 1 gilt

ad
cK
a
b


d

a
b

dc b

d

d
K

d
K

v1

dc b
adiM
2cK

v1 ,

ad+iM
2cK

v1 = 0,

v1 = 0,

v1 = 0,

dc b

ad+iM
2cK

adiM
2cK

ad+iM
2cK

dc b

ad+iM
2cK
a
b

v1 =

2ad+adiM
2cK
a
b

ad
cK

dc b

v11

c
db

!
0

adiM
2cK

v.l.

v12

Der Eigenvektor v1 ist also


1

v1 =

c
ad+iM
2Kbd

!
,

wobei v11 = 1 frei gewhlt wurde.


Fr 2 gilt

ad
cK
a
b

a
b

dc b

d

2ad+ad+iM
2cK


d

ad
cK

a
b

dc b

d
K

d
K


v1 = ad+iM v1
2cK


v1 ad+iM v1 = 0
2cK

ad+iM
2cK

dc b


dc b

ad+iM
2cK
a
b

ad+iM
2cK

ad+iM
2cK

dc b

v1 = 0

v1 = 0

v11
v12

49

!
.

c
db

ad+iM
2cK

v.l.

Der Eigenvektor v1 ist also


v2 =

ad+iM c
2Kbd

wobei v21 = 1 gewhlt wurde.


Die Lsung lautet also
!

x(t) = c1

e(

c
ad+iM
2Kbd

ad+iM
2cK

)t + c

ad+iM c
2Kbd

!
e(

ad+iM
2cK

)t .

Im Fall von reellen Eigenwerten gilt Folgendes:


Fr 1 gilt

ad
cK
a
b

dc b

d
K

a
b


d
K

2ad+adM
2cK
a
b

d
K

ad+M
2cK
a
b

d
K

ad+M
2cK

v1 =

0
dc b

ad
cK

v1 ,

ad+M
2cK

v1 = 0,

v1

dc b
adM
2cK

adM
2cK

dc b

v1 = 0,





dc b


ad+M
2cK

v1 = 0,

v11
v12

!
.

Der Eigenvektor v1 ist also


v1 =
wobei v11 = 1 frei gewhlt wurde.

50

1
ad+M
2Kdb

!
,

c
db

adM
2cK

v.l.

Fr 2 gilt

ad
cK
a
b

dc b

d

a
b

dc b

d

d
K

adM
2cK
a
b

d
K

ad+M
2cK
0

v1

ad+M
2cK

dc b


v2

adM
2cK

v2 = 0

dc b

adM
2cK

2ad+ad+M
2cK
a
b

v1 =

ad
cK

ad+M
2cK

v2 = 0





v2 = 0

dc b

v21
v22

1
c
db

ad+M
2cK

!
.

Der Eigenvektor v1 ist also


v2 =

!
,

ad+M
2Kdb

wobei v21 = 1 frei gewhlt wurde.


Die Lsung lautet also
x(t) = c001

1
ad+M
2Kdb

!
e(

ad+M
2cK

51

)t + c00
2

1
ad+M
2Kdb

!
e(

ad+M
2cK

)t .

0
v.l.
1

G3 :
Fr 1

v1 = a v1
cK d

Kb

a + a

Kb

cK d a

v1 = 0

Kb

v1 = 0.
cK d + a

Und somit gilt


!
1

v1 =

wobei v11 = 1 gewhlt wurde.


Fr 2

Kb

v1 = (cK d) v1
cK d

a cK + d Kb
v1 = 0.

0
0

Und somit gilt


v2 =

1
a+cKd
Kb

wobei v21 = 1 gewhlt wurde.


Die Lsung lautet also
x(t) =

c000
1

!
1
0

52

c000
2

1
a+cKd
Kb

!
ecKd .

6.3.4

Eigenwertanalyse von G2 und G3

Es folgt die Eigenwertanalyse, beginnend mit der Einordnung der Gleichgewichtspunkte G2 und G3 in die 3 Oberkategorien stabil, instabil und asymptotisch stabil
und darauf folgend veranschaulicht durch Auftagen der Lsungen gegen die Zeit. Im
Anschluss wird das Verhalten fr t besprochen und Grafiken der zugehrigen
Lsungskurven in der Phasenebene angefertigt.

Einordnen in die 3 Oberkategorien


Fr G2 :
1. Fall: Es gilt ad + 4dcK < 4c2 K 2 . Es sind
1 =

ad
1 p
+i
ad(ad 4cK(cK d)),
2cK
2cK

2 =

1 p
ad
i
ad(ad 4cK(cK d)),
2cK
2cK

also
ad

Re(1 ) = Re(2 ) < 0 e 2cK t 0,


und somit ist G2 asymptotisch stabil. Aus dem Prinzip der linearisierten Stabilitt 5.3.6.3 ist bekannt, dass dieses Verhalten auf das nichtlineare
logistische Ursprungsmodell bertragen werden kann und somit G2 im logistischen Modell ebenfalls asymptotisch stabil ist.
In folgender Grafik sind die Lsung von N (t) sowie P (t) gegen die Zeit
aufgetragen, wobei die Parameter (a = 10, b = 0.5, c = 0.3, d = 3.8
und Kapazitt K = 20) aus der grafischen Analyse beibehalten wurden mit
Anfangswert A0 = (4, 10)T .

53

Rauber
Beute

a =10.0, b =0.5, c =0.3, d =3.8, K =20




Populationsgroe

























Zeit
Abbildung 18: Linearisierte Lsung um G2 , Populationsgren gegen
die Zeit aufgetragen
Die Anziehung von G2 scheint sehr stark. Es stellt sich die Frage, ob dies
bei anderen Parametern geringer ist. Es wird deswegen a = 2, b = 1.2, c =
0.5, d = 0.9, K = 10 und den Anfangswert b = (5, 2)T ) fr eine andere
mgliche Gestalt der Lsungskurve gewhlt.

Rauber
Beute

a =2.0, b =1.2, c =0.5, d =0.9, K =10




Populationsgroe















Zeit







Abbildung 19: Linearisierte Lsung um G2 , Populationsgren gegen


die Zeit aufgetragen

54

Nun ist eine periodisch asymptotische Bewegung zu beobachten. Dies geht


konform mit den Resultaten der grafischen Analyse, welche eine kreisfrmige
Bewegung um den Gleichgewichtspunkt G2 zeigte mit eventuell asymptotischem Verhalten. Der Gleichgewichtspunkt G2 knnte also ein Strudelpunkt
sein. Siehe die Eigenwertanalyse und Phasenportrait im folgenden Kapitel
6.3.4 fr eindeutige Ergebnisse.
2. Fall: Es gilt ad + 4dcK 4c2 K 2 . Es sind
1 =

ad + M
,
2cK

2 =

ad + M
Re(2 ) < 0.
2cK

Fr die Grenzwertbetrachtung muss eine weitere Fallunterscheidung gemacht werden.


ad > M Re(1 ) < 0 und G2 ist asymptotisch stabil.
ad M Re(1 ) > 0 und G2 ist instabil fr c1 6= 0.
Beide Fll sind mglich, da fr
ad + 4dcK 4c2 K 2 0
entweder
ad > M a2 d2 > a2 d2 4adc2 K 2 + 4ad2 cK cK > d,
|
{z
}
>0

oder
ad M a2 d2 < a2 d2 4adc2 K 2 + 4ad2 cK cK d
|
{z
}
>0

gilt. Es knnen alle Flle abhngig von den Parametern vorkommen.


Fr G3 : Die Eigenwerte sind
1 = a,

2 = cK d.

Und somit gilt


t

Re(1 ) < 0 = eat 0.


Betrachte im folgenden 2 Flle fr 2 :
Fall 1: Fr cK < d gilt
t

Re(2 ) < 0 = e(cKd)t 0


und somit ist G3 stabil.
Die folgende Abbildung zeigt den Verlauf fr Anfangswerte a = 2, b = 1.2, c =
0.7, d = 9.1, K = 10. Die Wahl der Parameter zeigt, wie stark d von den anderen
Parametern abweichen muss, um diese Lsung mglich zu machen. Eine solche

55

Parameterzusammenstellung wird bei der Betrachtung einer natrlichen Population nur dann vorkommen, wenn die Ruberpopulation aufgrund verschieden
mglicher Faktoren aussterben wird.

a =2.0, b =1.2, c =0.7, d =9.1, K =10



Rauber
Beute

Populationsgroe























Zeit
Abbildung 20: Linearisierte Lsung um G2 , Populationsgren gegen
die Zeit aufgetragen
Fall 2: Fr cK d gilt
t

Re(2 ) 0 = e(cKd)t
und fr c2 6= 0 ist G3 instabil.
Zusammenfassung: Im Fall von reellen Eigenwerten der Jacobi-Matrix von G2
und in der allgemeinen Eigenwertbetrachtung von G3 muss jeweils die selbe Fallunterscheidung
cK > d , cK < d
oder
cK = d
durchgefhrt werden. Zusammenfassend gilt
1. cK > d: G2 ist asymptotisch stabil und G3 ist instabil,
2. cK < d: G2 ist instabil und G3 ist stabil.
3. cK = d: G2 und G3 sind instabil

56

Im Fall der komplexen Eigenwerte der Jacobi-Matrix von G2 ist klar: G2 ist immer
stabil. Bringt dies eine Begrenzung fr die Eigenschaften von G3 ?
Es gilt
ad + 4dcK 4c2 K 2 < 0.
Fr cK = d gilt
0 > ad + 4dcK 4c2 K 2 = ad + 4c2 K 2 4c2 K 2 = ad.

zu a > 0, d > 0.

Fr cK < d gilt
0 > ad + 4dcK 4c2 K 2
> acK + 4cKcK 4c2 K 2
= acK.

zu a > 0, c > 0, K > 0.

Fr cK > d gilt
0 > ad + 4dcK 4c2 K 2 < ad.
Nur der letzte Fall widerspricht der Voraussetzung ad + 4dcK < 4c2 K 2 nicht
und ist somit der einzige Fall, der eintreten kann. G3 ist fr cK > d instabil.
Zusammenfassend gilt also: Wenn G2 komplexe Eigenwerte hat, ist G3 instabil.
Kurvenverlauf in der Phasenebene
Fr G2 wird zuerst der Fall mit komplexen Eigenwerten betrachtet.
1. Fall, also 1,2 C. Dann
N R, sodass eiM t = eiM (t+N ) und Re(eiM t ) [1, 1]

und
i = 1, 2 tpi , tmi [t, t + N ] : Re(eiM tpi ) > 0 und Re(eiM tmi ) < 0
= tp , tm [t, t + N ] : Re(x(tp )) > 0 und Re(x(tm )) < 0,
da G2 in den Ursprung verschoben wurde.
G2 ist also ein asymptotisch stabiler Strudelpunkt. In der folgenden
Grafik ist das Verhalten des linearisierten Modells fr verschiedene Anfangswerte dargestellt. Benutzt man dieselben Parameter, wie in der grafischen
Analyse (a = 10, b = 0.5, c = 0.3, d = 3.8 und Kapazitt K = 20), erhlt
man folgende Grafik.

57











Rauber

Rauber

a =10.0, b =0.5, c =0.3, d =3.8, K =20






































b =(5,2)
b =(3,1)
GGPunkt









Beute











Beute

Abbildung 21: Kurvenverlauf der linearisierten Lsung um G2 in der


Phasenebene
Da die Spiraleigenschaft in oberer Grafik nicht deutlich wird, wird in folgender Grafik 2 Beispiele mit jeweils den Parametern a = 2, b = 1.2, c =
0.5, d = 0.9, K = 10 fr 2 andere Anfangswerte dargestellt. Die Anfangswerte wechselten, da der Gleichgewichtspunkt durch die Vernderung der
Parameter verschoben wird. Er ist nun deutlich nher bei der 0.












Rauber

Rauber

a =2.0, b =1.2, c =0.5, d =0.9, K =10























 
Beute









b =(5,2)
b =(3,1)
GGPunkt









 
Beute







Abbildung 22: Kurvenverlauf der linearisierten Lsung um G2 in der


Phasenebene
2. Fall mit 1,2 R.
Der Grenzwert der in der Stabilittsanalyse angesprochenen 2 Flle fr 1
wird zuerst analysiert:

58

ad > M : Es gilt
lim x(t) = lim

c001

ad+M
2cK

e|( {z

ad+M
2Kdb

00
} +c2

)t

ad+M
2Kdb

ad+M
2cK )t = 0.
e|( {z
}

Die Lsungen konvergieren gegen die Eigenvektoren v1 , v2 zum Gleichgewichtspunkt G2 hin. G2 ist ein stabiler Knotenpunkt.
ad < M : Fr c2 6= 0 gilt
lim x(t) = lim

c001

ad+M
2Kdb

ad+M
)t 00
e|( 2cK
{z } +c2

ad+M
2Kdb

ad+M
2cK )t .
e|( {z
}

Somit ist G2 ein Sattelpunkt.


Fr G3 wird direkt in die Grenzwertbetrachtung der Fallunterscheidung fr 2
ber gegangen.
1. Fall: cK < d
Fr den Limes gilt
lim x(t) = lim c01

!
1

eat +c02
0 |{z}
0

1
a+cKd
Kb

!
|e(cKd)t
{z } = 0.
0

Die Lsungen konvergieren gegen die Eigenvektoren v1 , v2 zum Gleichgewichtspunkt G3 , welcher ein stabiler Knotenpunkt ist. In folgender Grafik ist dieser Fall dargestellt. Die Parameter wurden als a = 2, b = 1.2, c =
0.7, d = 9.1, K = 10 gewhlt, sodass 0 < Kc d = 1, 9 6= 2 = a. Letztere
Bedingung ist ntig, da S sonst singulr wird.

a =2.0, b =1.2, c =0.7, d =9.1, K =10

b =(5,2)
b =(3,1)
b =(15,3)
GGPunkt




Rauber















Beute

Abbildung 23: Phasenplot der linearisierten Lsung um G3


2. Fall: cK > d:

59

Es gilt
lim x(t) = lim

c01

1
0

at

a+cKd
Kb

e|{z} +c02

c02

(cKd)t

e| {z } =

a+cKd
Kb

Hierbei ist zu beachten, dass nicht fr jeden Anfangswert in der Nhe von
G3 mit cK > d der Gleichgewichtspunkt instabil ist. Im Folgenden wird der
Fall b = (b1 , 0)T sowie ein zweiter Fall mit b1 6= 0 6= b2 betrachtet und in
der Fallunterscheidung das Wissen genutzt, dass

S = (v1 , v2 ) und S 1

1
=
0

Kb
a+cKd
Kb
a+cKd

sind und das in G3 verschobene System untersucht.


Der Anfangswert ist (b1 , 0)T :
Dann ist
c01 = b1 K und c02 = 0,
somit gilt fr den Grenzwert
lim x3 (t) = lim

c02

a+cKd
Kb

t |{z}
=0

!
(cKd)t

|e {z } +

K
0

!
=

Die Lsung konvergiert also entlang v1 zum Punkt G3 = (K, 0) und ist
somit ein stabiler Knotenpunkt.
Der Anfangswert ist (b1 , b2 )T :
Dann ist
lim x(t) = lim

c01

!
at

c02

e
+
0 |{z} |{z}
0

6=0

1
a+cKd
Kb

!
e|(cKd)t
{z },

G3 ist also ein Sattelpunkt.


In allen Fllen kann immer das Prinzip der linearisierten Stabilitt aus Satz 5.3.6.3
angewendet werden. Wir wissen also, dass die Gleichgewichtspunkte auch im logistischen Modell die jeweiligen Eigenschaften haben, welche in diesem Kapitel fr das
linearisierte logistische Modell berechnet wurden.
6.3.5

Skizzieren der nichtlinearen Lsung des logistischen Ruber-Beute


Modells

Es bleibt die Frage, ob eine Skizze der Lsungskurve des nichtlinearen logistischen
Ruber-Beute Modells angefertigt werden kann. In diesem Fall kann die Steigung des

60

Graphen auf der Phasenebene nicht weiter helfen, da die resultierende Gleichung
dP
P (t)(cN (t) d)


 
=
dN
N (t) a 1 NK(t) bP (t)
nicht separabel ist und somit eine Lsung nicht leicht zu finden ist.
Fr eine Skizze wird in diesem Fall auf numerische Methoden zurck gegriffen. Als
ersten Schritt wurde das Stromlinienfeld des Differenzialgleichungssystems mithilfe
der Funktion streamplot() in python erstellt (siehe [Pytc]). Fr die Betrachtung
der Programme mit dem die folgenden 2 Grafiken erstellt wurden, siehe D.2, Zeilen
140-200 und die Aufrufe in Zeile 736 und Zeile 777 fr unterschiedliche Parameter.
Die Farbencodierung zeigt die Strke des Richtungsvektors in N-Richtung an. Es
werden wieder beide oben bereits benutzten Parameter dargestellt. In den folgenden
Grafiken sind die Gleichgewichtslsungen P (t) = 0 und N (t) = 0 nicht mehr farbig
hervorgehoben, um die Grafik bersichtlicher zu gestalten.

a =10.0, b =0.5, c =0.3, d =3.8, K =20









3.8
0.3

10.0 1 N(t)
0.5
0.3 20
GGPunkt



Rauber






G2








G1




G3



Beute







Abbildung 24: Stromlinienfeld des logistischen Lotka-Volterra Modells fr Parametergruppe 1.

61

a =2.0, b =1.2, c =0.7, d =1.4, K =10









1.4
0.7

2.0 1 N(t)
1.2
0.7 10
GGPunkt




Rauber











G2



G1




G3




Beute









Abbildung 25: Stromlinienfeld des logistischen Lotka-Volterra Modells fr Parametergruppe 2.


Als weiteren Schritt kann man die Funktion odeint() in python (siehe [Pytd]) benutzen. Diese kann Systeme von Differenzialgleichungen numerisch lsen. In folgender
Grafik sind mehrere Lsungen zu 4 verschiedenen Anfangswerten, welche von odeint()
berechnet wurden, in die Phasenebene gezeichnet. Zur Betrachtung des Codes mit welchem die Lsungen berechnet wurden, sowie die folgenden Grafiken erstellt wurden,
siehe D.2, Zeilen 591-654 mit odeint()-Aufrufen in den Zeilen 609-612 und dem Aufruf
der Zeichen-Funktion in der Zeile 733.
3.8
0.3

10.0 1 N(t)
0.5
0.3 20
GGPunkt

a =10.0, b =0.5, c =0.3, d =3.8, K =20





Anf =(10,15)
Anf =(2,2)
Anf =(19,18)
Anf =(4,19)



Rauber




G2







G1

G3

                    
Beute

Abbildung 26: Phasenplot der Lsung mit unterschiedlichen


Anfangswerten

62

Die folgende Grafik zeigen zu genau diesen 4 Anfangswerten jeweils die 2 Lsungen
fr N (t) und P (t) gegen die Zeit aufgetragen.
a =10.0, b =0.5, c =0.3, d =3.8, K =20





Beute
Rauber





Populationsgroe

Populationsgroe

a =10.0, b =0.5, c =0.3, d =3.8, K =20



Beute
Rauber




















Zeit












(a) Lsung zum Anfangswert A0


(10, 15) gegen die Zeit


Zeit









Beute
Rauber


Populationsgroe

Populationsgroe



a =10.0, b =0.5, c =0.3, d =3.8, K =20



Beute
Rauber












(b) Lsung zum Anfangswert A0 = (2, 2)


gegen die Zeit

a =10.0, b =0.5, c =0.3, d =3.8, K =20
















Zeit







(c) Lsung zum Anfangswert A0


(19, 18) gegen die Zeit













Zeit









(d) Lsung zum Anfangswert A0 = (4, 19)


gegen die Zeit

Abbildung 27: Lsungen des logistischen Differenzialgleichungssystems gegen die Zeit


aufgetragen

63

6.4

Diskussion des logistischen Lotka-Volterra Modell

Die Vernderung durch das logistische Wachstum im Modell hat die Modelleigenschaften deutlich verndert.
6.4.1

Vergleich zu Lotka-Volterra Modell

In diesem Kapitel sollen die zwei in dieser wissenschaftlichen Arbeit behandelten Modelle verglichen werden. Hierzu wurde der Datensatz ber die Schneeschuhhasen und
kanadischen Luchs benutzt (siehe [Texa]).
Die Beziehung der beiden Arten ist eine in der Natur selten vorkommende nahezu reine Ruber-Beute Beziehung von Seiten des kanadischen Luchses (siehe [Texb],[Kan],
Hunting and diet). Er ernhrt sich hauptschlich von einer Beuteart, dem Schneeschuhhasen ([Kan], Hunting and diet). Diese stellen 60-97% der Nahrung des Luchses ([Kan], Hunting and diet). Die Ruber-Beute Beziehung ist aufgrund dieser starken einseitigen Abhngigkeit des Luchses an den Schneeschuhhasen gut geeignet um
ein zwei-Populations-Ruber-Beute Modell zu testen. Ein Erhalt der Luchspopulation
kann nur durch gengend Schneeschuhhasen gewhrleistet werden, dies ist in beiden
Modellen eine Grundannahme an die Ruberpopulation.
Der hier verwendete Datensatz wurde von 1845 bis 1867 dokumentiert durch die Zhlung der Felle beider Populationen (siehe [Texb] und [Web]).
Die Abbildung 28 zeigt den Graphen fr das Lotka-Volterra Modell, mit den am besten passenden Parametern9 und den Originaldaten in einem Graph, um bestmgliche
Vergleichbarkeit zu erhalten. Die Abbildung 29 zeigt die Graphen fr das logistische
Modell fr denselben Grundaufbau wie in Abbildung 28.

ModellBeute
ModellRauber
Schneeschuhase
KanadischerLuchs

a =2.86E01, b =2.6E04, c =5.7E05, d =2.679



Populationsgroe

























Zeit [Jahren]

Abbildung 28: Vergleich Lotka-Volterra Modell zu bekannten Datenpunkten


9 Parameterwerte wurden durch eigenhndige Anpassung der Modelle an die Datenpunkte bestimmt. Hierbei wurde das Ziel, die Parameter fr beide Modelle mit der besten Anpassung an die
Datenpunkte zu finden, verfolgt. Die Wahl der Parameter fand objektiv und ohne Prferenz fr eines
der Modelle statt.

64

ModellBeute
ModellRauber
Schneeschuhase
KanadischerLuchs

a =2.95E01, b =2.0E04, c =7.0E05, d =3.5, K =2E +05



Populationsgroe

























Zeit [Jahren]

Abbildung 29: Vergleich logistisches Modell zu bekannten Datenpunkten


Das logistische Modell wurde erstellt, um das Lotka-Volterra Modell zu verbessern.
Hierbei wurde das Augenmerk auf die Beutepopulation gelegt.
Vergleich der Modelle fr die Beutepopulation:

In den Abbildungen 28

und 29 ist ein deutlicher Unterschied in Bezug auf die Gte der Modelle fr die
Beutepopulation sichtbar.
Das Lotka-Volterra Modell erreichte eine gute Anpassung fr das mittlere Minimum, eine Aussage ber das dritte Minimum ist schlecht zu treffen, da der Anstieg
in den Datenpunkten leider nicht mehr zu sehen ist. Die deutlich sichtbare Reduktion
der Amplitude der Schwankung in den Datenpunkten in Maximum 2 und 3 konnte
durch das Lotka-Volterra Modell nicht gut modelliert werden. Die 2 letzten Maxima
sind nicht nur im Bezug auf die Amplitude nicht gut reprsentiert sondern auch im
Bezug auf das zeitliche Auftreten der Maxima. Besonders das zweite Maxima liegt
leicht links vom tatschlichen Maximum, aber die Datenpunkte stimmen berein.
Dies kann zu Fehlern in der Berechnung der Gte der Approximation fhren und ist
ein Effekt des geringen Datenvolumens.
Das logistische Modell zeigt eine sehr gute Anpassung an die Reduktion der
Amplitude in Maxima 2 und 3, ist aber leider leicht verschoben im ersten Maximum.
Die Anpassung an die Minima ist nicht so gut wie beim Lotka-Volterra Modell.
Betrachtet man die Werte des Modells der Beutepopulation mit den tatschlichen Datenpunkten sind die Differenzen der letzten 2 Maxima relativ gering (besonders bevor,
an und nach den letzten 2 Maxima). Die Datenpunkte fr das erste Maximum zeigen
relativ groe Differenzen, obwohl die Anpassung relativ gut ist. Dies ist ein Resultat der leichten Verschiebung zu Beginn des Maximums und der geringen Datenpunkte.

65

Vergleich der Modelle fr die Ruberpopulation: Da in der Anpassung der


Parameter fr die gegebenen Datenpunkte der Schwerpunkt auf der Beutepopulation
lag, sind die Ruberpopulationen in beiden Fllen schlechter modelliert als die
Beutepopulation.
Im Lotka-Volterra Modell passt die Amplitude fr die ersten 2 Maxima gut, ist
aber zu gro fr das letzte Maximum. Die Maxima der Ruber Modelle sind fr das
erste und letzte Maximum verschoben. Man kann dies durch die Anpassung der Parameter nach links verschieben, dadurch verschiebt sich aber auch die Beutepopulation
und wird somit zu einer extrem schlechten Approximation fr die Beute.
Generell herauslesen kann man hierbei, dass im Lotka-Volterra Modell die Ruberpopulation immer der Beutepopulation folgt und ein deutlich krzer anhaltendes
Maximum hat, als die Datenpunkte. In den Datenpunkten scheint die Ruberpopulation relativ zeitgleich mit der Beutepopulation zu wachsen, allerdings nicht schnell
sondern eher langanhaltend.
Dasselbe gilt fr das logistische Modell. Zustzlich hat es im allgemeinen eine
gute Anpassung an die Amplituden, etwas zu gering im Maximum zwei. Die beste
Anpassung findet sich in Maximum drei, in dem die letzte Hlfte des Maximums
nahezu exakt modelliert wurde.
Aber auch hier bleibt das Problem bestehen, dass die Ruberpopulation der Beutepopulation folgt mit einem kurzen Maximum.

Zusammenfassung und Verbesserungsvorschlge: Es kann gefolgert werden,


dass das Ziel des logistischen Modells, das Lotka-Volterra Modell zu verbessern, zu
weiten Teilen funktioniert hat. Sowohl die Beutepopulation als auch die Ruberpopulation konnten fr diesen Datensatz ber diese kurze gemessene Zeitspanne eine gute
Reprsentation der Realitt geben.
Es gibt allerdings zwei Problemstellen:
1. der gemessene Zeitraum ist zu kurz.
2. die Ruberpopulation ist in beiden Modellen zu schlecht modelliert.
Zu 1: In einem Zeitraum von 30 Jahren zeigen die Populationen 3 Schwankungen mit
langsam abnehmender Amplitude. Dies ist zu wenig, um auf ein Langzeitverhalten
schlieen zu knnen. Das logistische Modell ist eine gute Anpassung fr diese Datenpunkte fr diese 30 Jahre, aber wir wissen, dass das Modell zu seinem Gleichgewichtspunkt konvergieren wird. Das Lotka-Volterra Modell ist keine so gute Anpassung an
die Datenpunkte in diesen 30 Jahren, und wir wissen, dass das Modell periodisch genau dieselben Zyklen vorhersagen wird, wie den fr diese 30 Jahre.
In der Diskussion um das bessere Modell ist es essenziell zu wissen, ob die Populationen weiter periodisch schwanken werden, oder ebenfalls zu einem Gleichgewichtspunkt
hin tendieren werden. Die Abnahme in den Datenpunkten kann ein vorbergehender
Effekt aufgrund von vernderten Umweltbedingungen sein, oder ein fester Bestandteil

66

einer Koevolution dieser zwei Populationen zu diesem Zeitpunkt, wie es das logistische
Modell annimmt. Ein weiterer wichtiger Faktor ist, dass die Populationen, startend
1845 bejagt wurden ([Texb]) und somit fr beide Populationen ein neuer zustzlicher
Selektionsdruck ausgebt wird.
Zu 2: Die Modellierung der Ruberpopulation ist zu schlecht. Wie in der Diskussion
des Lotka-Volterra Modells schon angedeutet, gibt es noch weitere Verbesserungsmglichkeiten. In beiden in dieser wissenschaftlichen Arbeit behandelten Modellen sind die
Ruberpopulationen Nimmersatts. Sie investieren auerdem keine Zeit in die Jagd
und die zuflligen Begegnungen mit Beutetieren haben den einzigen und direkten Einfluss auf die Reproduktionsrate der Ruber.
Verbesserungsmglichkeiten sind hier
1. den Faktor der Jagd,
2. die Begrenzung der Nahrungsaufnahme der Ruber
in die Gleichung der Ruber im logistschen Modell zu integrieren.
Der Faktor der Jagd bedeutet, dass Ruber Zeit und Energie fr die Jagd von
Beutetieren investieren mssen. Hierbei knnen die Ruber die Interaktionshufigkeit
mit den Beutetieren erhhen, ohne dass dabei die Beutepopulation gro sein muss.
Somit kann eventuell der Anstieg der Ruberpopulationsgre nach links verschoben
werden.
Um den Anstieg und das Maximum langanhaltender zu gestalten, wre eine
Verbesserung hin zu einer verzgerten Reproduktion und einer Schranke in der
Fhigkeit zur Nahrungsaufnahme sinnvoll. Dies wurde bereits in der Diskussion
ber die Schwachpunkte des Lotka-Volterra Modells besprochen (siehe Unterkapitel
5.4). Da fr das zweite Modell der Fokus auf die Verbesserung der Beutepopulationen gelegt wurde, wurde es in dieser wissenschaftlichen Arbeit nicht weiter verfolgt.

67

Abschluss

In dieser wissenschaftlichen Arbeit wurden zwei der ersten und einfachsten RuberBeute-Modelle erstellt, auf ihre Eigenschaften analysiert und anhand eines Datensatzes
auf Brauchbarkeit getestet. Obwohl es zahlreiche Mglichkeiten zur Verbesserung
gibt, waren beide Modelle bereits eine sehr gute Anpassung an eine nahezu reine
Ruber-Beute Beziehung, wie die des kanadischen Luchses und Schneeschuhhasen.
Heutzutage werden jedoch weder das Lotka-Volterra Modell, noch das logistische
Modell hufig zur Modellierung genutzt.
Seit ihrer Entwicklung gab es viele Verbesserungen und Erweiterungen des logistischen
Lotka-Volterra Modells. Die berhmteste Verbesserung resultierte in das so genannte
Rosenzweig-McArthur Modell (Publiziert 1963 [RM]). Es nutzt eine bestimmte
Gruppe von Funktionen, die sogenannten functional response-Funktionen zur Modellierung der Bejagungs- und Ttungsrate der Ruber an der Beute, wobei der Term
als functional-response-Funktionen 1949 von Solomon10 bestimmt wurde ([Hol59] S.
303). Diese Ttungsrate wurde in die Ruber- sowie Beutegleichung des logistischen
Modells integriert (siehe auch [Tur13], S. 46). Die im Rosenzweig-McArthur-Modell
verwendeten functional response-Funktionen wurden von Holling 1959 entwickelt
([Hol59]). Sie beschreiben in der Natur hufig beobachte Konsumverhaltensnderungen der Ruberpopulationen bei unterschiedlicher Beutepopulationsdichte. Diese
Funktionen sind beschrnkte Wachstumskurven und knnen in ihrer Form variieren.
Somit sind die Wachstumsraten der zwei Populationen nicht mehr proportional
zur jeweiligen Gre der anderen Population, wie beim reinen, sowie logistischen
Lotka-Volterra Modell der Fall.
Das Rosenzweig-McArthur Modell wurde erfolgreich fr verschiedene real-life
Anwendungen verwendet. (bersetzt aus [Tur13], S.46). Die bisher in kologischen
Modellierungen meist verwendete functional response-Funktion, die sogenannte
Holling Type III functional response (siehe [Tur13], S.82) hat einen sigmoiden
Kurvenverlauf, bei linear steigender Beute-Dichte. Diese Form einer functional
response-Funktion ist typisch fr Generalisten (siehe [Tur13], S.82f), da sie, bei
geringer Populationsdichte der aktuellen Lieblings-Beuteart, diese typischerweise
wechseln (siehe [Tur13], S.82f). Eine Population mit wenigen Individuen zu bejagen
ist sehr aufwndig und fr Generalisten deswegen nicht lohnenswert. Fr Spezialisten
ist eher die Holling type II functional response mit hyperbolischem Kurvenverlauf
die passende Wahl (siehe [Tur13], S.82f), da sie auf diese eine Beute stark angewiesen
sind und deswegen selbst bei geringer Beutepopulationsdichte ihre Nahrung von dieser
Population beziehen (siehe [Tur13], S.82f).
Diese Form der Modellierung der Ruber-Beute Beziehung war lange die Standardmethode, bis 1989 ein paper mit der sogenannten Arditi-Ginzburg-ratio-dependentfunctional-response (siehe [JSB07], S. 7) publiziert wurde, welches sogenannte
ratio-dependent functional response-Funktionen einfhrte (siehe [JSB07], S. 7).
Diese verursachten eine groe Kontroverse ber die besser geeignete functional10 Solomon, M. E. The Natural Control of Animal Populations. Journal of Animal Ecology. 19.1
(1949). 1-35

68

response-Funktion fr die Modellierung der Ruber-Beute Beziehungen, da der


Gebrauch der Einen den Gebrauch der anderen ausschlie (Zusammenfassung
aus [JSB07], S.8). Seither wurden viele paper produziert, mit der Hoffnung, die
Kontroverse auflsen zu knnen (siehe [JSB07], S.8). Eine Dissertation ([JSB07])
die zu diesem Thema 2007 erschienen ist, nennt diese Kontroverse the unresolved
controversy ([JSB07], S.7). In dieser Dissertation wurden mehrere Grnde fr
den weiteren Bestand der Kontroverse, trotz der vielen Mhen, diese zu beseitigen,
angefhrt. Einer der Hauptgrnde ist die Schwierigkeit, kontrollierte empirische Daten
von zwei-Populations-Ruber-Beute-Beziehungen zu erstellen (siehe [JSB07], S.8).
Durch einen Vergleich der functional-response- und ratio-dependent-functionalresponse-Funktionen anhand empirisch erhobener Datenstze knnte geklrt werden,
welches Modell letztendlich besser passt und solange dies nicht mglich ist, wird die
Kontroverse wohl weiter bestehen.
Hiermit schliee ich meine wissenschaftliche Arbeit ab. Dargestellt wurde die
historische Entwicklung der Modellierung von Ruber-Beute Modellen bis in die
heutige Zeit, darber hinaus gewhrte diese Arbeit einen allgemeinen Einblick in die
Modellierung in der Biologie. Im zentralen Abschnitt wurden die ersten 2 wichtigen
und wegbereitenden Ruber-Beute Modelle entwickelt und analysiert und deren
historische Verbesserungen im abschlieenden Kapitel besprochen.

69

Appendix
Dieser Appendig beinhaltet eine kurze Einfhrung in Differenzialgleichungen, sowie
detaillierte Einblicke in die Exponentialfunktion und die Lsung von Differenzialgleichungen. Als letztes Kapitel wurden die Programme, mit denen alle Grafiken in dieser
wissenschaftlichen Arbeit, bis auf die allgemeine Darstellung eines Strudel- und Sattelpunktes (Abbildung 9b und Abbildung 6), erstellt wurden, eingefgt. Diese habe
ich mit der open-source Software inkscape 11 selbststndig entworfen und erstellt.

A
A.1

Differenzialgleichungen
Gewhnliche Differenzialgleichung erster Ordnung

Definition A.1.1 (Differenzialgleichung).


Sei g eine Funktion von t, x(t) und y(t) und

dx
dt (t),

wobei x(t) und y(t) Funktionen auf

(a, b) R sind und t (a, b) R.


Dann nennt man eine Gleichung der Form


dx
0 = g t, x(t), y(t), (t)
dt
eine gewhnliche Differenzialgleichung erster Ordnung.
Hierbei nennt man t die abhngige Variable und x(t), sowie y(t) die unabhngigen Variablen.
Die Ordnung einer Differenzialgleichung ist die Ordnung der hchsten Ableitung
in der Gleichung.
Durch Umformen kann man die Differenzialgleichung oft auf die bekanntere Schreibweise

dx
(t) = fx (t, x(t), y(t)))
dt

bringen. Hierbei ist fx eine Funktion von t, x(t) und y(t). Da die Differenzialgleichungen, welche in dieser wissenschaftlichen Arbeit behandelt werden, immer auf die obere
Form umgeformt werden knnen, werden die Formen quivalent behandelt.
Definition A.1.2 (Autonome Differenzialgleichung).
Man nennt eine Differenzialgleichung autonom, wenn die Funktion g nicht explizit
von der Variable t abhngt.
Beispiel A.1.3.
Sei f eine Funktion von x(t) und y(t), wobei x(t) und y(t) Funktionen auf (a, b) R
sind und t (a, b) R.
Sei weiterhin die Differenzialgleichung
dx
(t) = x(t) + y(t) 1 := f (x(t), y(t))
dt
11 Homepage:

https://inkscape.org/en/

70

gegeben.
Diese Differenzialgleichung ist eine autonome gewhnliche Differenzialgleichung erster
Ordnung.
Bemerkung A.1.4.
Autonome Differenzialgleichungen hngen nicht direkt von t ab. Die Differenzialgleichung in Beispiel A.1.3 hat also fr feste y(t) und x(t) immer
dieselbe Ableitung. Dies wird im Folgenden grafisch verdeutlicht.
Definition A.1.5 (Steigungsfeld).
Sei eine gewhnliche Differenzialgleichung erster Ordnung gegeben. Eine Grafik, welche die Steigung von x(t) in Punkt t in einem bestimmten Intervall t (a, b) fr
regelmige t (a, b) anzeigt, nennt man Steigungsfeld.
Definition A.1.6 (Isokline).
Fr eine Differenzialgleichung
dx
(t) = f (x(t))
dt
nennt man jede Kurve, die einer Gleichung des Typs f (x) = a (a konstant) gengt,
ein Isokline.
Isokline leitet sich aus dem griechischen (isos = gleich, klinein = neigen)12 ab und
kann bersetzt werden als gleiche Steigung.

Beispiel A.1.7.
Im Folgenden sollen 2 Beispiele eines Steigungsfeldes gezeigt werden.
1. Sei

dy
(t) = t + y(t)
dt

eine gewhnliche Differenzialgleichung erster Ordnung.


2. Sei

dy
(t) = y(t) + 1
dt

eine autonome Differenzialgleichung erster Ordnung.

12 siehe

https://de.wikipedia.org/wiki/Isokline 16.09.2015, 15.17 Uhr PST

71

Abbildung 30: Grafische Darstellung von Beispiel 1 und 2


dy
dt = y + t



























dy
dt = y +1










































(a) Nichtautonome
Differenzialgleichung

(b) Autonome Differenzialgleichung

Bemerkung A.1.8.
Im oberen Beispiel wird deutlich, dass fr autonome Differenzialgleichungen der Wert
fr

dy
dt (t)

fuer bestimmtes y immer gleich bleibt fr alle t (4, 4). Dies gilt

fr alle autonomen Differenzialgleichungen, da die Funktion g, wie in Definition A.1.2


nicht mehr von t abhngt.
Ein Isokline von autonomen Differentialgleichungen ist also waagrecht.

A.2

Lsungen von Differenzialgleichungen

Definition A.2.1 (Lsung einer gewhnlichen Differenzialgleichung).


Es sei eine gewhnliche Differenzialgleichung erster Ordnung gegeben. Dann nennt man
x(t)
eine Lsung der Differenzialgleichung, falls x(t) die Gleichung
dx
(t) = f (t, x(t), y(t)) t (a, b)
dt
erfllt.
Eine Differenzialgleichung kann mehrere Lsungen haben. Man nennt ein einzelnes z()
eine spezielle Lsung von g. Die allgemeine Lsung einer Differenzialgleichung ist
die Menge aller mglichen Lsungen dieser Differenzialgleichung.
Beispiel A.2.2.
Nehme die autonome Differenzialgleichung
dy
(t) = y(t) + 1.
dt
Die Lsung ist
y(t) = et+c 1,
wobei c R eine beliebige Konstante ist. Somit ist y(t) die allgemeine Lsung
der Differenzialgleichung und es gibt unendlich viele Lsungen.

72

Sei c = 0, dann ist


y0 (t) = et 1
eine spezielle Lsung der Differenzialgleichung.
Definition A.2.3 (System von gewhnlichen Differenzialgleichungen erster Ordnung).
Ein System von gewhnlichen Differenzialgleichungen erster Ordnung ist ein
System von n Gleichungen
dy1
(t) = f1 (t, y1 (t), y2 (t), . . . , yn (t))
dt
dy2
(t) = f2 (t, y1 (t), y2 (t), . . . , yn (t))
dt
..
.
dyn
(t) = fn (t, y1 (t), y2 (t), . . . , yn (t)),
dt
wobei f1 , f2 , . . . , fn Funktionen der abhngigen Variablen t und der unabhngigen
Variablen y1 (t), y2 (t), . . . , yn (t) sind. Hierbei sind f1 , f2 , . . . , fn definiert auf einer geeigneten Menge S Rn+1 .
Definition A.2.4 (Lsung eines Systems an Differenzialgleichungen).
Eine Lsung eines Differenzialgleichungssystems ist eine Familie von Funktionen
y1 (), y2 (), . . . , yn (), jeweils definiert auf einem gemeinsamen Intervall in der Menge
R, welche alle Differenzialgleichungen im System erfllen.

B
B.1

Matrixexponentialfunktion
Die Matrixexponentialfunktion

Definition B.1.1 (Die Matrixexponentialfunktion).


Sei A L(X), X = Ck , t R. Dann ist die zu A gehrige Matrixexponentialfunktion
definiert als
R

L(X),

t 7 e

tA

n n

X
X
t A
(tA)n
=
.
=
n!
n!
n=0
n=0

Bemerkung B.1.2.
Die Matrixexponentialfunktion etA von A L(X) ist wohldefiniert fr alle t R.
Beweis. siehe LDS [Nag12], Satz 6.4, S.28.

73

B.2

Stze und Definitionen fr die Matrixexponentialfunktion


und ihre Asymptotik

Satz B.2.1 (Eigenschaften von etA ).


Die Matrixexponentialfunktion hat folgende Eigenschaften.
1. e0A = Id.
2. etSAS

= SetA S 1 , fr S L(X) invertierbar.

3. e(t+s)A = etA+sA = etA esA fr alle s, t R(Funktionalgleichung)


4. Die Abbildung : R L(X), t 7 etA ist stetig.
5. ist auerdem stetig differenzierbar mit
d tA
e = AetA = etA A
dt
fr alle t R.
6. Seien 2 kommutierende Matrizen D, N L(X) (d.h. DN = N D) gegeben. Dann
gilt fr die Matrixexponentialfunktion
etD etN = et(D+N ) = etN etD .
Die Matrizen

.
D = ..

...
..

...

...

...

..
..
,
d

R
und
N
=

.
.

d
0

..

..

...

Beweis. Beweise einzeln nacheinander.

e0A =

X
X
0n An
0An
= 1 Id +
= Id
n!
n!
n=0
n=1
| {z }
=0

74

..
0

kommutieren.

1.

...

...

0
..

2.
etSAS

n
X
t (SAS 1 )n
n!
n=0

n
X
t SAn S 1
n!
n=0
!
n n
X
t A

=S
S 1
n!
n=0

|SAS 1 S{z. . . AS 1} = SAn S 1

n mal

S unabhngig von n

= SetA S 1
3. Funktionalgleichung
tA sA

e e

n n
X
t A
n!
n=0

X
sn An
n!
n=0

X
n
X
(tA)nl (sA)l
n=0 l=0
X
n
X

Cauchy Produkt

(n l)! l!

n!
(tA)nl (sA)l
(n l)! l!
n!
n=0 l=0


n
X
X
n (tA)nl (sA)l
=
l
n!
n=0
=

l=0

X
(tA + sA)n

=
n!
n=0

binomische Formel

X
(t + s)n An
n!
n=0

= e(t+s)A .
4. Eine Funktion : R L(X) ist genau dann stetig auf R, falls fr alle t0 R
gilt lim (t) = (t0 ). Dies ist der Fall, wenn fr alle Folgen (tn )nN R mit
tt0

lim tn = t0 gilt, dass lim (tn ) = (t0 ), t0 R.

Sei also (tn )nN R eine beliebige Folge mit lim tn = t0 .


n

lim tn t0 = 0
n

lim (tn t0 )A

1 = en

= lim e(tn t0 )A .

Summe ist stetig

75

Wegen der Funktionalgleichung gilt nun


et0 A = et0 A lim e(tn t0 )A
n

t0 A

= |e

{zet0 A} lim etn


n

=1

= lim etn .
n

5. siehe Seite 29 [Nag12].


6. Fr etD etN gilt
e

tD tN

n n
X
t D
n!
n=0

n n
X
t N
n!
n=0

X
n
X
(tD)nl (tN )l

Cauchy Produkt

(n l)! l!

n=0 l=0
X
n
X

n!
(tD)nl (tN )l
(n l)! l!
n!
n=0 l=0


n
X
X
n (tD)nl (tN )l
=
l
n!
n=0

l=0

X
(tD + tN )n

=
n!
n=0

binomische Formel

n
X
t (D + N )n
=
n!
n=0

= et(D+N ) .
Fr D L(X) beliebige Diagonalmatrix gilt

d1

.
DN = ..

...

d2
..

...

..
..
.
.

dn
0

...

...

0
..
..

...
.
.

..

0
...

...

...


0
0

..

. 0

= ..

0
.

0
0

d1
0

0
..
.
..
.

...
..

0
...

...

d2

0
..
.
..
.

...

0
..

dn1

und

.
N D =
..

1
0

0
..
.
..
.

...
..

0
...

...

0
d1
..

. 0
.
.
.
0

0
0

d2
..

...

...

...

und somit kommutieren D = diag(d) und N .

76



0
..
= ..
.
.


0

dn
0

..

0
...

...

0
..

,
0

dn

Satz B.2.2.
Sei ein System von autonomen linearen Differenzialgleichungen wie in A.2.3 mit Anfangswert wie in 5.3.1.1 gegeben, welches beschrieben werden kann als
dy
(t) = A y(t),
dt

y(t0 ) = b,

mit b = (b1 , . . . , bn ), y(t) = (y1 (t), . . . , yn (t)), wobei (A y(t))k = fk (y1 (t), . . . , yn (t)).
Die Eintrge in A sind also die Koeffizienten fr die lineare Komposition der
yi (t), i = 1, . . . , n. Dann ist fr alle t R die eindeutige Lsung des Anfangswertproblems gegeben als
y(t) = etA b.
Hierbei ist b R der Anfangswert.
Beweis. Sei X = Ck , A L(X), b = (b1 , b2 , . . . , bk ), sodass
dy
(t) = Ay(t),
dt

t R,

x(0) = b.
Dann ist etA b = y(t) eine Lsung des Anfangswertproblems, denn nach Satz B.2.1
gilt
dy
d
(t) = etA b = AetA b = Ay(t).
dt
dt
Auerdem gilt
x(t0 ) = e0A b = 1 b = b.
Aufgrund des Existenz- und Eindeutigkeitssatzes 5.3.1.5 ist x(t) = etA b die einzige
Lsung des Anfangswertproblems.

77

Die Lsung eines zweidimensionalen linearen Systems von Differenzialgleichungen

Der Vollstndigkeit halber wird zuerst die Definition eines zweidimensionalen Systems
von linearen Differenzialgleichungen angegeben und im Anschluss Eigenschaften davon
diskutiert.
Es werden zuerst 2 Stze dargestellt, die einen berblick ber die Anzahl an mglichen
Eigenwerten und deren Eigenschaften verschafft. Im Anschluss folgen 2 Stze, welche die Lsungen von zweidimensionalen linearen Differenzialgleichungen darstellen.
Hierbei muss zwischen diagonalisierbaren und nicht diagonalisierbaren Jacobimatrizen
unterschieden werden.
Definition C.0.1.
Gegeben sei
dx
(t) =
dt
dy
(t) =
dt

ax(t) + by(t)
cx(t) + dy(t),

wobei a, b, c, d > 0, x(t) und y(t) die unabhngingen Variablen sind. Ein solches System
von linearen Gleichungen kann man auch in Matrixschreibweise mit der Matrix
A :=

umformulieren. Es hat dann die Form

dz
(t) =
dt

z(t) = A z(t),

mit z(t) =

!
x(t)
y(t)

(LDS 1)

Dies nennt man ein System von linearen Differenzialgleichungen oder Lineares
dynamisches System.
Lemma C.0.2.
Pn
Sei p(x) = i=1 ai xi , i N, ai R ein reelles Polynom. Dann
1. existieren genau n N Nullstellen {x1 , . . . xn } C von p(x), wenn die Vielfachheit gezhlt wird.
2. gilt fr jedes xi C komplex, dass xi , (das komplex konjugierte von x) auch eine
Nullstelle von p(x) ist.
Beweis. Die erste Aussage ist der Fundamentalsatz der Algebra. Siehe Satz und Beweis
in [LM11] S. 202 ff.
Die zweite Aussage ist eine direkte Folgerung des Fundamentalsatzes der Algebra.

78

Sei hierbei z C eine Lsung des Polynoms p(x), dann gilt


p(z) = 0
=
0
= p(z)
=

n
X

ai z i

i=1

n
X

ai zi

wg. Linearitt der Abb. : C C, z 7 z in Add. & Mult.

i=1

= p(
z ).
Und somit gilt fr jedes z C mit p(z) = 0 auch p(
z ) = 0.
Die folgenden beiden Stze sind anhand [Sto08] als Vorlage entwickelt worden und
benutzen das Wissen aus der Vorlesung von Prof. Rainer Nagel ([Nag12]). Fr die
Stabilittsanalyse einer Matrix mssen 2 Flle unterschieden werden.
1. A ist diagonalisierbar,
2. A ist nicht diagonalisierbar.
Satz C.0.3 (A diagonalisierbar).
Sei ein zweidimensionales lineares Differenzialgleichungssystem wie in C.0.1 gegeben
und A sei diagonalisierbar. Dann ist die Lsung dieses Differenzialgleichungssystems
gegeben als
z(t) = c1 v1 e1 t + c2 v2 e2 t .
Dabei sind v1 , v2 Eigenvektoren zu Eigenwerten 1 , 2 sind und c1 , c2 allgemeine Konstanten, welche durch die Anfangswerte des Systems festgelegt werden.
Beweis. Da A L(X) diagonalisierbar ist, existiert ein S, S 1 L(X), wobei S invertierbar (siehe [Nag12]), sodass S 1 AS = D gilt mit
D=

!
,

S = (v1 , v2 ).

Hierbei sind v1 , v2 Eigenvektoren zu den Eigenwerten 1 , 2 (bekannt aus Lineare


Algebra).
Die Lsung des Differenzialgleichungssystems ist also
z(t) = etA b = SetD S 1 b.
Fasst man S 1 b = (c1 , c2 )T zusammen und multipliziert diese Gleichung aus, erhlt
man die Lsung.

79

Satz C.0.4 (A nicht diagonalisierbar).


Sei ein zweidimensionales lineares Differenzialgleichungssystem wie in C.0.1 gegeben
und A sei nicht diagonalisierbar. Dann ist die Lsung dieses Differenzialgleichungssystems gegeben als
z(t) = (c1 v1 + c2 (tv1 + u))et .
Dabei sind v1 der Eigenvektor zum Eigenwert ist und c1 , c2 allgemeine Konstanten,
welche durch die Anfangswerte des Systems festgelegt werden. u ist hierbei der Hauptvektor der Stufe 2 (Bekannt aus Lineare Algebra II, Thema Jordan Normalform).
Beweis. Es existieren S L(X) invertierbar, sodass S 1 AS = J gilt mit
J=

!
+

!
:= D + N,

S = (v1 , u) =

s1

s3

s2

s4

!
,

d.h. J besitzt Jordan Normalform und v1 ist ein Eigenvektor zu Eigenwert und u ein
Hauptvektor zweiter Stufe.
Dann gilt fr die Lsung des Differenzialgleichungssystems
z(t) = etA b = SetJ S 1 b = SetD+tN S 1 b.
Da D und N kommutieren, gilt der Binomische Lehrsatz und es folgt etD+tN = etD etN
(siehe B.2.1 Nummer 6).
Da N n = 0, n > 1, gilt
e

tN

= Id + t N =

!
.

Da die Eigenwerte gleich sind, hat etD in diesem Fall die Form
etD = Id et .
Somit gilt fr die Lsung des Differenzialgleichungssystems
tD tN

z(t) = Se

b = Se

b=e

s1

ts1 + s3

s2

ts2 + s4

!
c = et (v1 , v1 t+u)c.

Fasst man wieder S 1 b = (c1 , c2 )T := c zusammen, erhlt man die Lsung.

80

Programme zur Erstellung der Graphiken

D.1
D.1.1

Lotka-Volterra Modell
2D-Grafiken

1 #------------------------------------------------------------------2 # Zeichne Grafiken der Loesungen fuer G_1 und G_2 des Lotka-Volterra
Modells.
3 #------------------------------------------------------------------4 # Importieren der noetigen python-libraries.
5 import numpy as np
6 from scipy import linalg
7 import pylab as pl
8 import matplotlib.pyplot as plt
9 import seaborn
10 import cmath as cm
11 from math import *
12 from matplotlib import rcParams
13
14 def GG_points(a,b,c,d,maxi):
15

"""

16

Zeichnet und speichert eine Grafik der Gleichgewichtsgeraden


fuer gegebene Parameter und einem Maximalwert "maxi",
welcher als oberste Grenze fuer die x- und y-Achse dient.

17

"""

18
19

# Initialisiere numpy-Arrays fuer x- und y-Achse.

20

N_1 = pl.arange(0,maxi+1.3,maxi*0.05)
P_1 = pl.arange(0,maxi+1.3,maxi*0.05)

21
22
23

# Festlegen der Schnittpunkte der Gleichgewichtsgeraden.

24

GG_x = np.array([0,d/c])

25

GG_y = np.array([0,a/b])

26
27

# Festlegen des Formats der Grafik.

28

fig = plt.figure(figsize=(8,8))

29

rcParams[xtick.labelsize] = 12

30

rcParams[ytick.labelsize] = 12

31

rcParams.update({font.size: 15})

32

plt.xlabel(r$Beute$,fontsize=15)

33

plt.ylabel(r$R\"auber$,fontsize=15)

34

plt.grid(True)

35

plt.ylim(-.1,maxi+1)

36

plt.xlim(-.1,maxi+1)

37
38

# Zeichne die 4 Gleichgewichtsgeraden und speichere Namen


fuer Legende.

81

39

plt.plot([d/c]*len(P_1),P_1, color=m, label=r"$\frac{d}{c}$

40

plt.plot(N_1,[a/b]*len(N_1), color="c", label=r"$\frac{a}{b}$

41

plt.axhline(color="b",label=r$P(t) = 0$)

42

plt.axvline(color="r",label=r$N(t) = 0$)

")
")

43
44

# Zeichne und beschrifte die Schnittpunkte.

45

plt.plot(GG_x,GG_y,marker="x",color="k",linestyle="",mec="k",
ms=10,mew=1,label=r"$GG-Punkt$")

46

plt.text(GG_x[0]+0.02*maxi,GG_y[0]+0.02*maxi,$G_1$,fontsize

47

plt.text(GG_x[1]+0.02*maxi,GG_y[1]+0.02*maxi,$G_2$,fontsize

=15)
=15)
48
49

# Zeichnen der Legende und schreibe die Parameter ueber die


Grafik.

50

plt.legend(loc="upper right", fancybox=True,frameon=True,

51

plt.title(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f$"%(

shadow=True,bbox_to_anchor=(1.05, 1.05),fontsize=13)
a,b,c,d),fontsize=15)
52
53

# Speichere die Grafik und zeige sie direkt an.

54

plt.savefig("GG_points_lotvolt.pdf")

55

plt.show()

56
57 def GG_points_vectors(a,b,c,d,maxi):
58

"""

59

Zeichnet und speichert eine Grafik der Gleichgewichtsgeraden

60

Die durch die Gleichgewichtsgeraden entstehenden 4 Felder

des Lotka-Volterra-Modells.
enthalten zusaetzlich je eine Gruppe von 2 Vektoren,
welche die Wachstumsrichtung der Beute- bzw.
Raeuberpopulationen anzeigt.
61

An den Gleichgewichtsgeraden selbst wird pro Feld je 1 Vektor


gezeichnet, welcher die Wachstumsrichtung der Population
zeigt, welche nicht im Gleichgewicht ist.

62

"""

63
64

# Initialisiere numpy-Arrays fuer x- und y-Achse.

65

N_1 = pl.arange(0,2.1*a/b,maxi*0.05)
P_1 = pl.arange(0,2.1*a/b,maxi*0.05)

66
67
68

# Festlegen der Schnittpunkte der Gleichgewichtsgeraden.

69

GG_x = np.array([0,d/c])

70

GG_y = np.array([0,a/b])

71

82

72

# Festlegen des Formats der Grafik.

73

fig = plt.figure(figsize=(8,8))

74

rcParams[xtick.labelsize] = 12

75

rcParams[ytick.labelsize] = 12

76

rcParams.update({font.size: 15})

77

plt.xlabel(r$Beute$,fontsize=15)

78

plt.ylabel(r$R\"auber$,fontsize=15)

79

pl.grid(True)

80

plt.ylim(-.1,2*a/b)

81

plt.xlim(-.1,2*a/b)

82
83

# Zeichne die 4 Gleichgewichtsgeraden und speichere Name fuer


Legende.

84

plt.plot([d/c]*len(P_1),P_1,color=m, label=r"$\frac{d}{c}$"
)

85

plt.plot(N_1,[a/b]*len(N_1), color="c",label=r"$\frac{a}{b}$"
)

86

plt.axhline(color="b",label=r$P(t) = 0$)

87

plt.axvline(color="r",label=r$N(t) = 0$)

88
89

# Zeichne und beschrifte die Schnittpunkte.

90

plt.plot(GG_x,GG_y,marker="x",color="k",linestyle="",mec="k",

91

plt.text(GG_x[0]+0.02*maxi,GG_y[0]+0.02*maxi,$G_1$,fontsize

ms=10,mew=1,label=r"$GG-Punkt$")
=15)
92

plt.text(GG_x[1]+0.02*maxi,GG_y[1]+0.02*maxi,$G_2$,fontsize
=15)

93
94
95

## Zeichne die jeweiligen Vektoren in jedes der 4 Felder.

96
97

# Unteres rechtes Feld.

98

pl.arrow(1.5* d/c,0.5*a/b,d/c*0.1*maxi, 0, fc="k", ec="k",


head_width=0.05, head_length=0.05,color="k",
length_includes_head=True )

99

pl.arrow(1.5* d/c,0.5*a/b,0, d/c*0.1*maxi, fc="k", ec="k",


head_width=0.05, head_length=0.05,color="k",
length_includes_head=True )

100

pl.arrow(d/c,0.5*a/b,d/c*0.1*maxi, 0, fc="k", ec="k",


head_width=0.05, head_length=0.05,color="k",
length_includes_head=True )

101
102

# Unteres linkes Feld.

103

pl.arrow(0.5* d/c,0.5*a/b,d/c*0.1*maxi, 0, fc="k", ec="k",


head_width=0.05, head_length=0.05,color="k",
length_includes_head=True )

104

pl.arrow(0.5* d/c,0.5*a/b,0, -d/c*0.1*maxi, fc="k", ec="k",

83

head_width=0.05, head_length=0.05,color="k",
length_includes_head=True )
105

pl.arrow(0.5*d/c,a/b,0, -d/c*0.1*maxi, fc="k", ec="k",


head_width=0.05, head_length=0.05,color="k",
length_includes_head=True )

106
107

# Oberes linkes Feld.

108

pl.arrow(0.5* d/c,1.5*a/b,-d/c*0.1*maxi, 0, fc="k", ec="k",


head_width=0.05, head_length=0.05,color="k",
length_includes_head=True )

109

pl.arrow(0.5* d/c,1.5*a/b,0, -d/c*0.1*maxi, fc="k", ec="k",


head_width=0.05, head_length=0.05,color="k",
length_includes_head=True )

110

pl.arrow(d/c,1.5*a/b,-d/c*0.1*maxi, 0, fc="k", ec="k",


head_width=0.05, head_length=0.05,color="k",
length_includes_head=True )

111
112

# Oberes rechtes Feld.

113

pl.arrow(1.5* d/c,1.5*a/b,-d/c*0.1*maxi, 0, fc="k", ec="k",


head_width=0.05, head_length=0.05,color="k",
length_includes_head=True )

114

pl.arrow(1.5* d/c,1.5*a/b,0, d/c*0.1*maxi, fc="k", ec="k",


head_width=0.05, head_length=0.05,color="k",

115

pl.arrow(1.5*d/c,a/b,0, d/c*0.1*maxi, fc="k", ec="k",


head_width=0.05, head_length=0.05,color="k",

length_includes_head=True )

length_includes_head=True )
116
117
118

# Zeichnen der Legende und schreibe die Parameter ueber die

119

lgd = plt.legend(loc="upper right", fancybox=True,frameon=

120

plt.title(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f$"%(

Grafik.
True,shadow=True,bbox_to_anchor=(1, 1),fontsize=13)
a,b,c,d),fontsize=15)
121
122

# Speichere die Grafik und zeige sie direkt an.

123

plt.savefig("GG_points_vectors_lotvolt.pdf",
bbox_extra_artists=(lgd,), bbox_inches=tight)

124

pl.show()

125
126 def vectorfield(a,b,c,d,maxi,scalar):
127

"""

128

Zeichnet ein Vektorfeld fuer die gegebenen Parameter und dem

129

"scalar" ist ein Skalar, mit welchem die Skalierung der

Maximalen Wert maxi.


Vektorlaengen festgelegt wird.

84

130

Die Funktion gibt den Aufruf zum Zeichnen der Legende zurueck
und haelt die Grafik im Speicher ausserhalb des
Funktionsspeichers.

131

"""

132
133

# Initialisiere ein numpy-Array fuer die x- und y-Achse und


baue aus letzerem ein Netzwerk aus Punkten zur Berechnung
der Richtungsvektoren in jedem Punkt dieses Netzwerkes.

134

# Speichere dies zwei mal als je eine Koordinaten-Matrix.

135
136

N_1 = pl.arange(0,maxi+0.02*maxi,maxi*0.05)
P_1 = pl.arange(0,maxi+0.2*maxi,maxi*0.05)

137

N,P = pl.meshgrid(N_1, N_1)

138
139

# Berechne die Steigung der Beute als U und die der Raeuber
als V.

140

U = N*(a-b*P)

141

V = P*(c*N-d)

142
143

# Festlegen der Schnittpunkte der Gleichgewichtsgeraden.

144

GG_x = np.array([0,d/c])

145

GG_y = np.array([0,a/b])

146
147
148

# Festlegen des Formats der Grafik.

149

pl.figure(figsize=(8,8))

150

plotstyleset()

151

plt.ylim(0,maxi)

152

plt.xlim(0,maxi)

153
154

# Verschiebe die ganze Grafik um 0.05 nach rechts oben fuer

155

l,r,b1,t = pl.axis()

156

dx, dy = r-l, t-b1

157

pl.axis([l-0.05*dx, r+0.05*dx, b1-0.05*dy, t+0.05*dy])

uebersichtlichere und ansprechendere Grafik.

158
159

# Zeichne die 4 Gleichgewichtsgeraden und speichere Name fuer

160

plt.plot([d/c]*len(P_1),P_1,color=m,zorder=1, label=r"$\

Legende.
frac{d}{c}$")
161

plt.plot(N_1,[a/b]*len(N_1), color="c",zorder=2,label=r"$\
frac{a}{b}$")

162

plt.axhline(color="b",label=r$P(t) = 0$,zorder=3)

163

plt.axvline(color="r",label=r$N(t) = 0$,zorder=4)

164
165

# Zeichne die Schnittpunkte der Gleichgewichtsgeraden

166

plt.plot(GG_x,GG_y,marker="x",color="k",linestyle="",mec="k",
ms=10,mew=1,label=r"$GG-Punkt$",zorder=5)

85

167
168

# Die Beschriftung der Schnittpunkte wurde hier


auskommentiert, aber nicht geloescht, um sie jederzeit
wieder einfuegen zu koennen.

169

# plt.text(GG_x[0]+0.02*K,GG_y[0]+0.02*K,$G_1$,fontsize=15)

170

# plt.text(GG_x[1]+0.02*K,GG_y[1]+0.02*K,$G_2$,fontsize=15)
# plt.text(GG_x[2]+0.02*K,GG_y[2]+0.02*K,$G_3$,fontsize=15)

171
172
173

# Benutze die quiver-Funktion zum Zeichnen der Vektoren in


jedem Punkt des Netzwerks mithilfe der Matrizen U und V.

174

Q = plt.quiver(N,P,U, V,width=0.0007*maxi,zorder=10,angles=
xy, scale_units=xy, scale=1/scalar)

175
176

# Zeichnen und speichern der Legende in lgd und schreibe die


Parameter ueber die Grafik.

177

plt.title(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f$"%(


a,b,c,d),fontsize=15)

178

lgd = plt.legend(loc="upper right", fancybox=True,frameon=


True,shadow=True,bbox_to_anchor=(1.25, 1.1),fontsize=13)

179
180

# Behalte die Grafik in Speicher auch ausserhalb der Funktion


und gebe den Aufruf zum Zeichnen der Legende zurueck.

181

plt.hold(True)

182

return(lgd)

183
184 def solution_G1(a,b,c,d,Anf):
185

"""

186

Berechne die Loesung zum Anfanswert "Anf" mit den gegebenen


Parametern des linearisierten Lotka-Volterra Modells im
Gleichgewichtspunkt G1.

187

"""

188
189

# Festlegen von S, welcher die Eigenvektoren des


linearisierten Lotka-Volterra Modells als Spaltenvektoren
beinhaltet.

190

S = np.array([[1,0],[0,1]])

191
192

# Festlegen des Arrays der Zeitpunkte zu denen die Loesung


berechnet und gezeichnet werden soll.

193

time = [i * 0.025 for i in range(-101,101)]

194
195

# Initialisiere Arrays fuer die zu berechnenden


Populationsgroessen der Raeuber und Beute. Stelle sicher,
sie haben dieselbe Laenge, wie der Zeit-Array.

196

N = [0]*len(time)

197

P = [0]*len(time)

198

86

199

# Berechne c=S*Anf, da die Inverse der Einheitsmatrix wieder


die Einheitsmatrix ergibt.

200

c = S.dot(Anf)

201
202

# Berechne die Loesungen fuer die Beute N und die Raeuber P


und ersetze eine weitere 0 pro Iteration in den Arrays N
und P.

203

for t_0,t in enumerate(time):

204

N[t_0] = c[0]*np.exp(t*a)

205

P[t_0] = c[1]*np.exp(t*d*(-1.0))

206
207

# Gebe die Arrays der Beutepopulation, Raeuberpopulation und


Zeit zurueck, sodass die Funktion zum erstellen der
Grafik die Loesoungsfunktion aufrufen kann.

208

return N,P,time

209
210 def solution_G2(a,b,c,d,Anf):
211

"""

212

Berechne die Loesung zum Anfanswert "Anf" mit den gegebenen


Parametern des linearisierten Lotka-Volterra Modells im
Gleichgewichtspunkt G2.

213

"""

214
215

# Festlegen der Eigenwerte zur Loesung der linearisierung um


G2.

216

lambda_1 = 1j*sqrt(a*d)

217

lambda_2 = -1.0 * lambda_1

218
219

# Festlegen der Eigenvektoren zur Loesung der linearisierung

220

v_11 = (d/c*b) / lambda_2

221

v_12 = (d/c*b) / lambda_1

um G2.

222
223

# Festlegen von S und berechne die Inverse von S und

224

S = np.array([[v_11,v_12],[1,1]])

225

S_1 = np.linalg.inv(S)

definiere als S_1.

226
227

# Aufgrund der Verschiebung in den Ursprung fuer die


Berechnung der Matrix bei der Linearisierung muss fuer
die Berechnung der tatsaechliche Anfangswert um den
Gleichgewichtspunkt verschoben werden.

228

Anf = np.array(Anf)-np.array([d/c,a/b])

229
230

# Berechne c_1 = inv(S)*Anf

231

c_1 = S_1.dot(Anf)

232

87

233

# Festlegen des Arrays der Zeitpunkte zu denen die Loesung

234

time = [i * 0.025 for i in range(401)]

berechnet und gezeichnet werden soll.


235
236

# Initialisiere Arrays fuer die zu berechnenden


Populationsgroessen der Raeuber und Beute. Stelle sicher,
sie haben dieselbe Laenge, wie der Zeit-Array.

237
238

N = [0]*len(time)
P = [0]*len(time)

239
240

# Berechne die Loesungen fuer die Beute N und die Raeuber P


und ersetze eine weitere 0 pro Iteration in den Arrays N
und P.

241

for t_0,t in enumerate(time):

242

N[t_0] = c_1[0]*v_11*cm.exp(t*lambda_1) + c_1[1]*v_12


*cm.exp(t*lambda_2) + d/c

243

P[t_0] = c_1[0]*cm.exp(t*lambda_1) + c_1[1]*cm.exp(t*


lambda_2)

+ a/b

244
245

# Gebe die Arrays der Beutepopulation, Raeuberpopulation und


Zeit zurueck, sodass die Funktion zum erstellen der
Grafik die Loesoungsfunktion aufrufen kann.

246

return N,P,time

247
248
249 def plot_G2(a,b,c,d):
250

"""

251

Zeichnet die Loesungen der Linearisierung um G2 in die


Phasenebene, sowie als Veraenderung ueber die Zeit zu
gegebenen Parametern.

252

"""

253
254

# Initialisiere 4 Anfangswerte: Anf, b_1, b_2, b_3

255

Anf = np.array([1,1])

256

b_2 = np.array([5,2])

257

b_3 = np.array([2,2])

258

b_1 = np.array([1,1])

259
260

###########################################################

261

# Grafik fuer Darstellung der Loesung entlang der Zeitachse

262

###########################################################

263
264

# Berechnung des Loesungsarrays fuer den Anfangswert b_1.

265

N_1,P_1,t_1 = solution_G2(a,b,c,d,b_1)

266
267

# Festlegen des Formats der Grafik.

268

pl.xlabel(r"$Zeit$")

88

269

pl.ylabel(r"$Populationsgr\"o\ss{}e$")

270

plt.axhline(color="0.5")

271

plt.axvline(color="0.5")

272

pl.grid(True)

273
274

# Zeichne die Raeuber- und Beutepopulationen in Abhaengigkeit

275

pl.plot(t_1,P_1,label=r"$R\"auber$",color="r")

276

pl.plot(t_1,N_1,label=r"$Beute$",color = "b")

von der Zeit.

277
278

# Speichern des Aufrufkommandos fuer die Legende und


darstellen der gewaehlten Parameter oberhalb der Grafik,
sowie speichern und anzeigen der Grafik.

279

lgd = plt.legend(loc="upper right", fancybox=True,frameon=


True,shadow=True,bbox_to_anchor=(1.1, 1.1),fontsize=13)

280

plt.title(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 03.1f, \;d=% 3.1f$"


%(a,b,c,d),fontsize=15)

281

pl.savefig(g2_time.pdf, bbox_extra_artists=(lgd,),

282

pl.show()

bbox_inches=tight)
283
284

#######################################################

285

# Grafik in der Phasenebene

286

#######################################################

287
288

# Berechne die Loesungen fuer Anf, b_2 und b_3.

289

N,P,t = solution_G2(a,b,c,d,Anf)

290

N_2,P_2,t_2 = solution_G2(a,b,c,d,b_2)

291

N_3, P_3,t_3 = solution_G2(a,b,c,d,b_3)

292
293

# Bestimmen des Formats der Grafik.

294

plotstyleset()

295

pl.xlim([-4,8])

296
297

# Moeglichkeit Pfeilspizen ans "Ende" der Achsen zu setzen.

298

# pl.arrow(0,0, 5.6, 0, fc="0.75", ec="0.75", head_width=0.3,

299

# pl.arrow( 0, 0, 0, 7.6, fc="0.75", ec="0.75", head_width

head_length=0.5 ,color="0.75")
=0.3, head_length=0.5 ,color="0.75")
300
301

# Zeichne die 3 Loesungen ein.

302

pl.plot(N, P, label = r"$b = (1,1)$",color="b")

303

pl.plot(N_2,P_2, label = r"$b = (5,2)$",color="g")

304

pl.plot(N_3,P_3, label = r"$b = (2,2)$",color="r")

305
306

# Einzeichnen des Gleichgewichtspunkts.

307

pl.plot([0.9/1.0],[2/1.2],"co",label=r"$GG-Punkt$")

89

308
309

# Einzeichnen der Pfeile in die jeweiligen Loesungengraphen


zur Darstellung der Veraenderungsrichtung der
Populationsgroessen ueber die Zeit.

310

pl.arrow( N[101] + 0.25, P[101] +0.1, N[101]-N[100], P[101]-P


[100], fc="b", ec="b",

head_width=0.3, head_length

=0.4 ,color="b")
311

pl.arrow( N_2[0] -0.01, P_2[0] -0.01, N_2[1]-N_2[0], P_2[1]P_2[0], fc="g", ec="g",

head_width=0.3, head_length

=0.4,color="g" )
312

pl.arrow( N_3[0] -0.01, P_3[0] -0.01, N_3[1]-N_3[0], P_3[1]P_3[0], fc="r", ec="r",

head_width=0.3, head_length

=0.4,color="r" )
313
314
315

# Speichern des Aufrufkommandos fuer die Legende und


darstellen der gewaehlten Parameter oberhalb der Grafik,
sowie speichern und anzeigen der Grafik.

316

lgd = plt.legend(loc="upper right", fancybox=True,frameon=


True,shadow=True,bbox_to_anchor=(1.15, 1.1),fontsize=13)

317

plt.title(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f$"%(


a,b,c,d),fontsize=15)

318

pl.savefig("g_2.pdf", bbox_extra_artists=(lgd,), bbox_inches=

319

pl.show()

tight)
320
321 def plot_G1(a,b,c,d):
322

"""

323

Zeichnet die Loesungen der Linearisierung um G2 in die


Phasenebene, sowie als Veraenderung ueber die Zeit zu
gegebenen Parametern.

324

"""

325
326

# Initialisiere 4 Anfangswerte: Anf, b_1, b_2, b_3

327

Anf = np.array([1,1])

328

b_2 = np.array([5,2])

329

b_3 = np.array([2,2])

330

b_1 = np.array([1,1])

331
332

###########################################################

333

# Grafik fuer Darstellung der Loesung entlang der Zeitachse

334

###########################################################

335
336

# Berechnung der Loesung fuer den Anfangswert b_1.

337

N_1,P_1,t_1 = solution_G1(2,1.2,1,0.9,b_1)

338
339

# Festlegen des Formats der Grafik.

90

340

pl.xlabel(r"$Zeit$")

341

pl.ylabel(r"$Populationsgr\"o\ss{}e$")

342

pl.ylim([0,20])

343

plt.yticks(np.arange(0, 20, 1.0))

344

pl.grid(True)

345

plt.axhline(color="0.75")

346

plt.axvline(color="0.75")

347
348

# Zeichne die Raeuber- und Beutepopulationen in Abhaengigkeit


von der Zeit.

349

pl.plot(t_1[101:202],P_1[101:202],label=r"$R\"auber$",color="

350

pl.plot(t_1[101:202],N_1[101:202],label=r"$Beute$",color = "b

r")
")
351
352

# Speichern des Aufrufkommandos fuer die Legende und


darstellen der gewaehlten Parameter oberhalb der Grafik,
sowie speichern und anzeigen der Grafik.

353

lgd = plt.legend(loc="upper right", fancybox=True,frameon=


True,shadow=True,bbox_to_anchor=(1.1, 1.1),fontsize=13)

354

plt.title(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f$"%(


a,b,c,d),fontsize=15)

355

pl.savefig(g1_time.pdf, bbox_extra_artists=(lgd,),

356

pl.show()

bbox_inches=tight)
357
358

#######################################################

359

# Grafik in der Phasenebene

360

#######################################################

361
362

# Berechne die Loesungen fuer Anf, b_2 und b_3.

363

N,P,t = solution_G1(a,b,c,d,Anf)

364

N_2,P_2,t_2 = solution_G1(a,b,c,d,b_2)

365

N_3, P_3,t_3 = solution_G1(a,b,c,d,b_3)

366
367
368

# Bestimmen des Formats der Grafik.

369

plotstyleset()

370

pl.xlim([0,20])

371

pl.ylim([0,10])

372

plt.yticks(np.arange(0, 11, 1.0))

373

plt.xticks(np.arange(0, 20, 1.0))

374
375

# Zeichne die 3 Loesungen ein.

376

pl.plot(N, P, label = r"$b = (1,1)$",color="b")

377

pl.plot(N_2,P_2, label = r"$b = (5,2)$",color="g")

378

pl.plot(N_3,P_3, label = r"$b = (2,2)$",color="r")

91

379
380

# Einzeichnen der Pfeile in die jeweiligen Loesungengraphen


zur Darstellung der Veraenderungsrichtung der
Populationsgroessen ueber die Zeit.

381

pl.subplot(111)

382

pl.arrow( N[101] +0.01, P[101] +0.01, N[101]-N[100], P[101]-P


[100], fc="b", ec="b", head_width=0.3, head_length=0.4 ,
color="b")

383

pl.arrow( N_2[101] +0.01, P_2[101] +0.01, N_2[101]-N_2[100],


P_2[101]-P_2[100], fc="g", ec="g", head_width=0.3,
head_length=0.4,color="g" )

384

pl.arrow( N_3[101] +0.01, P_3[101] +0.01, N_3[101]-N_3[100],


P_3[101]-P_3[100], fc="r", ec="r", head_width=0.3,
head_length=0.4,color="r" )

385
386

# Speichern des Aufrufkommandos fuer die Legende und


darstellen der gewaehlten Parameter oberhalb der Grafik,
sowie speichern und anzeigen der Grafik.

387

lgd = plt.legend(loc="upper right", fancybox=True,frameon=


True,shadow=True,bbox_to_anchor=(1.1, 1.1),fontsize=13)

388

plt.title(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f$"%(


a,b,c,d),fontsize=15)

389

pl.savefig("g_1.pdf", bbox_extra_artists=(lgd,), bbox_inches=

390

pl.show()

tight)
391
392 def plotstyleset():
393

"""

394

Standardformatierung fuer die Graphiken der Phasenebene.

395

"""

396

pl.xlabel(r$Beute$)

397

pl.ylabel(r$R\"auber$)

398

plt.axhline(color="0.75")

399

plt.axvline(color="0.75")

400

pl.grid(True)

401
402 # Aufruf der Funktionen und Ausfuehurung des Programms zum zeichnen
der Grafiken.
403 if __name__ == __main__:
404
405

# Bestimme die Parameter, fuer die die Grafiken erstellt

406

a = 2

407

b = 1.2

408

c = 1

409

d = 0.9

werden sollen.

410

92

411

# Bestimme maxi als maximalen Wert fuer GG_points und

412

maxi = 2.5

GG_points_vectors.
413
414

# Aufruf der Funktionen, welche fuer die gegebenen Parameter


ihre speziellen Graphen zeichnen und speichern

415

plot_G2(a,b,c,d)

416

plot_G1(a,b,c,d)

417

GG_points(a,b,c,d,maxi)

418

GG_points_vectors(a,b,c,d,maxi)

419
420

# Aufrufen der Funktion zum Zeichnen des Vektorfelds fuer das


Lotka-Volterra Modell und gegebenen Parametern.

421

# Speichere den Aufruf zum Zeichnen der Legende in lgd

422

# Waehlte diesen Weg um unterschiedliche Skalierungen in

423

lgd = vectorfield(a,b,c,d,maxi,0.05)

424

# Speichere und zeige die Grafik.

425

plt.savefig("vectorfield_lotvolt.pdf", bbox_extra_artists=(

unterschiedlichen Dateien speichern zu koennen.

lgd,), bbox_inches=tight)
426

plt.show(lgd)

D.1.2

3D-Grafiken und Trajektorie

1 #------------------------------------------------------------------2 # Zeichne 3D-Grafiken und Trajektroie fuer das Lotka-Volterra Modell.


3 #------------------------------------------------------------------4 # Importieren der noetigen python-libraries.
5 from mpl_toolkits.mplot3d import Axes3D
6 import matplotlib.pyplot as plt
7 from matplotlib import cm
8 import matplotlib as mpl
9 import numpy as np
10 from scipy import linalg
11 import pylab as pl
12 import seaborn
13
14 def fig_3d(N,P,E,c_2,par):
15

"""

16

Zeichnet und speichert 3d-Plots der Funktion E mit der


allgemeinen Konstante c_2 aus vier verschiedenen
Blickwinkeln zu gegebenen Parametern par.

17

"""

18
19

# Addiere zu dem gegebenen E(N,P) die Allgemeine Konstante,


welche aus dem Anfangswert berechnet wurde, um die E(N,P)
-Funktion auf die Richtige Hoehe zu positionieren.

20

E = E + c_2

93

21
22

# Festlegen des Formats der Grafik.

23

fig_1 = pl.figure()

24

seaborn.set_style("whitegrid")

25
26

# Starte eine Untergrafik mit der Projektion 3D, kreiere also

27

bx = fig_1.add_subplot(111, projection=3d)

28

bx.set_ylabel(r$R\"auber$,fontsize=18)

29

bx.set_xlabel(r$Beute$,fontsize=18)

30

bx.set_zlabel(r$E(N,P)$,fontsize=18)

31

bx.auto_scale_xyz([0, 15], [0, 15], [0, 20])

ein 3d-Projekt.

32
33
34

# Finde die maximalen und minimalen Werte der E(N,P)-Funktion

35

chmax = np.amax(E)

36

chmin = np.min(E)

zum festlegen der Randwerte fuer die Farbcodierung.

37
38

# Festlegen der Randwerte fuer die Normalisierung fuer die

39

norm = mpl.colors.Normalize(vmin=chmin+ 1/3*(chmax - chmin),


vmax=chmax+1/10*(chmax-chmin))

Farbcodierung in Norm

40
41

# Zeichne eine Oberflaechengrafik um die 3D-Eigenschaften von

42

surf = bx.plot_surface(N, P, E, rstride=5, cstride=5,cmap=

E(N,P) darzustellen.
hot,norm=norm,linewidth=0,antialiased=False)
43
44

# Initialisiere einen Array um 4 verschieden Blickwinkel

45

view = np.array([-128]*4)
# Nutze die unten stehende if-else-Entscheidung um 4

erstellen zu koennen.
46

Blickwindel in je 90 Grad Winkel.


47
48
49

for i in range(len(view)):
view[i] += 90*i
if view[i] > 0:

50

view[i] -= 360

51
52

# Erhalte die Parameter aus den gegebenen und schreibe sie


oberhalb die Grafik. Reduziere ausserdem die Raender der
erstellen Grafiken.

53

a,b,c,d = par

54

bx.set_title(r$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f$

55

fig_1.tight_layout()

56

# Erstelle die Grafiken aus 4 Verschiedenen Blickwinkeln und

%(a,b,c,d),fontsize=18)

94

speichere sie.
57

for i in view:

58

bx.view_init(elev=11,azim=i)

59

pl.savefig("view%i_ed.pdf"%i)

60
61 def fig_3d_big(N,P,E,c_2,par):
62

"""

63

Zeichnet und speichert einen 3d-Plot der Funktion E mit der

64

"""

allgemeinen Konstante c_2 zu gegebenen Parametern par.


65
66

# Addiere zu dem gegebenen E(N,P) die Allgemeine Konstante,


welche aus dem Anfangswert berechnet wurde, um die E(N,P)
-Funktion auf die Richtige Hoehe zu positionieren.

67

E = E + c_2

68
69

# Festlegen des Formats der Grafik.

70

fig_1 = pl.figure()

71

seaborn.set_style("whitegrid")

72
73

# Starte eine Untergrafik mit der Projektion 3D, kreiere also


ein 3d-Projekt.

74

bx = fig_1.add_subplot(111, projection=3d)

75

bx.set_ylabel(r$R\"auber$)

76

bx.set_xlabel(r$Beute$)

77

bx.set_zlabel(r$E(N,P)$)

78

bx.auto_scale_xyz([0, 15], [0, 15], [0, 20])

79
80
81

# Finde die maximalen und minimalen Werte der E(N,P)-Funktion

82

chmax = np.amax(E)

83

chmin = np.min(E)

zum festlegen der Randwerte fuer die Farbcodierung.

84
85

# Festlegen der Randwerte fuer die Normalisierung fuer die


Farbcodierung in Norm

86

norm = mpl.colors.Normalize(vmin=chmin+ 1/3*(chmax - chmin),


vmax=chmax+1/10*(chmax-chmin))

87
88

# Zeichne eine Oberflaechengrafik um die 3D-Eigenschaften von


E(N,P) darzustellen.

89

surf = bx.plot_surface(N, P, E, rstride=5, cstride=5,cmap=


hot,norm=norm,linewidth=0,antialiased=False)

90
91

# Erhalte die Parameter aus den gegebenen und schreibe sie


oberhalb die Grafik. Reduziere ausserdem die Raender der
erstellen Grafiken.

95

92

a,b,c,d = par

93

bx.set_title(r$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f$


%(a,b,c,d),fontsize=15)

94

bx.view_init(elev=11,azim=-128)

95

fig_1.tight_layout()

96
97

# Erstelle die Grafik und speichere sie.

98

pl.savefig("3d_big.pdf")

99
100
101 def Trajeketorie(N,P,E,c_2,par):
102

"""

103

Zeichnet eine Trajektorie zu den Gegebenen Funktionen, wobei

104

"""

E eine 3d-Funktion ist.


105
106

# Festlegen des Formats der Grafik.

107

fig_2 = pl.figure()

108

seaborn.set_style("whitegrid")

109

pl.ylabel(r"$R\"auber$")

110

pl.xlabel(r"$Beute$")

111

plt.xticks(np.arange(0, 100, 5))

112
113

# Setze die Level in denen die Trajektorien berechnet werden


sollen

114

level = [0,3,6,9,12,15]

115
116

# Addiere die Allgemeine Konstante c_2 zu den Levels um die


Passenden Schnitte der E-Funktion zu nehmen.

117
118

for i,lev in enumerate(level):


level[i] += c_2

119
120

# Im folgenden werden 2 Funktionen verwendet um Hoehenlinien


mit unterschiedlichen Farben als Fuellungen zu zeichnen.

121

# Nutze die Funktion contourf um gefuellte Hoehenlinien zu


erstellen.

122

cset1 = plt.contourf(N,P,

E, zdir=z, offset=0, cmap=pl.cm.

hot,levels=level,alpha=0.9)
123

# Nutze die Funktion contour um nur die Hoehenlinien zu

124

cset2 = plt.contour(N,P, E, zdir=z, offset=0, levels=cset1.

erstellen.
levels, colors = k, hold=on,alpha=0.9)
125
126

# Bestimme die Linienform als durchgezogen.

127

for c in cset2.collections:

128

c.set_linestyle(solid)

129

96

130

# Setze die Farbcodierung rechts von der Grafik.

131

fig_2.colorbar(cset1, format="%.1f",label="Wert der


Allgemeinen Konstante")

132
133

# Schreibe die verwendeten Parameter ueber die Grafik.

134

a,b,c,d = par

135

plt.title(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f$"%(


a,b,c,d),fontsize=15)

136
137

# Speichere und zeige die Grafik.

138

pl.savefig("Trajektorie.pdf")

139

pl.show()

140
141 def params(a,b,c,d,Anf):
142

"""

143

Die Funktion nimmt die Parameter und den Anfangswert des


Lotka-Volterra Modells und gibt 2 meshgrids fuer die
Werte von N und P zurueck, sowie E(N,P).

144

Als Zusatz wurde die Allgemeine Konstante fuer E(N,P)


berechnet, und zusammen mit den Parametern als Tupel und
oben genannten Objekten zurueckgegeben.

145

"""

146

# Berechne die allgemeine Konstante fuer E(N,P)

147

c_2 = - a * np.log(Anf[1])+b * Anf[1] + c*Anf[0] - d * np.log


(Anf[0])

148
149

# Drucke den Wert der Allgemeinen Konstante in der Konsole

150

print("Allgemeine Konsante:", c_2)

151
152

# Initialisiere ein numpy-Array fuer die x- und y-Achse und


baue aus letzerem ein Netzwerk aus Punkten zur Berechnung
der Richtungsvektoren in jedem Punkt dieses Netzwerkes.

153

# Speichere dies zwei mal als je eine Koordinaten-Matrix.

154

N = np.arange(0.001,1,0.001)

155

N = np.append(N, np.arange(1.1, 100, 0.2))

156

P = np.arange(0.001,1,0.001)

157

P = np.append(P, np.arange(1.1, 30, 0.2))

158

N, P = np.meshgrid(N, P)

159
160

# Berechne die einzelnen Terme fuer und im Anschluss E(N,P)


selbst.

161
162
163

N_1 = np.log(N)*d - c*N


P_1 = np.log(P)*a - b*P
E = P_1+N_1

164
165

# Gebe fuer das Zeichnen der Grafik die Matrizen N und P und
E zurueck, sowie die allgemeine Konstante c_2 und die

97

Parameter als Tupel.


166

return N,P,E,c_2,(a,b,c,d)

167
168 if __name__ == __main__:
169

# Berechne E(N,P) und alle wichtigen zugehoerigen Parameter


und uebergebe sie in die Grafikzeichenfunktionen fig_3d
und Trajektorie.

170

N,P,E,c_2,par = params(5,1,0.3,4,[3,3])

171
172

fig_3d(N,P,E,c_2,par)

173

fig_3d_big(N,P,E,c_2,par)

174

Trajeketorie(N,P,E,c_2,par)

D.2

Logistisches Lotka-Volterra Modell

1 #-------------------------------------------------------------------2 # Zeichne Grafiken der Loesungen fuer G_1 und G_2 des Logistischen
Modells.
3 #-------------------------------------------------------------------4 # Importieren der noetigen python-libraries.
5 import numpy as np
6 from scipy import linalg
7 import pylab as pl
8 import matplotlib.pyplot as plt
9 import seaborn
10 import cmath as cm
11 from math import *
12 from matplotlib import rcParams
13 import matplotlib as mpl
14 from scipy.integrate import odeint
15
16
17 def GG_points(a,b,c,d,K):
18

"""

19

Zeichnet und speichert eine Grafik der Gleichgewichtsgeraden

20

Nutze K ebenfalls als Maximalwert fuer die Grafik.

21

"""

fuer gegebene Parameter.

22
23

# Initialisiere numpy-Arrays fuer x- und y-Achse.

24

N_1 = pl.arange(0,K+0.1,K*0.05)

25

P_1 = pl.arange(0,K+2,K*0.05)

26
27

# Bestimme die Gleichgewichtsgerade fuer G2.

28

G_2 = a/b *(1- N_1 /K)

29
30

# Festlegen der Schnittpunkte der Gleichgewichtsgeraden.

31

GG_x = np.array([0,d/c,K])

98

32
33

GG_y_2 = a/b*(1-(d/c)/K)
GG_y = np.array([0,GG_y_2,0])

34
35

# Festlegen des Formats der Grafik.

36

fig = plt.figure()

37

rcParams[xtick.labelsize] = 12

38

rcParams[ytick.labelsize] = 12

39

rcParams.update({font.size: 15})

40

plt.xlabel(r$Beute$,fontsize=15)

41

plt.ylabel(r$R\"auber$,fontsize=15)

42

plt.grid(True)

43

plt.ylim(-.5,K+1)

44

plt.xlim(-.5,K+1)

45
46

# Zeichne die 4 Gleichgewichtsgeraden und speichere Namen

47

plt.plot([d/c]*len(P_1),P_1,color=m, label=r"$\frac{d}{c}$"

48

plt.plot(N_1,G_2, color="c",label=r"$P(t) = \,\frac{a}{b}\

fuer Legende.
)
cdot\left(\,1-\,\frac{N(t)}{cK}\right)$")
49

plt.axhline(color="b",label=r$P(t) = 0$)

50

plt.axvline(color="r",label=r$N(t) = 0$)

51
52

# Zeichne und beschrifte die Schnittpunkte.

53

plt.plot(GG_x,GG_y,marker="x",color="k",linestyle="",mec="k",

54

plt.text(GG_x[0]+0.02*K,GG_y[0]+0.02*K,$G_1$,fontsize=15)

55

plt.text(GG_x[1]+0.02*K,GG_y[1]+0.02*K,$G_2$,fontsize=15)

56

plt.text(GG_x[2]+0.02*K,GG_y[2]+0.02*K,$G_3$,fontsize=15)

ms=10,mew=1,label=r"$GG-Punkt$")

57
58

# Zeichnen der Legende und schreibe die Parameter ueber die


Grafik.

59

plt.legend(loc="upper right", fancybox=True,frameon=True,


shadow=True,bbox_to_anchor=(1.05, 1.0),fontsize=13)

60

plt.title(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f, \;


K=%i$"%(a,b,c,d,K),fontsize=15)

61
62

# Speichere die Grafik und zeige sie direkt an.

63

plt.savefig("GG_points.pdf")

64

pl.show()

65
66 def GG_points_vectors(a,b,c,d,K):
67

"""

68

Zeichnet und speichert eine Grafik der Gleichgewichtsgeraden

69

Die durch die Gleichgewichtsgeraden entstehenden 4 Felder

des Logistischen-Modells.
enthalten zusaetzlich je eine Gruppe von 2 Vektoren,

99

welche die Wachstumsrichtung der Beute- bzw.


Raeuberpopulationen anzeigt.
70

An den Gleichgewichtsgeraden selbst wird pro Feld je 1 Vektor


gezeichnet, welcher die Wachstumsrichtung der Population
zeigt, welche nicht im Gleichgewicht ist.

71

"""

72
73

# Initialisiere numpy-Arrays fuer x- und y-Achse.

74

N_1 = pl.arange(0,K+0.1,K*0.05)

75

P_1 = pl.arange(0,K+2,K*0.05)

76
77

# Bestimme die Gleichgewichtsgerade fuer G2.

78

G_2 = a/b *(1- N_1 /K)

79
80

# Festlegen der Schnittpunkte der Gleichgewichtsgeraden.

81

GG_x = np.array([0,d/c,K])

82

GG_y_2 = a/b*(1-(d/c)/K)

83

GG_y = np.array([0,GG_y_2,0])

84
85

# Festlegen des Formats der Grafik.

86

fig = plt.figure()

87

rcParams[xtick.labelsize] = 12

88

rcParams[ytick.labelsize] = 12

89

rcParams.update({font.size: 15})

90

plt.xlabel(r$Beute$,fontsize=15)

91

plt.ylabel(r$R\"auber$,fontsize=15)

92

pl.grid(True)

93

plt.ylim(-.5,K+1)

94

plt.xlim(-.5,K+1)

95
96

# Zeichne die 4 Gleichgewichtsgeraden und speichere Name fuer


Legende.

97

plt.plot([d/c]*len(P_1),P_1,color=m, label=r"$\frac{d}{c}$"
)

98

plt.plot(N_1,G_2, color="c",label=r"$P_1(t) = \,\frac{a}{b}\


cdot\left(\,1-\,\frac{N(t)}{cK}\right)$")

99

plt.axhline(color="b",label=r$P(t) = 0$)

100

plt.axvline(color="r",label=r$N(t) = 0$)

101
102

# Zeichne und beschrifte die Schnittpunkte.

103

plt.plot(GG_x,GG_y,marker="x",color="k",linestyle="",mec="k",

104

plt.text(GG_x[0]+0.02*K,GG_y[0]+0.02*K,$G_1$,fontsize=15)

105

plt.text(GG_x[1]+0.02*K,GG_y[1]+0.02*K,$G_2$,fontsize=15)

106

plt.text(GG_x[2]+0.02*K,GG_y[2]+0.02*K,$G_3$,fontsize=15)

ms=10,mew=1,label=r"$GG-Punkt$")

107
108

100

109

## Zeichne die jeweiligen Vektoren in jedes der 4 Felder.

110
111

# Unteres rechtes Feld.

112

pl.arrow(15,2,1, 0, fc="k", ec="k",head_width=0.3,

113

pl.arrow(15,2,0, 1, fc="k", ec="k",head_width=0.3,

114

pl.arrow(d/c,2,1, 0, fc="k", ec="k",head_width=0.3,

head_length=0.4,color="k" )
head_length=0.4,color="k" )
head_length=0.4,color="k" )
115
116

# Unteres linkes Feld.

117

pl.arrow(5,6.5,1, 0, fc="k", ec="k",head_width=0.3,


head_length=0.4,color="k" )

118

pl.arrow(5,6.5,0, -1, fc="k", ec="k",head_width=0.3,


head_length=0.4,color="k" )

119

pl.arrow(5,15,0, -1, fc="k", ec="k",head_width=0.3,


head_length=0.4,color="k" )

120
121

# Oberes linkes Feld.

122

pl.arrow(17,12,-1, 0, fc="k", ec="k",head_width=0.3,

123

pl.arrow(17,12,0, 1, fc="k", ec="k",head_width=0.3,

124

pl.arrow(17,a/b *(1-17/K),0, 1, fc="k", ec="k",head_width


=0.3, head_length=0.4,color="k" )

head_length=0.4,color="k" )
head_length=0.4,color="k" )

125
126

# Oberes rechtes Feld.

127

pl.arrow(8,18,-1, 0, fc="k", ec="k",head_width=0.3,


head_length=0.4,color="k" )

128

pl.arrow(8,18,0, -1, fc="k", ec="k",head_width=0.3,

129

pl.arrow(d/c,18,-1, 0, fc="k", ec="k",head_width=0.3,

head_length=0.4,color="k" )
head_length=0.4,color="k" )
130
131
132

# Zeichnen der Legende und schreibe die Parameter ueber die

133

lgd = plt.legend(loc="upper right", fancybox=True,frameon=

Grafik.
True,shadow=True,bbox_to_anchor=(1.3, 1.1),fontsize=13)
134

plt.title(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f, \;


K=%i$"%(a,b,c,d,K),fontsize=15)

135
136

# Speichere die Grafik und zeige sie direkt an.

137

plt.savefig("GG_points_vectors.pdf", bbox_extra_artists=(lgd

138

pl.show()

,), bbox_inches=tight)
139

101

140 def streamfield(a,b,c,d,K):


141

"""

142

Erstellt ein Stromlinienfeld fuer die gegebenen Parameter

143

"""

144

# Initialisiere ein numpy-Array fuer die x- und y-Achse und

fuer das logistsiche Raeuber Beute Modell.

baue aus letzerem ein Netzwerk aus Punkten zur Berechnung


der Richtungsvektoren in jedem Punkt dieses Netzwerkes.
145

# Speichere dies zwei mal als je eine Koordinaten-Matrix.

146
147

N_1 = pl.arange(0, K+0.02*K, K*0.05)


P_1 = pl.arange(0,K+0.2*K,K*0.05)

148

N,P = pl.meshgrid(N_1, N_1)

149
150

# Berechne die Steigung der Beute als U und die der Raeuber
als V.

151

U = N*(a*(1-N /K)-b*P)

152

V = P*(c*N-d)

153
154

# Bestimme die Gleichgewichtsgerade fuer G2.

155

G_2 = a/b *(1- N_1/K)

156
157

# Festlegen der Schnittpunkte der Gleichgewichtsgeraden.

158

GG_x = np.array([0,d/c,K])

159

GG_y_2 = a/b*(1-(d/c)/K)

160

GG_y = np.array([0,GG_y_2,0])

161
162

# Festlegen des Formats der Grafik.

163

pl.figure()

164

plotstyleset()

165

plt.ylim(0,K+0.1)

166

plt.xlim(0,K+0.1)

167
168

# Zeichne die 2 Gleichgewichtsgeraden und halte die Option


offen die letzten 2 hinzuzufuegen. Sie sind
auskommentiert.

169

plt.plot([d/c]*len(P_1),P_1,color=m,zorder=1, label=r"$\

170

plt.plot(N_1,G_2, color="c",zorder=2,label=r"$\frac{% 3.1f}{%

frac{% 3.1f}{% 3.1f}$"%(d,c))


3.1f}\cdot\left(\,1-\,\frac{N(t)}{{% 3.1f}\cdot %i}\
right)$"%(a,b,c,K))
171

#plt.axhline(color="b",label=r$P(t) = 0$,zorder=3)

172

#plt.axvline(color="r",label=r$N(t) = 0$,zorder=4)

173
174

# Zeichne und beschrifte die Schnittpunkte.

175

plt.plot(GG_x,GG_y,marker="x",color="k",linestyle="",mec="k",
ms=10,mew=1,label=r"$GG-Punkt$",zorder=5)

176

plt.text(GG_x[0]+0.02*K,GG_y[0]+0.02*K,$G_1$,fontsize=15,

102

zorder=11)
177

plt.text(GG_x[1]+0.02*K,GG_y[1]+0.02*K,$G_2$,fontsize=15,
zorder=11)

178

plt.text(GG_x[2]+0.02*K,GG_y[2]+0.02*K,$G_3$,fontsize=15,
zorder=11)

179
180

# Definiere die Variable "norm", welche den maximalen und


minimalen Wert fuer die Farbcodierung der
Steigungsintensitaet im Strominienefeld festzulegen.

181

norm = mpl.colors.Normalize(vmin=np.min(U)-1/10*(np.max(U)-np
.min(U)), vmax=np.max(U)+2/5*(np.max(U)-np.min(U)))

182
183

# Nutze die Funktion streamplot um das Stromlinienfeld zu

184

Q = pl.streamplot(N,P,U, V,zorder=10,color=U, linewidth=2,

zeichnen.
cmap=plt.cm.hot,norm=norm)#,angles=xy, scale_units=xy
, scale=1/0.1,width=0.0001*K)#,scale=1/0.002)
185
186

# Hinzufuegen der Farbcodierung rechts der Grafik

187

plt.colorbar()

188
189

# Verschiebe die ganze Grafik um 0.05 nach rechts oben fuer

190

l,r,b1,t = pl.axis()

191

dx, dy = r-l, t-b1

192

pl.axis([l-0.05*dx, r+0.05*dx, b1-0.05*dy, t+0.05*dy])

uebersichtlichere und ansprechendere Grafik.

193
194

# Zeichnen der Legende und schreibe die Parameter ueber die


Grafik.

195

plt.title(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f, \;

196

lgd = plt.legend(loc="upper right", fancybox=True,frameon=

K=%i$"%(a,b,c,d,K),fontsize=15)
True,shadow=True,bbox_to_anchor=(1.6, 1.1),fontsize=13)
197
198

# Behalte die Grafik in Speicher auch ausserhalb der Funktion


und gebe den Aufruf zum Zeichnen der Legende zurueck.

199

plt.hold(True)

200

return(lgd)

201
202 def vectorfield(a,b,c,d,K,scalar):
203

"""

204

Zeichnet ein Vektorfeld fuer die gegebenen Parameter und


nutze wieder K als maximalen Wert.

205

"scalar" ist ein Skalar, mit welchem die Skalierung der

206

Die Funktion gibt den Aufruf zum Zeichnen der Legende zurueck

Vektorlaengen festgelegt wird.


und haelt die Grafik im Speicher ausserhalb des

103

Funktionsspeichers.
207

"""

208
209

# Initialisiere ein numpy-Array fuer die x- und y-Achse und


baue aus letzerem ein Netzwerk aus Punkten zur Berechnung
der Richtungsvektoren in jedem Punkt dieses Netzwerkes.

210

# Speichere dies zwei mal als je eine Koordinaten-Matrix.

211
212

N_1 = pl.arange(0,K+0.02*K,K*0.05)
P_1 = pl.arange(0,K+0.2*K,K*0.05)

213

N,P = pl.meshgrid( N_1, N_1)

214

# Festlegen der Gleichgewichtsgeraden fuer G2.

215

G_2 = a/b *(1- N_1/K)

216
217

# Berechne die Steigung der Beute als U und die der Raeuber
als V.

218

U = N*(a*(1-N /K)-b*P)

219

V = P*(c*N-d)

220
221

# Festlegen der Schnittpunkte der Gleichgewichtsgeraden.

222

GG_x = np.array([0,d/c,K])

223

GG_y_2 = a/b*(1-(d/c)/K)

224

GG_y = np.array([0,GG_y_2,0])

225
226

# Festlegen des Formats der Grafik.

227

pl.figure()

228

plotstyleset()

229

plt.ylim(0,K+0.1)

230

plt.xlim(0,K+0.1)

231
232

# Verschiebe die ganze Grafik um 0.05 nach rechts oben fuer

233

l,r,rb,t = pl.axis()

234

dx, dy = r-l, t-rb

235

pl.axis([l-0.05*dx, r+0.05*dx, rb-0.05*dy, t+0.05*dy])

uebersichtlichere und ansprechendere Grafik.

236
237

# Zeichne die 4 Gleichgewichtsgeraden und speichere Name fuer

238

plt.plot([d/c]*len(P_1),P_1,color=m,zorder=1, label=r"$\

Legende.
frac{d}{c}$")
239

plt.plot(N_1,G_2, color="c",zorder=2,label=r"$P(t) = \,\frac{


a}{b}\cdot\left(\,1-\,\frac{N(t)}{cK}\right)$")

240

plt.axhline(color="b",label=r$P(t) = 0$,zorder=3)

241

plt.axvline(color="r",label=r$N(t) = 0$,zorder=4)

242
243

# Zeichne die Schnittpunkte der Gleichgewichtsgeraden

244

plt.plot(GG_x,GG_y,marker="x",color="k",linestyle="",mec="k",
ms=10,mew=1,label=r"$GG-Punkt$",zorder=5)

104

245
246

# Die Beschriftung der Schnittpunkte wurde hier


auskommentiert, aber nicht geloescht, um sie jederzeit
wieder einfuegen zu koennen.

247

# plt.text(GG_x[0]+0.02*K,GG_y[0]+0.02*K,$G_1$,fontsize=15)

248

# plt.text(GG_x[1]+0.02*K,GG_y[1]+0.02*K,$G_2$,fontsize=15)
# plt.text(GG_x[2]+0.02*K,GG_y[2]+0.02*K,$G_3$,fontsize=15)

249
250
251
252

# Benutze die quiver-Funktion zum Zeichnen der Vektoren in

253

Q = pl.quiver(N,P,U, V,width=0.0001*K,zorder=10,angles=xy,

jedem Punkt des Netzwerks mithilfe der Matrizen U und V.


scale_units=xy, scale=1/scalar)#,scale=1/0.002)
254
255
256

# Zeichnen und speichern der Legende in lgd und schreibe die


Parameter ueber die Grafik

257

plt.title(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f, \;

258

lgd = plt.legend(loc="upper right", fancybox=True,frameon=

K=%i$"%(a,b,c,d,K),fontsize=15)
True,shadow=True,bbox_to_anchor=(1.35, 1.1),fontsize=13)
259
260

# Behalte die Grafik in Speicher auch ausserhalb der Funktion

261

plt.hold(True)

262

return(lgd)

und gebe den Aufruf zum Zeichnen der Legende zurueck.

263
264 def solution_G3(a,b,c,d,K,Anf):
265

"""

266

Berechne die Loesung zum Anfanswert "Anf" mit den gegebenen


Parametern des linearisierten Logistischen Modells im
Gleichgewichtspunkt G3.

267

"""

268

# Festlegen des Gleichgewichtspunktes G3 als G

269

G = np.array([K,0])

270
271

# Festlegen der Eigenwerte zur Loesung der linearisierung um

272

lambda_1 = -a

273

lambda_2 = c*K-d

G3.

274
275

# Festlegen der Eigenvektoren zur Loesung der linearisierung


um G3.

276

v_11 = 1

277

v_12 = 0

278
279

v_21 = -1

105

280

v_22 = (a+c*K-d) / (K*b)

281
282

# Festlegen von S und berechne die Inverse von S und

283

S = np.array([[v_11,v_21],[v_12,v_22]])

284

S_1 = np.linalg.inv(S)

definiere als S_1.

285
286

# Aufgrund der Verschiebung in den Ursprung fuer die


Berechnung der Matrix bei der Linearisierung muss fuer
die Berechnung der tatsaechliche Anfangswert um den
Gleichgewichtspunkt verschoben werden.

287

Anf = np.array(Anf) - G

288
289

# Berechne c_1 = inv(S)*Anf

290

c_1 = S_1.dot(Anf)

291
292

# Festlegen des Arrays der Zeitpunkte zu denen die Loesung

293

time = [i * 0.025 for i in range(401)]

berechnet und gezeichnet werden soll.


294
295

# Initialisiere Arrays fuer die zu berechnenden


Populationsgroessen der Raeuber und Beute. Stelle sicher,
sie haben dieselbe Laenge, wie der Zeit-Array.

296

N = [0]*len(time)

297

P = [0]*len(time)

298
299

# Berechne die Loesungen fuer die Beute N und die Raeuber P


und ersetze eine weitere 0 pro Iteration in den Arrays N
und P.

300

for t_0,t in enumerate(time):

301

N[t_0] = c_1[0]*v_11*cm.exp(t*lambda_1) + c_1[1]*v_21


*cm.exp(t*lambda_2) + G[0]

302

P[t_0] = c_1[0]*v_12*cm.exp(t*lambda_1) + c_1[1]*v_22


*cm.exp(t*lambda_2) + G[1]

303
304

# Gebe die Arrays der Beutepopulation, Raeuberpopulation und


Zeit zurueck, sodass die Funktion zum erstellen der
Grafik die Loesoungsfunktion aufrufen kann.

305

return N,P,time

306
307 def solution_G2(a,b,c,d,K,Anf,scalar):
308

"""

309

Berechnet die Loesung zum Anfanswert "Anf" mit den gegebenen


Parametern des linearisierten Logistischen Modells im
Gleichgewichtspunkt G3.

310

"""

311

# Festlegeb des Gleichgewichtspunkts G2 als G

106

312

G = np.array([d/c,a/b*(1-d/(c*K))])

313
314

## Fallunterscheidung ob lambda reell oder imaginaer.

315

# Berechnen der zwei Terme, welche verglichen werden sollen.

316

left = a*d + 4*d*c*K


right = 4 * c**2 * K**2

317
318
319

# Vorbereiten von Einzelberechnungen fuer die

320

ad2cK = (-1)* a*d / (2*c*K )

Eigenwertberechnung
321
322

# Fallunterscheidung: Falls Eigenwerte komplex

323

if left < right:

324

# Berechne M

325

M = sqrt((-1)*(a*d*(a*d - 4*c*K*(c*K-d)))) / (2*c*K)

326
327

# Festlegen der Eigenwerte zur Loesung der

328

lambda_1 =

linearisierung um G2.
ad2cK + 1j * M
lambda_2 = ad2cK - 1j* M

329
330
331

# Eigenvektor v_1

332

v_11 = 1

333

v_12 = (-1)*a/(2*b*K) - (1j*M*c)/(b*d)

334
335

# Eigenvektor v_2

336

v_21 = 1

337
338

v_22 = (-1)*a/(b*K)+ (1j*M*c)/(2*b*d)


print("komplexe Eigenwerte")

339

# Fallunterscheidung: Falls Eigenwerte reell.

340

else:

341

# Berechne M

342

M = sqrt(a*d*(a*d - 4*c*K*(c*K-d))) / (2*c*K)

343
344

# Festlegen der Eigenwerte zur Loesung der


linearisierung um G2.

345

lambda_1 =

346

lambda_2 = ad2cK - M

ad2cK + M

347
348

# Eigenvektor v_1

349

v_11 = -1

350

v_12 = (a/(2*b*K)+ (M*c)/(b*d))

351
352

# Eigenvektor v_2

353

v_21 = 1

354

v_22 = (-1)*a/(b*K)+ (M*c)/(2*b*d)


print("reelle Eigenwerte")

355

107

356
357

# Festlegen von S und berechne die Inverse von S und


definiere als S_1.

358

S = np.array([[v_11,v_21],[v_12,v_22]])

359

S_1 = np.linalg.inv(S)

360
361
362

# Aufgrund der Verschiebung in den Ursprung fuer die


Berechnung der Matrix bei der Linearisierung muss fuer
die Berechnung der tatsaechliche Anfangswert um den
Gleichgewichtspunkt verschoben werden.

363

Anf = np.array(Anf) - np.array([d/c,a/b*(1-d/(c*K))])

364
365

# Berechne c_1 = inv(S)*Anf

366

c_1 = S_1.dot(Anf)

367
368

# Festlegen des Arrays der Zeitpunkte zu denen die Loesung

369

time = [i * scalar for i in range(401)]

berechnet und gezeichnet werden soll.


370
371

# Initialisiere Arrays fuer die zu berechnenden


Populationsgroessen der Raeuber und Beute. Stelle sicher,
sie haben dieselbe Laenge, wie der Zeit-Array.

372

N = [0]*len(time)

373

P = [0]*len(time)

374
375

# Berechne die Loesungen fuer die Beute N und die Raeuber P


und ersetze eine weitere 0 pro Iteration in den Arrays N
und P.

376

for t_0,t in enumerate(time):

377

N[t_0] = c_1[0]*v_11*cm.exp(t*lambda_1) + c_1[1]*v_21


*cm.exp(t*lambda_2) + d/c

378

P[t_0] = c_1[0]*v_12*cm.exp(t*lambda_1) + c_1[1]*v_22


*cm.exp(t*lambda_2) + a/b*(1-d/(c*K))

379
380

# Gebe die Arrays der Beutepopulation, Raeuberpopulation und


Zeit zurueck, sodass die Funktion zum erstellen der
Grafik die Loesoungsfunktion aufrufen kann.

381

return N,P,time

382
383 def plotstyleset():
384

"""

385

Standardformatierung fuer die Graphiken der Phasenebene.

386

"""

387

plt.xlabel(r$Beute$)

388

plt.ylabel(r$R\"auber$)

389

plt.axhline(color="0.75")

108

390

plt.axvline(color="0.75")

391

pl.grid(True)

392
393 def plot_G2(a,b,c,d,K,Anf,scalar):
394

"""

395

Zeichnet die Loesungen der Linearisierung um G2 als

396

"""

Veraenderung ueber die Zeit zu gegebenen Parametern.


397
398

# Berechnung der Loesung fuer den Anfangswert b_1.

399

N_1,P_1,t_1 = solution_G2(a,b,c,d,K,Anf,scalar)

400
401

# Festlegen des Formats der Grafik.

402

pl.xlabel(r"$Zeit$")

403

pl.ylabel(r"$Populationsgr\"o\ss{}e$")

404

plt.axhline(color="0.5")

405

plt.axvline(color="0.5")

406

pl.grid(True)

407
408

# Zeichne die Raeuber- und Beutepopulationen in Abhaengigkeit

409

pl.plot(t_1,P_1,label=r"$R\"auber$",color="r")

410

pl.plot(t_1,N_1,label=r"$Beute$",color = "b")

von der Zeit.

411
412
413

# Zeichnen und speichern der Legende in lgd1 und schreibe die


Parameter ueber die Grafik.

414

lgd1 = plt.legend(loc="upper right", fancybox=True,frameon=


True,shadow=True,bbox_to_anchor=(1.1, 1.1),fontsize=13)

415

plt.title(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f, \;


K=%i$"%(a,b,c,d,K),fontsize=15)

416
417

# Behalte die Grafik in Speicher auch ausserhalb der Funktion


und gebe den Aufruf zum Zeichnen der Legende zurueck.

418

plt.hold(True)

419

return(lgd1)

420
421 def phaseplane_G2(a,b,c,d,K,scalar, Anf1, Anf2, limits):
422

"""

423

Zeichnet die Loesungen der Linearisierung um G2 in die


Phasenebene zu gegebenen Parametern.

424

"""

425
426

# Lege die Maximal- und Minimalwerte fuer die Grafik fest als

427

maxx, maxy, minx, miny = limits

428

# Berechne die Loesungen fuer Anf1 und Anf2.

4 einzelne Variablen, uebergeben durch "limits"

109

429

N_2,P_2,t_2 = solution_G2(a,b,c,d,K,Anf1,scalar)

430

N_3, P_3,t_3 = solution_G2(a,b,c,d,K,Anf2,scalar)

431
432

# Festlegen des Gleichgewichtspunkts G2 als G

433

G = np.array([d/c,a/b*(1-d/(c*K))])

434
435

# Lege Grundlage fuer 2 Untergrafiken innerhalb einer Grafik.

436

fig = plt.figure(figsize=(10,5))

437
438

# Schreibe die Parameter ueber die Grafik.

439

plt.suptitle(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f,


\;K=%i$"%(a,b,c,d,K),fontsize=15)

440
441

# Untergrafik 1

442

ax1 = fig.add_subplot(121)#,aspect="equal")

443

plotstyleset()

444

# Finde das Maximum des Maximalen x-Werts und Maximalen y-

445

maxxy = np.max([maxx,maxy])

Werts und speichere diesen als "maxxy"


446
447

# Zeichne die Loesung und den Gleichgewichtspunkt ein.

448

first, =

449

third, = pl.plot(G[0],G[1],"co",ms=3.5) #,label="

450

pl.arrow( N_2[35].real, P_2[35].real, N_2[36].real-N_2[35].

pl.plot(N_2,P_2,color="g") #

label = "b = (5,2)",

Gleichgewichtspunkt"
real, P_2[36].real-P_2[35].real, fc="g", ec="g", overhang
=0, head_width=0.1/6*maxxy, head_length=0.1/3*maxxy,color
="g" ,head_starts_at_zero = True, length_includes_head=
True)
451

pl.ylim([miny,maxy])

452

pl.xlim([minx,maxx])

453
454

# Untergrafik 2

455

fig.add_subplot(122) #,aspect="equal")

456

plotstyleset()

457

pl.ylim([miny,maxy])

458

pl.xlim([minx,maxx])

459
460

# Zeichne die Loesung ein und den Gleichgewichtspunkt ein.

461

second, = pl.plot(N_3,P_3,color="r") # label = "b = (3,2)",

462

pl.plot(G[0],G[1],"co",ms=3.5) #,label="Gleichgewichtspunkt"

463
464

# Einzeichnen des Pfeils in den Loesungengraphen zur


Darstellung der Veraenderungsrichtung der
Populationsgroessen ueber die Zeit.

465

pl.arrow( N_3[15].real, P_3[15].real , N_3[16].real-N_3[15].


real, P_3[16].real-P_3[15].real, fc="r", ec="r",

110

length_includes_head=True,head_width=0.1/6*maxxy,
head_length=0.1/3*maxxy,color="r" )
466
467

# Zeichnen und speichern der Legende in lgd2

468

lgd2 = plt.figlegend([first, second, third],[r"$b = (5,2)$",r


"$b = (3,1)$",r"$GG-Punkt$"],loc="upper right",frameon=
True,fancybox=True,shadow=True,fontsize=13,bbox_to_anchor
=(1, 1) ,borderaxespad=1.1)

469
470

# Behalte die Grafik in Speicher auch ausserhalb der Funktion

471

plt.hold(True)

472

return lgd2

und gebe den Aufruf zum Zeichnen der Legende zurueck.

473
474 def plot_G3():
475

"""

476

Zeichnet die Loesungen der Linearisierung um G2 in die


Phasenebene, sowie als Veraenderung ueber die Zeit zu
gegebenen Parametern.

477

"""

478
479

# Initialisiere 3 Anfangswerte:

480

b_1 = np.array([15,3])

481

b_2 = np.array([5,2])

482

b_3 = np.array([3,1])

b_1, b_2, b_3.

483
484

# Festlegen der Parameter und der Kapazitaet K.

485

a = 2

486

b = 1.2

487

c = 0.7

488

d = 9.1

489

K = 10

490
491

# Berechnung der Loesungsarrays fuer alle Anfangswerte.

492

N,P,t = solution_G3(a,b,c,d,K,b_1)

493

N_2,P_2,t_2 = solution_G3(a,b,c,d,K,b_2)

494

N_3, P_3,t_3 = solution_G3(a,b,c,d,K,b_3)

495
496

###########################################################

497

# Grafik fuer Darstellung der Loesung entlang der Zeitachse

498

###########################################################

499

# Festlegen eines weiteren Anfangswertes

500

b_1 = np.array([3,1])

501
502

# Berechnung des Loesungsarrays fuer den Anfangswert b_1.

503

N_1,P_1,t_1 = solution_G3(a,b,c,d,K,b_1)

504

111

505

# Festlegen des Formats der Grafik.

506

pl.plot(t_1,P_1,label=r"$R\"auber$",color="r")

507

pl.plot(t_1,N_1,label=r"$Beute$",color = "b")

508

pl.xlabel(r"$Zeit$")

509

pl.ylabel(r"$Populationsgr\"o\ss{}e$")

510

plt.axhline(color="0.5")

511

plt.axvline(color="0.5")

512

pl.grid(True)

513
514

# Speichern des Aufrufkommandos fuer die Legende und


darstellen der gewaehlten Parameter oberhalb der Grafik,
sowie speichern und anzeigen der Grafik.

515

plt.title(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f, \;

516

lgd = plt.legend(loc="upper right", fancybox=True,frameon=

517

pl.savefig(g3_time_log.pdf, bbox_extra_artists=(lgd,),

518

pl.show()

K=%i$"%(a,b,c,d,K),fontsize=15)
True,shadow=True,bbox_to_anchor=(1.1, 0.99),fontsize=13)
bbox_inches=tight)
519
520
521

#######################################################

522

# Grafik in der Phasenebene

523

#######################################################

524
525

# Festlegen des Gleichgewichtspunkts G2 als G

526

G = np.array([K,0])

527
528

# Festlegen des Formats der Grafik.

529

fig = plt.figure(figsize=(9,5))

530

plotstyleset()

531

pl.ylim([0,3.5])

532
533
534

# Zeichne die 3 Loesungen ein, jeweil mit den Pfeilen fuer


die Richtungsangabe.

535

first, =

536

pl.arrow( N_2[5].real, P_2[5].real, N_2[6].real-N_2[5].real,

pl.plot(N_2,P_2,color="g") #

label = "b = (5,2)",

P_2[6].real-P_2[5].real, fc="g", ec="g", overhang=0,


head_width=0.1, head_length=0.2,color="g" ,
head_starts_at_zero = True, length_includes_head=True)
537

second, = pl.plot(N_3,P_3,color="r") # label = "b = (3,2)",

538

pl.arrow( N_3[5].real, P_3[5].real , N_3[6].real-N_3[5].real,


P_3[6].real-P_3[5].real, fc="r", ec="r",
length_includes_head=True,head_width=0.1, head_length
=0.2,color="r" )

539

forth, = pl.plot(N,P,color="b") # label = "b = (3,2)",

112

540

pl.arrow( N[5].real, P[5].real , N[6].real-N[5].real, P[6].


real-P[5].real, fc="b", ec="b",length_includes_head=True,
head_width=0.1, head_length=0.2,color="r" )

541
542

# Gleichgewichtspunkt

543

third, = pl.plot(G[0],G[1],marker="x",color="k",linestyle="",
mec="k",ms=10,mew=1)#,ms=3.5) #,label="
Gleichgewichtspunkt"

544
545

# Verschiebe die ganze Grafik um 0.05 nach rechts oben fuer

546

l,r,b1,t = pl.axis()

547

dx, dy = r-l, t-b1

548

pl.axis([l-0.05*dx, r+0.05*dx, b1-0.05*dy, t+0.05*dy])

uebersichtlichere und ansprechendere Grafik.

549
550

# Speichern des Aufrufkommandos fuer die Legende und


darstellen der gewaehlten Parameter oberhalb der Grafik,
sowie speichern und anzeigen der Grafik.

551

plt.title(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f, \;


K=%i$"%(a,b,c,d,K),fontsize=15)

552

lgd = plt.legend([first, second,forth, third],[r"$b = (5,2)$"


,r"$b = (3,1)$",r"$b = (15,3)$",r"$GG-Punkt$"],loc="upper
right",frameon=True,fancybox=True,shadow=True,
bbox_to_anchor=(1.2, 1.1),fontsize=13)#,bbox_to_anchor
=(0.9, 0.8), borderaxespad=-1.)

553

pl.savefig("g_3_log_subs.pdf", bbox_extra_artists=(lgd,),
bbox_inches=tight)

554

plt.show()

555
556
557 def dy(y,t_0,a,b,c,d,K):
558

"""

559

Diese Funktion wurde geschrieben um die Loesung des


Differenziallgeichungssystems mit odeint() berechnen zu
koennen.

560

Berechne das Differenziallgeichungssystem des logistischen

561

"""

562

# Inititalisiere dy = (dN/dt, dP/dt)^T

563

dy = [0,0]

564

# Berechne dy mithilfe der Loesung und ersetze die 2

565

Raeuber Beute Modells bei gegebener Loesung y.

Initialwerte.
566

dy[0] = y[0]*(a*(1-y[0]/K)-b*y[1])
dy[1] = y[1]*(c*y[0]-d)

567

# Gebe dy zurueck

568

return(dy)

569

113

570 def solver_time(a,b,c,d,K,y,time):


571

"""

572

Zeichne die Loesung y mit den gegebenen Parametern des

573

"""

Logistischen Modells ueber die Zeit.


574
575

# Festlegen des Formats der Grafik.

576

pl.xlabel(r"$Zeit$")

577

pl.ylabel(r"$Populationsgr\"o\ss{}e$")

578

plt.axhline(color="0.5")

579

plt.axvline(color="0.5")

580
581

# Zeichne die Raeuber- und Beutepopulationen in Abhaengigkeit

582

pl.plot(time,y[:,0],label=r"$Beute$",color = "b")

583

pl.plot(time,y[:,1],label=r"$R\"auber$",color="r")

von der Zeit.

584
585

# Zeichnen der Legende und schreibe die Parameter ueber die

586

plt.legend(fancybox=True,shadow=True,frameon=True)

587

plt.title(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f, \;

Grafik.

K=%i$"%(a,b,c,d,K),fontsize=15)
588

# Behalte die Grafik in Speicher auch ausserhalb der Funktion

589

plt.hold(True)

.
590
591 def solver_phaseplane(a,b,c,d,K,time):
592

"""

593

Zeichne die Loesung y mit den gegebenen Parametern des

594

"""

Logistischen Modells in der Phasenebene.


595
596

# Initialisiere numpy-Arrays fuer x- und y-Achse.

597

N_1 = pl.arange(0, K+0.02*K, K*0.05)


P_1 = pl.arange(0,K+0.2*K,K*0.05)

598
599
600

# Bestimme die Gleichgewichtsgerade fuer G2.

601

G_2 = a/b *(1- N_1/K)

602
603

# Festlegen der Schnittpunkte der Gleichgewichtsgeraden.

604

GG_x = np.array([0,d/c,K])

605

GG_y_2 = a/b*(1-(d/c)/K)

606

GG_y = np.array([0,GG_y_2,0])

607
608

# Berechne die Loesung des Logistischen Raeuber Beute Modells


fuer 4 verscheidene Anfangswerte.

609

y = odeint(dy,[10,15],time,args=(a,b,c,d,K))

114

610

y_1 = odeint(dy,[2,2],time,args=(a,b,c,d,K))

611

y_2 = odeint(dy,[19,18],time,args=(a,b,c,d,K))

612

y_3 = odeint(dy,[4,19],time,args=(a,b,c,d,K))

613
614

# Festlegen des Formats der Grafik.

615

plt.figure()

616

plotstyleset()

617

pl.xlabel(r$Beute$)

618

pl.ylabel(r$R\"auber$)

619

plt.xticks(np.arange(0, K+0.1, 1))

620

plt.yticks(np.arange(0, K+0.1, 2))

621

plt.ylim(0,K+0.1)

622

plt.xlim(0,K+0.1)

623

pl.grid(True)

624
625
626

# Zeichne die 2 Gleichgewichtsgeraden und speichere Name fuer

627

plt.plot([d/c]*len(P_1),P_1,color=m,zorder=1, label=r"$\

Legende.
frac{% 3.1f}{% 3.1f}$"%(d,c))
628

plt.plot(N_1,G_2, color="c",zorder=2,label=r"$\frac{% 3.1f}{%


3.1f}\cdot\left(\,1-\,\frac{N(t)}{{% 3.1f} \cdot %i}\
right)$"%(a,b,c,K))

629
630

# Zeichne und beschrifte die Schnittpunkte.

631

plt.plot(GG_x,GG_y,marker="x",color="k",linestyle="",mec="k",
ms=10,mew=1,label=r"$GG-Punkt$",zorder=5)

632

plt.text(GG_x[0]+0.02*K,GG_y[0]+0.02*K,$G_1$,fontsize=15,
zorder=11)

633

plt.text(GG_x[1]+0.02*K,GG_y[1]+0.02*K,$G_2$,fontsize=15,

634

plt.text(GG_x[2]+0.02*K,GG_y[2]+0.02*K,$G_3$,fontsize=15,

zorder=11)
zorder=11)
635
636

# Zeichne die Loesungskurven in die Phasenebene

637

plt.plot(y[:,0],y[:,1],label=r"$Anf = (10,15)$",color="b",

638

plt.plot(y_1[:,0],y_1[:,1],label=r"$Anf = (2,2)$",color="g",

zorder=10)
zorder=10)
639

plt.plot(y_2[:,0],y_2[:,1],label=r"$Anf = (19,18)$",color="r"
,zorder=10)

640

plt.plot(y_3[:,0],y_3[:,1],label=r"$Anf = (4,19)$",color="k",
zorder=10)

641
642

# Verschiebe die ganze Grafik um 0.05 nach rechts oben fuer


uebersichtlichere und ansprechendere Grafik.

643

l,r,b1,t = pl.axis()

115

644

dx, dz = r-l, t-b1

645

pl.axis([l-0.05*dx, r+0.05*dx, b1-0.05*dz, t+0.05*dz])

646
647
648

# Zeichnen und speichern der Legende in lgd und schreibe die


Parameter ueber die Grafik.

649

lgd = plt.legend(loc="upper right", fancybox=True,frameon=


True,shadow=True,bbox_to_anchor=(1.35, 1.1),fontsize=13)

650

plt.title(r"$a=% 3.1f,\; b=% 3.1f, \;c=% 3.1f, \;d=% 3.1f, \;


K=%i$"%(a,b,c,d,K),fontsize=15)

651
652

# Speichere die Grafik und zeige sie direkt an.

653

plt.savefig("phaseplane_log.pdf", bbox_extra_artists=(lgd,),

654

pl.show()

bbox_inches=tight)
655
656
657 if __name__ == __main__:
658
659

------------------------------------------------------------------------------660

# Gruppe von Parametern 1

661

------------------------------------------------------------------------------662

# Bestimme die Parameter, fuer die die ersten Grafiken

663

a = 10

664

b = 0.5

665

c = 0.3

666

d = 3.8

erstellt werden sollen.

667
668

K = 20

669
670

# Definiere Anfangswert

671

Anf = [4,10]

672
673

# Nutze Funktion plot_G2 zum zeichnen der Grafik, speichere

674

lgd1 = plot_G2(a,b,c,d,K,Anf,0.01)

675

pl.savefig(g2_time_log_(%i,%i).pdf%(Anf[0],Anf[1]),

sie und zeige die Grafik direkt im Anschluss an.

bbox_extra_artists=(lgd1,), bbox_inches=tight)
676

pl.show()

677

Anf = [5,2]

678
679

# Nutze Funktion plot_G2 zum zeichnen der Grafik, speichere

116

sie und zeige die Grafik direkt im Anschluss an.


680

lgd2 = phaseplane_G2(a,b,c,d,K,0.01,[4,10],[4,5],(16,12,0,0))

681

pl.savefig("g_2_log_subs_K20.pdf")#, bbox_extra_artists=(lgd2

682

plt.show()

,), bbox_inches=tight)
683
684

# plot_G3

685

plot_G3()

686
687

# Vektorfeld mit unterschiedlichen Skalierungen

688

lgd = vectorfield(a,b,c,d,K,0.1)

689

plt.savefig("vectorfield_log_4fach.pdf", bbox_extra_artists=(
lgd,), bbox_inches=tight)

690

plt.show()

691
692

lgd = vectorfield(a,b,c,d,K,0.025)

693

plt.savefig("vectorfield_log.pdf", bbox_extra_artists=(lgd,),

694

plt.show()

bbox_inches=tight)
695
696

# Gleichgewichtsgeraden mit Schnittpunkgen

697

GG_points(a,b,c,d,K)

698
699

# Gleichgewichtgeraden mit Vektoren als Richtungsweiser fuer


die Veraenderung der Loesungen ueber die Zeit.

700

GG_points_vectors(a,b,c,d,K)

701
702

# numerisch berechnte Loesungen fuer das


Differenzialgleichungssystem mit unterschiedlichen
Anfangswerten.

703

# Zeitstrahl

704
705

time = [i * 0.01 for i in range(401)]


# Berechne die Loesungen mit odeint.

706

y = odeint(dy,[10,15],time,args=(a,b,c,d,K))

707

y_1 = odeint(dy,[2,2],time,args=(a,b,c,d,K))

708

y_2 = odeint(dy,[19,18],time,args=(a,b,c,d,K))

709

y_3 = odeint(dy,[4,19],time,args=(a,b,c,d,K))

710
711

# Zeichne die 4 Loesungen in 4 unterschiedliche Grafen,

712

plt.figure()

713

solver_time(a,b,c,d,K,y,time)

714

plt.savefig("solver_time_(10,15).pdf")

715

plt.show()

speichere sie und zeige sie.

716
717

plt.figure()

718

solver_time(a,b,c,d,K,y_1,time)

117

719

plt.savefig("solver_time_(2,2).pdf")

720

plt.show()

721
722

plt.figure()

723

solver_time(a,b,c,d,K,y_2,time)

724

plt.savefig("solver_time_(19,18).pdf")

725

plt.show()

726
727

plt.figure()

728

solver_time(a,b,c,d,K,y_3,time)

729

plt.savefig("solver_time_(4,19).pdf")

730

plt.show()

731
732

# Nutze die Funktion solver_phaseplane um einen Graph in der


Phasenebene zu erstellen.

733

solver_phaseplane(a,b,c,d,K,time)

734
735

# Nutze die Funktion streamfield um eine Stromlinienfeld fuer


die oberen Parameter zu estellen, speichere es und zeige
es direkt nach Ausfuehrung des Programms.

736

lgd = streamfield(a,b,c,d,K)

737

plt.savefig("streamfield_log.pdf", bbox_extra_artists=(lgd,),

738

pl.show()

bbox_inches=tight)
739
740

------------------------------------------------------------------------------741

# Gruppe von Parametern 2

742

------------------------------------------------------------------------------743

# Bestimme die Parameter, welche fuer die zweite Gruppe an


Parametern genutzt weden soll.

744

a = 2

745

b = 1.2

746

c = 0.5

747

d = 0.9

748
749

K = 10

750
751

# Nutze Funktion plot_G2 zum zeichnen der Grafik, speichere


sie und zeige die Grafik direkt im Anschluss an.

752

lgd1 = plot_G2(a,b,c,d,K,Anf,0.07)

753

pl.savefig(g2_time_log_(%i,%i).pdf%(Anf[0],Anf[1]),
bbox_extra_artists=(lgd1,), bbox_inches=tight)

754

pl.show()

118

755
756

# Two subplots, unpack the axes array immediately

757

b_2 = np.array([5,2])

758

b_3 = np.array([3,1])

759
760

# Nutze Funktion plot_G2 zum zeichnen der Grafik auf der


Phasenebene, speichere sie und zeige die Grafik direkt im
Anschluss an.

761

lgd2 = phaseplane_G2(a,b,c,d,K,0.1,b_2,b_3,(6.1,3.1,-2.1,0))

762

pl.savefig("g_2_log_subs.pdf")#, bbox_extra_artists=(lgd2,),

763

plt.show()

bbox_inches=tight)
764
765

------------------------------------------------------------------------------766

# Gruppe von Parametern 3

767

------------------------------------------------------------------------------768

# Bestimme die Parameter, welche fuer die zweite Gruppe an


Parametern genutzt weden soll.

769

a = 2

770

b = 1.2

771

c = 0.7

772

d = 1.4

773
774

K = 10

775
776

# Nutze die Funktion streamfield um eine Stromlinienfeld fuer


die oberen Parameter zu estellen, speichere es und zeige
es direkt nach Ausfuehrung des Programms.

777

lgd = streamfield(a,b,c,d,K)

778

plt.savefig("streamfield_log_smallcoords.pdf",

779

pl.show()

bbox_extra_artists=(lgd,), bbox_inches=tight)

D.3

Grafiken fr Finale Diskussion

1 #------------------------------------------------------------------2 # Erstellen der Grafiken fuer die Diskussion


3 #------------------------------------------------------------------4 # Importieren der noetigen python-libraries.
5 import numpy as np
6 import urllib.request
7 import pandas as pd
8 import matplotlib.pyplot as plt
9 from scipy.integrate import odeint

119

10 from scipy.optimize import minimize


11 import random
12 import seaborn
13 from decimal import *
14
15 def fileopener():
16

""""

17

Oeffnet die Datei, welche aus der von der der Webseite runter
geladen wurde und speicher sie in einem Dataframe und
gibt diesen zurueck

18

"""

19

with open("snowshoe_hare_data.txt","r") as f:

20
21

# Einlesen der Daten und erste Trennung nach newlineCharaktern.

22

read_data = f.read()

23
24

sep_data = read_data.rsplit("\n")

25
26

# Initialisieren der 3 Arrays fuer die 3 Datenpunkte

27

years = []

28

snowshoe_hare = []

29

lynx = []

der Quelle.

30
31

# Extrahieren der Daten und wiederholtes Anhaengen


der Datenpunkte an die jeweiligen Arrays.

32
33

for n,entry in enumerate(sep_data):


entry = entry.rsplit(" ")

34
35

if n > 5 and n <21:

36

years.append(float(entry[0]))

37

snowshoe_hare.append(float(entry[1]))

38

lynx.append(float(entry[2]))

39
40

# Da die Datenpunkte nicht in Originalgreossen


gespeichert wurden, sonden ihre tatsaechliche
Anzahl im Titel angegeben wurde, wird dier hier
manuell nachgeholt.

41

snowshoe_hare = np.array(snowshoe_hare)*1000

42

lynx = np.array(lynx) *100 #*1.8


# Erstellen des dictionaries zum Erstellen des

43

dataframes
44

pre_df = {"years elapsed":years, "snowshoe hare":


snowshoe_hare, "lynx":lynx}

45
46

# Erstelle den dataframe mit den Eintraegen und gebe

120

ihn zurueck.
47

df = pd.DataFrame(pre_df)

48

return df

49
50 def solver(params,Anf):
51

"""

52

Diese Funktion loest die Lotka-Volterra Differenzialgleichung


mithilfe der numerischen Annaeherung durch die Funktion
odeint() an die Loesung.

53

"""

54

# Setze eine Zeitspanne fuer eine glatte Zeichnung der

55

time = np.arange(0,29,0.01)

56

a,b,c,d = params

57

# Definiere die Differenzialgleichung als Funktion in der

58

def dy_Lotka_volterra(y,t_0):

numerischen Loesung der Funtkion

Funktion und rufe sie im Anschluss von odeint auf.


59

dy = [0,0]

60

dy[0] = y[0]*(a-b*y[1])

61

dy[1] = y[1]*(c*y[0]-d)
return(dy)

62
63

y = odeint(dy_Lotka_volterra,Anf,time)

64

return(y)

65
66 def solver_log(params, Anf):
67

"""

68

Diese Funktion loest die logistische Lotka-Volterra


Differenzialgleichung mithilfe der numerischen
Annaeherung durch die Funktion odeint() an die Loesung.

69

"""

70

# Setze eine Zeitspanne fuer eine glatte Zeichnung der


numerischen Loesung der Funtkion

71

time = np.arange(0,29,0.01)

72

a,b,c,d,K = params

73

# Definiere die Differenzialgleichung als Funktion in der


Funktion und rufe sie im Anschluss von odeint auf.

74

def dy_log(y,t_0):

75

dy = [0,0]

76
77

dy[0] = y[0]*(a*(1-y[0]/K)-b*y[1])
dy[1] = y[1]*(c*y[0]-d)

78

return(dy)

79

y = odeint(dy_log,Anf,time)#, mxstep=50000, full_output=True)

80

return(y)

81
82 def getindex(time_measured):
83

"""

84

Diese Funktion berechnet die Zeitpunkte in der Zeitspanne,

121

welche zum Zeichnen der Loesung verwendet wurde und gibt


einen Array zurueck der die Indexe der Zeitpunkte
enthaelt zu denen die Daten gemessen wuden.
85

"""

86

# Inititalisiere den Index-Array

87

index = []

88

# Nutze eine for-Schleife ueber den time-Array (Genutzt zum


Zeichnen der Loesungen der Differenzialgleichungen und
definiert in den Funktionen, welche diese hier aufrufen)

89

# um den Index der Zeitpunkte der Datenaufnahme im time-Array

90

for n, step in enumerate(time):

zu erhalten, gebe den Index Array zurueck.


91

for rstep in time_measured:

92

diff1 = ss(np.array(df[["snowshoe hare","lynx"]]),YP,1)

93

diff = diff0+diff1

94

return diff

95
96 def plotstyleset():
97

"""

98

Standardformatierung fuer die Graphiken der Phasenebene.

99

"""

100

plt.xlabel(r$Zeit \;[Jahren]$)

101

plt.ylabel(r$Populationsgr\"o\ss{}e$)

102

plt.axhline(color="0.75")

103

plt.axvline(color="0.75")

104

plt.grid(True)

105
106 def plotter(params, Anf,solver):
107

"""

108

Diese Funktion erhaelt die Parameter, sowie den Anfangswert


der Differenzialgleichung und eine Funktion, hier kann
solver oder solver_log als Argumente uebergeben werden.

109

Es zeichnet dann die fuer die gegebenen Werte die


Loesungskurven der Differenzialgleichung gegen die Zeit,
sowie die Datenpunkte in einen Graph.

110

"""

111
112

# Berechne die Zeitpunkte im Zeitstrahl, zu denen die


Datenpunkte berechnet wurden und speichere den Index der
jeweiligen Zeitpunkte in index. Speichere die
tatsaechlichen Zeitpunkte in Tm.

113

time = np.arange(0,29,0.01)

114

time_measured = np.array(df["years elapsed"])

115

index = getindex(time_measured)

116

Tm = time[index]

117
118

# Berechne die Loesung der Differenzialgleichung mit den

122

gegebenen Parametern und Anfangswerten,


119

# Berechne ausserdem die Werte der Loesung zu den Zeitpunkten


der Datenmessung.

120

y = solver(params,Anf)

121

YN = y[index,0]

122

YP = y[index,1]

123
124

# Lege das Format fuer die Graph fest

125

plt.figure()

126

plotstyleset()

127
128

# Zeichne die Modelle in p1,p2 und markiere die Zeipunkte zu


denen Daten erhoben worden sind mit Keisen

129

p1, = plt.plot(time,y[:,0],label=r"$Modell$ $Beute$",color =


"b")

130

p2, = plt.plot(time,y[:,1],label=r"$Modell$ $R\"auber$",color


="r")

131

p3, = plt.plot(Tm,YN,"bo")#

132

p4, = plt.plot(Tm,YP,"ro")#

133
134

# Fuege die Datenpunkte zur Grafik hinzu und verbinde sie mit
Linien

135

p5, = plt.plot(df["years elapsed"],df["snowshoe hare"],"co-",

136

p6, = plt.plot(df["years elapsed"],df["lynx"],"go-",label=r"

label=r"$Schneeschuhhase$")
$Kanadischer Luchs$")
137
138

# Bestimme die Legende, behalte die Grafik und mache sie


zugaenglich ueber den Funktionsspeicher hinaus und gebe
die Legende zurueck.

139

lgd = plt.legend(((p1,p3),(p2,p4),p5,p6), (r"$Modell$ $Beute$


", r"$Modell$ $R\"auber$",r"$Schneeschuhase$", r"
$Kanadischer Luchs$"),loc="upper right", fancybox=True,
frameon=True,shadow=True,bbox_to_anchor=(1.35, 1.1),
fontsize=13)

140

plt.hold(True)

141

return(lgd)

142
143 if __name__ == __main__:
144
145

# Herunterladen und speichern der Daten.

146

url = "http://www.biotopics.co.uk/newgcse/baredata.txt"

147

file_name = "snowshoe_hare_data.txt"

148

urllib.request.urlretrieve(url, file_name)

149
150

# Nutze fileopener umd die Daten in einem dataframe zu


speichern und diesen Anschliessend in der Konsole

123

anzeigen zu lassen.
151

df = fileopener()

152

print(df)

153
154

# Festlegen der Parameter fuer die beste Anpassung des LotkaVolterra Modells an die Daten.

155

a = 0.11 *2.6
b = 1/10000 *2.6

156
157
158

c = 1/100000 * 5.7
d = 0.47 *5.7

159

Anf = [20000,1000]

160
161

# Erhalte index der Zeitspanne zum Loesen der


Differenzialgleichung, an denen die Datenpunkte erhoben
wurden.

162

time = np.arange(0,29,0.01)

163

time_measured = np.array(df["years elapsed"])

164

index = getindex(time_measured)

165
166

# Speichere die Parameter in params und uebergebe sie der

167

params = (a,b,c,d)

168

# c=1/100000*7

169

# d=50/100*7

170

# K=200000

171

# Anf =[20000,1000]

plotter Funktion, welche die Grafik erstellt.

172
173

# Festlegen der Parameter fuer die Anpassung des logistischen


Lotka-Volterra-Modells an die Datenpunkte

174

# Parameter mit einer Guten Annaeherung an die Beute und so

175

a= 0.22 *1.34
b= 15/100000*1.34

gut wie moeglich an die Raeuber.


176
177
178

c= 1/100000*7
d= 50/100*7

179

K= 200000

180
181

# Speichere die Parameter in params und uebergebe sie der


plotter Funktion, welche die Grafik erstellt.

182

params = a,b,c,d,K

D.4

Grafiken fr Appendix

1 #-----------------------------------------2 # Zeichne Steigungsfelder fuer Appendix.


3 #-----------------------------------------4
5 # Importieren der noetigen python-libraries.

124

6 import numpy as np
7 import pylab as pl
8 import matplotlib.pyplot as plt
9 import seaborn
10
11 def dy1(y,t):
12

"""

13

Beispieldifferenzialgleichung Nummer eins: dy/dt = y+t.

14

Nimmt Skalare, Arrays und Marizen und gibt jeweils in


derselben Dimension die berechneten Ableitungen in den
jeweiligen Punkten des gegebenen Objekts zurueck.

15

"""

16

return y+t,y+t

17
18 def dy2(y,t):
19

"""

20

Beispieldifferenzialgleichung Nummer zwei: dy/dt = y+1.

21

Nimmt Skalare, Arrays und Marizen und gibt jeweils in


derselben Dimension die berechneten Ableitungen in den
jeweiligen Punkten des gegebenen Objekts zurueck.

22

"""

23

return y+1,y+1

24
25 def plotstyleset():
26

"""

27

Standardformatierung fuer die Grafiken.

28

"""

29

plt.xlabel(r$t$)

30

plt.ylabel(r$y$)

31

plt.axhline(color="0.75")

32

plt.axvline(color="0.75")

33

pl.grid(True)

34
35 def slopefield(fun):
36

"""

37

Zeichnet ein Steigungsfeld fuer die uebergebene Funktion.

38

Voraussetzung: Funktion gibt ihre Differenzialgleichung als

39

"""

String mit zurueck.


40
41

# Initialisiere ein numpy-Array fuer die x- und y-Achse und


baue aus letzerem ein Netzwerk aus Punkten zur Berechnung
der Richtungsvektoren in jedem Punkt dieses Netzwerkes.

42

# Speichere dies zwei mal als je eine Koordinaten-Matrix.

43

y1 = pl.arange(-4,4.5,0.35)

44

t,y = pl.meshgrid(y1, y1)

45

# Festlegen der Laenge des Strichs fuer das Steigungsfeld.

125

46

r=0.35

47
48

# Berechne die Steigung V.

49

V,tito = fun(y,t)

50
51
52

# Normiere die Strichlaenge im Steigungsfeld (Entnommen aus [


Sol].)

53

= np.sqrt((r**2) / (1 + 1/V**2))

# Laenge der Striche

in y-Richtung
54

= v/V

# Laenge der Striche in x-Richtung

55
56

# Festlegen des Formats der Grafik.

57

seaborn.set_style("whitegrid")

58

pl.figure()

59

plotstyleset()

60

pl.xlim(-4,4)

61

pl.ylim(-4,4)

62
63

# Benutze die quiver-Funktion zum Zeichnen des


Steigungsfeldes in jedem Punkt des Netzwerks mithilfe der
Matrizen u und v.

64

# Die quiver-Funktion zeichnet in der Standardeinstellung


Pfiele, da hier aber Striche erwuenscht sind, werden die
Parameter fuer die Pfeilkoepfe auf 0 gesetzt.

65

Q = pl.quiver(t,y,u, v,zorder=10,headwidth=0,headlength=0,
headaxislength=0)

66
67
68

# Zeichnen und speichern der Grafik und schreibe die

69

plt.title(r"$\frac{dy}{dt} = %s$"%(tito),fontsize=15, y=1.02)

70

plt.savefig("Beispiel_%s.pdf"%(tito))

Differenzialgleichung ueber die Grafik.

71
72 if __name__ == __main__:
73

# Rufe die Funktion slopefield fuer die 2 Beispiel-

74

slopefield(dy1)

75

slopefield(dy2)

Differenzialgleichungsfunktionen auf.

13

13 [Sol]

126

Literatur
[BMT96]

M. Begon, M. Mortimer und D.J. Thompson. Population Ecology: A Unified Study of Animals and Plants. Wiley, 1996. isbn: 9780632034789. url:
https://books.google.com/books?id=YDAu4RuSf3sC.

[CL55]

A. Coddington und N. Levinson. Theory of Ordinary Differential Equations. International series in pure and applied mathematics. Tata McGrawHill, 1955. isbn: 9780070992566. url: https://books.google.com/
books?id=8QjvnT2hmqwC.

[Dar09]

C. Darwin. The Origin of Species. P. F. Collier & Son, 1909. url: https:
//books.google.com/books?id=TCwLAAAAIAAJ.

[DW58]

Charles Darwin und Alfred Wallace. On the Tendency of Species to form


Varieties; and on the Perpetuation of Varieties and Species by Natural
Means of Selection. In: Journal of the Proceedings of the Linnean Society
of London. Zoology 3.9 (1858), S. 4562. issn: 1945-9416. doi: 10.1111/
j.1096-3642.1858.tb02500.x. url: http://dx.doi.org/10.
1111/j.1096-3642.1858.tb02500.x.

[Edx]

berisicht des Online Einfhrungkurses ber Differenzialgleichungen auf


der Webseite edx. gehhrt vom 20.05.2015 bis 03.06.2015. url: https:
/ / www . edx . org / course / introduction - differential equations-bux-math226-1x#!.

[Enc]

Qualitative theory of differential equations. Datum: 17.08.2015, 14.27 Uhr


PST. url: https://www.encyclopediaofmath.org/index.php/
Qualitative_theory_of_differential_equations.

[GY]

Extension Wildlife Specialist Greg Yarrow Professor of Wildlife Ecology. The Basics of Population Dynamics. Fact Sheet 29. Zugegriffen auf:
09.09.2015, 17.19 Uhr. url: http://www.clemson.edu/extension/
natural _ resources / wildlife / publications / pdfs / fs29 _
population_dynamics.pdf.

[Hol59]

C. S. Holling. The Components of Predation as Revealed by a Study of


Small-Mammal Predation of the European Pine Sawfly. In: The Canadian
Entomologist 91 (05 Mai 1959), S. 293320. issn: 1918-3240. doi: 10 .
4039 / Ent91293 - 5. url: http : / / journals . cambridge . org /
article_S0008347X00072564.

[HSD13]

M.W. Hirsch, S. Smale und R.L. Devaney. Differential Equations, Dynamical Systems, and an Introduction to Chaos. Academic Press. Academic
Press, 2013. isbn: 9780123820105. url: https : / / books . google .
com/books?id=csYhsrOEh\_MC.

[Hum]

Humangenomprojekt. Datum: 14.09.2015, 22.05 Uhr PST. url: https:


//de.wikipedia.org/wiki/Humangenomprojekt.

127

[Jac]

Klaus Jacob. Die sechste Katastrophe. In: Sddeutsche Zeitung (). url:
http : / / www . sueddeutsche . de / wissen / massenaussterben die-sechste-katastrophe-1.2108160.

[JSB07]

C.J. Jensen und State University of New York at Stony Brook. Predation
and Its Consequences: Insights Into the Modeling of Interference. State
University of New York at Stony Brook, 2007. isbn: 9780549472292. url:
https://books.google.com/books?id=2cp5pEsvvUsC.

[Kan]

Kanadischer Luchs - Wikipediaseite. Datum: 10.09.2015, 15.51 Uhr PST.


url: https://en.wikipedia.org/wiki/Canada_lynx.

[Lin]

Linearization. Datum: 14.09.2015, 19.32 Uhr PST. url: https://en.


wikipedia.org/wiki/Linearization.

[LM11]

J. Liesen und V. Mehrmann. Lineare Algebra: Bachelorkurs Mathematik.


Vieweg+Teubner Verlag, 2011. isbn: 9783834882905. url: https : / /
books.google.com/books?id=iZHwTIEa-psC.

[Log]

Logistic Function. Datum: 17.08.2015, 12.42 Uhr PST. url: https://


en.wikipedia.org/wiki/Logistic_function#Applications.

[Lot]

Lotka-Volterra-Gleichungen. Datum: 22.06.2015, 16.08 Uhr PST. url:


https : / / de . wikipedia . org / wiki / Lotka - Volterra Gleichungen.

[Mal12]

T.R. Malthus. An Essay on the Principle of Population. Dover Publications, 2012. isbn: 9780486115771. url: https://books.google.com/
books?id=0qYXcMM3hqYC.

[Mat]

Mathematical and theoretical biology. Datum: 14.09.2015, 17.27 Uhr PST.


url: https://en.wikipedia.org/wiki/Mathematical_and_
theoretical_biology.

[MG87]

W. Metzler und D. Gockert. Dynamische Systeme in der kologie: Mathematische Modelle und Simulation. Teubner Studienbcher Mathematik. Vieweg+Teubner Verlag, 1987. isbn: 9783519020820. url: https:
//books.google.com/books?id=aSJvAAAACAAJ.

[Nag12]

Rainer Nagel. Lineare Dynamische Systeme. Techn. Ber. LATEX- Edition


von Markus Couturier und Tom-Niklas Faber. Universitt Tbingen, 2012.

[Pan10]

Alexander Panfilov. Qualtitative Analysis of differential equations. Techn.


Ber. Utrecht University, Theoretical Biology, 2010. url: http://wwwbinf.bio.uu.nl/panfilov/bioinformatica/bioinf10.pdf.

[PEDP99]

Ruth E Patterson, David L Eaton und JOHN D POTTER. The genetic


revolution: change and challenge for the dietetics profession. In: Journal
of the American Dietetic Association 99.11 (1999), S. 14121420.

[Pop]

Populationskologie. Datum: 23.06.2015, 11.03 Uhr PST. url: https :


//de.wikipedia.org/wiki/Populations%C3%B6kologie.

128

[Pyta]

Dokumentation matplotlib.pyplot - contour(). Datum: 08.09.2015, 22.48


Uhr PST. url: http://matplotlib.org/api/pyplot_api.html#
matplotlib.pyplot.contour.

[Pytb]

Dokumentation matplotlib.pyplot - quiver(). Datum: 15.08.2015, 11.34 Uhr


PST. url: http : / / matplotlib . org / api / pyplot _ api . html #
matplotlib.pyplot.quiver.

[Pytc]

Dokumentation matplotlib.pyplot - streamplot(). Datum: 15.08.2015, 11.33


Uhr PST. url: http://matplotlib.org/api/pyplot_api.html#
matplotlib.pyplot.streamplot.

[Pytd]

Dokumentation scipy.integrate - odeint(). Datum: 15.08.2015, 11.31 Uhr


PST. url: http : / / docs . scipy . org / doc / scipy / reference /
generated/scipy.integrate.odeint.html.

[RM]

M. L. Rosenzweig und R. H. MacArthur. Graphical Representation and


Stability Conditions of Predator-Prey Interactions. In: The American Naturalist 97.895 (), pp. 209223. issn: 00030147. url: http : / / www .
jstor.org/stable/2458702.

[Sol]

Normalisierung der Vektorlnge des Steigungsfeldes. Datum: 08.09.2015,


16.47 Uhr PST. url: http://matplotlib.1069221.n5.nabble.
com/Need-help-with-direction-field-plot-td24886.html.

[Sto08]

Franziska Stocker. Phasenportrts linearer Systeme. Techn. Ber. Ausarbeitung zum Vortrag im Seminar Mathematische Modellierung. RuprechtKarls-Universitt Heidelberg, 2008/2009. url: https://www.mathi.
uni-heidelberg.de/~thaeter/mathmod08/Stocker.pdf.

[Tay]

Linear Approximation. Datum: 14.09.2015, 19.41 Uhr PST. url: https:


//en.wikipedia.org/wiki/Linear_approximation.

[Texa]

Datensatz des Schneeschuhhasen und Luchs. Datum: 14.08.2015, 14.12 Uhr


PST. url: http://www.biotopics.co.uk/newgcse/baredata.
txt.

[Texb]

Schneeschuhhase und Luchs Information zum Datensatz. Datum:


14.08.2015, 14.12 Uhr PST. url: http://www.biotopics.co.uk/
newgcse/predatorprey.html.

[Thi12]

Katja Thielbrger. Skript zur Vorlesung Natur- und Artenschutz, kologie


und Biodiversitt II. 2012.

[TP63]

M. Tenenbaum und H. Pollard. Ordinary Differential Equations: An Elementary Textbook for Students of Mathematics, Engineering, and the
Sciences. A Harper international student reprint. Dover Publications,
1963. isbn: 9780486649405. url: https : / / books . google . com /
books?id=Feggn8pgDP4C.

129

[Tur13]

P. Turchin. Complex Population Dynamics: A Theoretical/Empirical Synthesis (MPB-35): A Theoretical/Empirical Synthesis (MPB-35). Monographs in Population Biology. Princeton University Press, 2013. isbn:
9781400847280. url: https : / / books . google . com / books ? id =
DbLWAQAAQBAJ.

[Web]

Math 646 - Mathematical Modeling, Fall Semester 2010, Lotka-Volterra


Models. Datum: 15.08.2015, 11.46 Uhr PST. url: http://www-rohan.
sdsu . edu / ~jmahaffy / courses / f09 / math636 / lectures /
lotka/qualde2.html#equilibria.

[Wer08]

Bodo Werner. Qualtitative Theorie bei gewnlichen Differentialgleichungen. Techn. Ber. Universitt Hamburg, 2008. url: http://www.math.
uni-hamburg.de/home/werner/QuThODE.pdf.

Erklrung
Ich erklre, dass ich die Arbeit selbststndig angefertigt und nur die angegebenen
Hilfsmittel benutzt habe. Alle Stellen, die dem Wortlaut oder dem Sinne nach anderen
Werken, gegebenenfalls auch elektronischen Medien, entnommen sind, sind von mir
durch Angabe der Quelle und des Zugriffsdatums sowie dem Ausdruck der ersten
Seite belegt; sie liegen zudem fr den Zeitraum von 2 Jahren entweder auf einem
elektronischen Speichermedium im PDF-Format oder in gedruckter Form vor.

Datum

Unterschrift: Sanja Stegerer

Вам также может понравиться