[Python] Ich habe versucht, den Kampf zwischen Lion und Gazel mit einer super coolen Formel namens Rotoka-Volterra-Gleichung zu reproduzieren.

Rotka-Volterra-Gleichung

Nun, eine Gleichung mit einem Namen wie diesem Zweitklässler dachte. ** Transzendentale cool. ** ** ** Dieses Mal möchte ich mit dieser Gleichung mit numerischer Berechnung (Python) spielen. Der Inhalt der Gleichung selbst sieht so aus.

\frac{dx}{dt}=\alpha x-\beta xy \\
\frac{dy}{dt}=\gamma x-\delta xy

Es ist eine ziemlich schlampige Formel, aber es ist eine ** Formel, die die Beziehung zwischen Raub und Beute ** ausdrückt. Seien Sie versichert, dass es nicht so schwierig ist, weil es ein Lametta ist! !! Dieses Mal werde ich es in der afrikanischen Kulisse von ** Lion vs. Gazelle ** lesen.

Formeln verstehen

Es gibt viele Charaktere, aber ich werde sie einzeln erklären.

Definition von Variablen / Konstanten

Variable

$ x $: Anzahl der Raubtiere (Anzahl der Gazellen), $ y $: Anzahl der Raubtiere (Anzahl der Löwen)

Konstante

$ \ alpha $: Beuteseitengeburtenrate, $ \ beta $: Beuteseitige Beuterate, $ \ gamma $: Beuteseitige Geburtenrate, $ \ delta $: Beuteseitige Sterblichkeitsrate

(Akademisch gesehen gibt es einige Teile, die genau sind, aber wir betonen die Klarheit)

Ich bin sicher, es gibt Leute, die ??? in ihrem Gehirn haben, aber bitte haben Sie etwas Geduld, wie wir im nächsten Abschnitt erklären werden.

Implikationen für Ausdrücke

Dies ist der interessanteste Ort! !! Schauen wir uns die Originalformel an, während wir uns die Bedeutung der oben definierten Zeichen ansehen.

\frac{dx}{dt}=\alpha x-\beta xy~~~~(1) \\
\frac{dy}{dt}=\gamma xy-\delta y~~~~(2)

Lassen Sie uns zuerst über (1) nachdenken.

\frac{dx}{dt}=\alpha x-\beta xy~~~~(1)

Die linke Seite bedeutet die Änderungsrate über die Zeit von $ x $, dh ** wie viel die Gazelle zunimmt **. Was kann man sich also als Zunahme oder Abnahme der Gazelle vorstellen? Ja, ** Geburt ** und ** Tod **, richtig? Die Geburt entspricht im ersten Semester $ \ alpha x $ und der Tod entspricht $ \ beta xy . Die Geburt einer Gazelle, dh die Anzahl der geborenen Gazellen **, kann durch das Produkt aus der Anzahl der Gazellen und der Geburtenrate ** ( = \ alpha x $) ausgedrückt werden. Wird steigen). Andererseits kann der Tod von Gazel und die abnehmende Anzahl von Gazel ** durch das Produkt aus der Anzahl von Gazel, der Anzahl von Löwen und der Raubtierrate ** (= $ \ beta xy $) ausgedrückt werden. Ich denke, das ist ein wenig schwer zu verstehen, aber ich denke, es wird leichter zu verstehen sein, wenn Sie sich vorstellen, dass Löwen bei vielen Gazellen leichter zielen können, und wenn es viele Löwen gibt, wird die Gazelle viel gejagt. Daher beträgt die Gesamtzunahme / -abnahme der Gazelle $ \ alpha x- \ beta xy $, was die Summe aus der Anzahl der Geburten und der Anzahl der Todesfälle ist.

Lassen Sie uns über dasselbe in Gleichung (2) nachdenken.

\frac{dy}{dt}=\gamma xy-\delta y~~~~(2)

