image image


Das SIR-Modell in (wx-) Maxima

Gestern abend hatte ich mich noch hingesetzt und das SIR-Modell, das ich gestern vormittag schon als die Coronavirus-Kurve in Python programmiert hatte, als Fingerübung auch in (wx-) Maxima implementiert. Maxima ist für mich völlig neu, daher war ich überrascht, wie einfach die Umsetzung war.

Zuerst hatte ich die beiden Konstanten zur Infektions- und Heilungsrate (ich habe sie dieses Mal und genannt) eingegeben und dann die drei Differentalgleichungen beschrieben:

→   o: 3.2;
    w: 0.23;

(o) 3.2
(w) 0.23

→   dS: -o*S*I;
    dI: o*S*I - w*I;
    dR: w*I;
    
(dS) -3.2*I*S
(dI) 3.2*I*S-0.23*I
(dR) 0.23*I

Danach habe ich mithilfe der zu Maxima gehörenden Runge-Kutta-Funktion rk das Differentialgleichungssystem gelöst und das Ergebnis der Variablem result zugewiesen:

→   result: rk([dS, dI, dR], [S, I, R], [0.99, 0.01, 0.0], [t, 0, 20, 0.1])$

Da das Ergebnis eine geschachtelte Liste ist, habe ich es wieder in vier einzelne Listen zerlegt:

→   lit: map(first, result)$
    liS: map(second, result)$
    liI: map(third, result)$
    liR: map(fourth, result)$

Zum Schluß habe ich nur noch ein paar nützliche Defaultwerte für die Graphik definiert und dann das Ergebnis plotten lassen:

→   set_draw_defaults(point_type=0,point_size=0,
    points_joined=true, grid=true, color=blue);

→   wxdraw2d(points(lit, liS), color=red, points(lit, liI), color=green,
            points(lit, liR))$

Auch dieses Ergebnis kann sich durchaus sehen lassen:

image

Es ist nahezu eine 1:1-Umsetzung des Algorithmus’, so wie er im Wikipedia-Artikel beschrieben wird. Denn das ist es, was Maxima auszeichnet: Man bewegt sich im gewohnten mathematischen Vokabular und muß es nicht erst noch mühsam in die Syntax einer Programmiersprache übersetzen.

Allerdings versteht mein Syntax Highlighter Coderay offensichtlich Maxima-Code nicht. Hat jemand von Euch da draußen eine Empfehlung? Der Highlighter muß mit kramdown zusammenarbeiten. Rogue erfüllt zwar diese Voraussetzung, kann aber ebenfalls kein Maxima.

Caveat: Wie viel oder wie wenig die hier erstellte Kurve mit der Covid19-Realität zu tun hat, habe ich schon in diesem Artikel (nach unten scrollen) beschrieben. Haltet dies bitte immer im Hinterkopf.


(Kommentieren) 

image image



Über …

Der Schockwellenreiter ist seit dem 24. April 2000 das Weblog digitale Kritzelheft von Jörg Kantel (Neuköllner, EDV-Leiter Rentner, Autor, Netzaktivist und Hundesportler — Reihenfolge rein zufällig). Hier steht, was mir gefällt. Wem es nicht gefällt, der braucht ja nicht mitzulesen. Wer aber mitliest, ist herzlich willkommen und eingeladen, mitzudiskutieren!

Alle eigenen Inhalte des Schockwellenreiters stehen unter einer Creative-Commons-Lizenz, jedoch können fremde Inhalte (speziell Videos, Photos und sonstige Bilder) unter einer anderen Lizenz stehen.

Der Besuch dieser Webseite wird aktuell von der Piwik Webanalyse erfaßt. Hier können Sie der Erfassung widersprechen.

Diese Seite verwendet keine Cookies. Warum auch? Was allerdings die iframes von Amazon, YouTube und Co. machen, entzieht sich meiner Kenntnis.


Werbung

Diese Spalte wurde absichtlich leergelassen!


Werbung


image  image  image
image  image  image


image