Die linke Seite ist die Zeitänderungsrate von $ y , also entspricht sie ** wie viele Löwen zunehmen werden **. Die Zunahme oder Abnahme von Löwen kann auch in Geburt und Tod unterteilt werden, aber es gibt einige Faktoren, die sich geringfügig von Gazel unterscheiden. ** Die Anzahl der geborenen Löwen ** wird durch das Produkt aus der Anzahl der Löwen, der Anzahl der Gazellen und der Geburtenrate ** ( = \ gamma xy ) dargestellt. ** Warum hängt die Anzahl der Gazellen zusammen? ?? Der Leser, der ** dachte, ist scharf. Wenn Sie ein Löwe wären, würden Sie nicht das Gefühl haben, dass Ihre Nachkommen umso erfolgreicher sind, je mehr Gazellen Sie haben? Das ist die Spannung. Nun wird ** die Anzahl der Löwentode ** durch ** das Produkt aus der Anzahl der Löwen und der Sterblichkeitsrate ** ( = \ delta y $) dargestellt. Löwen werden niemals von Gazellen gefressen, daher wird die Anzahl der Todesfälle unabhängig von der Anzahl der Gazellen bestimmt. Daher beträgt die Gesamtzunahme / -abnahme der Löwen $ \ gamma xy- \ delta y $, was die Summe aus der Anzahl der Geburten und der Anzahl der Todesfälle ist.

Versuchen Sie numerisch zu berechnen

Ich hoffe, Sie haben Ihr Verständnis von Gazel und Lion im vorherigen Abschnitt vertieft und die Formel verstanden. Da Differentialgleichungen jedoch nicht direkt von einem Computer verarbeitet werden können, verwenden wir diesmal die ** Differenzmethode ** zur Berechnung. Angenommen, $ x, y $ zum Zeitpunkt $ n $ wird als $ x_ {n}, y_ {n} $ dargestellt. Das ist

\frac{dx}{dt}=\alpha x-\beta xy~~~~(1) \\
\frac{dy}{dt}=\gamma xy-\delta y~~~~(2)

Wenn es differenziert ist, sieht es so aus,

\frac{x_{n+1}-x_{n}}{\Delta t}=\alpha x_{n}-\beta x_{n}y_{n}~~~~(1) \\
\frac{y_{n+1}-y_{n}}{\Delta t}=\gamma x_{n}y_{n}-\delta y_{n}~~~~(2)

Lösen der unbekannten Werte $ x_ {n + 1}, y_ {n + 1} $ beim nächsten Mal $ n + 1 $

x_{n+1}=(\alpha -\beta y_{n})x_{n}\Delta t + x_{n}~~~~(1) \\
y_{n+1}=(\gamma x_{n} -\delta)y_{n}\Delta t + x_{n}~~~~(2)

Wird sein. Da der Wert auf der rechten Seite aus bekannten Werten besteht (Werte der Konstanten oder der Zeit n), kann die linke Seite einfach durch Ausführen einer Substitutionsberechnung erhalten werden.

Quellcode

Diesmal habe ich es in Python geschrieben. Sie können den Wert der Konstante beliebig ändern.

Lotka-Volterra.py


import numpy as np
import matplotlib.pyplot as plt

#Koeffizient
a, b, c, d = 0.3, 0.1, 0.3, 1.3

#Ursprünglicher Wert
init_x = 10
init_y = 2

#Zeitfortschritt
dt = 0.01
n = 5000

#Array-Initialisierung
x = np.zeros(n)
x[0] = init_x
y = np.zeros(n)
y[0] = init_y

for i in range(1, n):
  x[i] = (a - b * y[i - 1]) * x[i - 1] * dt + x[i - 1]
  y[i] = (c * x[i - 1] - d) * y[i - 1] * dt + y[i - 1]
  print(i, x[i], y[i])

t = np.arange(0, n * dt, dt)

plt.plot(t, x, label="Prey")
plt.plot(t, y, label="Predator")
plt.legend()
plt.show()

Ergebnis

Das Ergebnis sollte wie in der folgenden Abbildung aussehen. Figure_1.png

Erwägung

Es ist interessant, dass das Ergebnis vibriert. Wenn Sie es in chronologischer Reihenfolge betrachten,

  1. Die Anzahl der Löwen (gelb) nimmt zu und die Anzahl der Gazellen (blau) nimmt ab.
  2. Die Zunahme der Löwen hört auf und beginnt abzunehmen, und die Gazelle nimmt entsprechend zu.
  3. Die Anzahl der Gazellen wird zunehmen, aber nach einer Weile wird die Anzahl der Löwen zunehmen und die Anzahl der Gazellen wird abnehmen.
  4. Wiederholen Sie diesen Vorgang

Es ist geworden.

1. Die Anzahl der Löwen (gelb) nimmt zu und die Anzahl der Gazellen (blau) nimmt ab.

Nun, das stimmt. Wenn die Anzahl der Löwen zunimmt, wird die Gazelle gegessen und nimmt ab.

2. Die Zunahme der Löwen hört auf und beginnt abzunehmen, und die Gazelle nimmt entsprechend zu.

Als Folge davon, dass zu viele Löwen ** kein Futter mehr haben und anfangen zu verhungern ** (ich fühle so etwas wie einen Hinweis ...). Und infolge des Rückgangs der Löwen gewinnt Gazel wieder an Dynamik und beginnt zuzunehmen.

3. Die Anzahl der Gazellen wird zunehmen, aber nach einer Weile wird die Anzahl der Löwen zunehmen und die Anzahl der Gazellen wird abnehmen.

Wenn die Anzahl der Gazellen zunimmt, wird es für Lion zum ** Himmel **. Und die Gazelle wird abnehmen

4. Wiederholen Sie diesen Vorgang

Ja, diese Welt bewegt sich in diesem Zyklus für immer. Ich fühle mich seltsam.

Zusammenfassung

Dieses Mal habe ich eine coole Gleichung mit dem Namen ** Rotoka-Volterra-Gleichung ** verwendet, um numerische Berechnungen für das Löwen- und Gazellen-Ökosystem durchzuführen. Ich würde mich freuen, wenn es jemand interessant findet! Ich hoffe du magst es! !!

Recommended Posts

[Python] Ich habe versucht, den Kampf zwischen Lion und Gazel mit einer super coolen Formel namens Rotoka-Volterra-Gleichung zu reproduzieren.
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Ich habe auch versucht, die Funktionsmonade und die Zustandsmonade mit dem Generator in Python nachzuahmen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, den Unterschied zwischen A + = B und A = A + B in Python herauszufinden
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe versucht, das Artikel-Update des Livedoor-Blogs mit Python und Selen zu automatisieren.
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Django super Einführung von Python-Anfängern! Teil 6 Ich habe versucht, die Login-Funktion zu implementieren
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Ich habe einen Server mit Python-Socket und SSL erstellt und versucht, über den Browser darauf zuzugreifen
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Ich habe versucht, die Anzahl der im Inland infizierten Menschen der neuen Korona mit einem mathematischen Modell vorherzusagen
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Ich wollte das ABC164 A ~ D-Problem mit Python lösen
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, Gesichtsmarkierungen mit Python und Dlib leicht zu erkennen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Django super Einführung von Python-Anfängern! Teil 3 Ich habe versucht, die Vererbungsfunktion für Vorlagendateien zu verwenden
Ich habe GhostScript mit Python ausgeführt, das PDF in Seiten aufgeteilt und es in ein JPEG-Bild konvertiert.
Django super Einführung von Python-Anfängern! Teil 2 Ich habe versucht, die praktischen Funktionen der Vorlage zu nutzen
Ich habe versucht, die statistischen Daten der neuen Corona mit Python abzurufen und zu analysieren: Daten der Johns Hopkins University
[Python] Ich habe versucht, die Nacht der Galaxienbahn mit WordCloud zu visualisieren!
[Einführung in Python] Was ist der Unterschied zwischen einer Liste und einem Taple?
Ich habe versucht, ein Programm zu erstellen, das Hexadezimalzahlen mit Python in Dezimalzahlen konvertiert
Ich versuchte, Trauer und Freude über das Problem der stabilen Ehe auszudrücken.
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe versucht, mit Raspeye 4 (Python Edition) ein signalähnliches Signal zu erzeugen.
Ich habe versucht, den Winkel von Sin und Cos mit Chainer zu lernen
Ich habe es mit den Top 100 PyPI-Paketen versucht.> Ich habe versucht, die auf Python installierten Pakete grafisch darzustellen
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
[Outlook] Ich habe versucht, mit Python automatisch eine tägliche Berichtsmail zu erstellen
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
Ich habe ein Beispiel für den Zugriff auf Salesforce mit Python und Bottle erstellt
Ich habe versucht, die Netzwerkbandbreite und -verzögerung mit dem Befehl tc zu steuern
Ich habe eine funktionale Sprache mit Python ausprobiert