Kurs:Räumliche Modellbildung/Gruppe 11
Gruppenseite - BSM
[Bearbeiten]Diese Seite enthält die gesammelten Materialien der Gruppe 11 - BSM für die Portfolioprüfung. (Bitte noch nicht löschen. Diese Seite soll als Grundlage für die Modulprüfung am 09.06.21 genutzt werden. Vielen Dank)
Teilnehmer-innen
[Bearbeiten]- Böhmer, Hannah
- Müller, Kevin
- Schneider, Sebastian
1. Problemstellung
[Bearbeiten]Ausgangslage unserer Modellierung ist die COVID-19-Pandemie. Seit März beschäftigt diese Infektion der Atemwege weltweit Menschen mit der Eindämmung des Virus. Vor allem sogenannte Risikogruppen sind stark von dem Virus betroffen. Zu den Risikogruppen zählen (Stand RKI 21.08.2020) ältere Personen, Raucher, stark adipöse Menschen und Personen mit gewissen Vorerkrankungen. Der Fall-Verstorbenen-Anteil liegt in Deutschland bei 4% und die Basisreproduktionszahl liegt zwischen 2 und 3,8. Da die Symptome (Husten, Fieber, Schnupfen, Störung des Geruchs- und Geschmackssinns und Pneumonie) der Infektion häufig einer gewöhnlichen Erkältung ähneln, führen viele Personen ihr Leben wie gewohnt weiter, wodurch eine schnellere Verbreitung der Infektion stattfindet. Die folgende Modellierung soll die Ausbreitung der Krankheit veranschaulichen. Zudem soll der Einfluss der Schutzmaßnahmen (vor allem Schließung der Schulen und Gaststätten, sowie Einschränkung der Freizeitaktivitäten) dargestellt werden.
2. Theoretische Grundlagen
[Bearbeiten]Für die Modellierung der Pandemie wird zunächste eine Dichteverteilungsfunktion infizierter Personen gesucht. Integriert man über diese Funktion, erhält man die absolute Anzahl der Infizierten.
Der Infektionsprozess kann mathematisch beschrieben werden durch:
Dies ist eine homogene partielle Differentialgleichung.
Hierbei gibt u die gesuchte Dichteverteilungsfunktion in Abhängigkeit von Ort und Zeit und c den Infektionskoeffizienten an.
stellt die Ableitung der orts- und zeitabhängigen Dichtefunktion nach der Zeit dar.
Die Divergenz beschreibt das Skalarprodukt des Nabla-Operators (den Gradienten) mit einem Vektorfeld.
Der Gradient ist definiert durch:
und gibt somit die Ableitung nach jeder Raumrichtung an.
Für den Spezialfall einer gleichmäßigen Infektion erhalten wir für den stationären (zeitunabhängigen) Fall die Laplacegleichung
, da gilt:
.
Betrachtet man einen Infektionsprozess mit Quellterm, erhält man folgende inhomogene Differentialgleichung:
gibt dabei die Funktion der Infektionsverbreitung an.
Zur Lösung der gesuchten Infektionsdichtefunktion gibt es mehrere Ansätze:
Stationäre Lösung:
1. Laplace Gleichung in Dimensionen
Voraussetzung: Zeitunabhängigkeit, keinen Quellterm (Homogenität der Differentialgleichung) und gleichmäßige Infektion (siehe Spezialfall von oben)
Fundamentallösung:
Für gilt:
2. Poisson Gleichung
Voraussetzung: Zeitunabhängigkeit
Mit der Poisson Gleichung ist somit die Lösung folgender inhomogene Differentialgleichung mittels Faltung möglich:
entspricht der Fundamentallösung der Laplace Gleichung.
Wenn f ein kompakter Träger ist, gilt:
Instationäre Lösung
1. Zeitabhängige Infektion
Voraussetzung: kein Quellterm (Homogenität der Differentialgleichung), gleichmäßige Infektion
Fundamentallösung für folgende Gleichung: , :
2. Zeitabhängige Infektion mittels AWP
Voraussetzung: kein Quellterm (Homogenität der Differentialgleichung, Anfangsbedingung zum Zeitpunkt
Lösungsformel:
3. Kontaktmodell
[Bearbeiten]
Einführung
[Bearbeiten]
Das Kontaktmodell ist ein einfaches Modell zur Veranschaulichung der Verbreitung des Corona-Virus.
Hierbei wird davon ausgegangen, dass sich die Personen zufällig im Raum mit konstanter Geschwindigkeit bewegen. Sobald eine Person zu nah an einen Infizierten herankommt, wird auch diese infiziert.
Octave Implementierung
[Bearbeiten]
Das Modell wurde folgendermaßen mittels Octave modelliert:
%Verbreitung der Infektion aufgrund zufälliger Bewegungen
close all
clear all
tic %Starte Zeitmessung
%Anfangsparameter
nx=10; %Anz. Breite
ny=20; %Anz. Höhe
nt=4; %Anz. Zeitschritte pro Zeiteinheit
dt=1/nt; %Zeitschritt
r_Inf=0.8; %Radius, bei der Infizierte Gesunde anstecken
T=10; %Länge der Simulation in Zeiteinheiten
v=3; %Geschwindigkeit, mit der sich die Fußgänger bewegen
%Erstellen der Vektoren/Matrizen
x=[1:nx];
y=[1:ny];
[x,y]=meshgrid(x,y);
%Setze ersten Infizierten
xInf=x(1,nx/2);
yInf=y(ny/2,1);
%Übergeben der KO des ersten Infizierten
IndInf2=xInf;
IndInf1=yInf;
%Grafische Ausgabe Anfangssituation
figure (1)
hold on
plot(x,y, '*b')
plot(xInf,yInf, '*r')
axis([-5 15 -5 25])
set(gca,'Visible','off')
title (['Positionen nach 0s'])
hold off
%______________________________________________________________________________%
%Simulation zufälliger Bewegungen und Ansteckung bei r<r_Inf
%Erstelle Geschwindigkeitsmatrizen
M=rand(ny,nx).-0.5;
Mx=rand(ny,nx).-0.5;
My=rand(ny,nx).-0.5;
x_neu=x;
y_neu=y;
for i=1:T*nt
%Bestimmen neuer Richtungen nach jeder ganzen Zeiteinheit
if mod(i,4)==0
Mx=rand(ny,nx).-0.5;
My=rand(ny,nx).-0.5;
endif
%____________________________________________________________________________%
%Vektorpfeile anzeigen lassen - Teil 1
%x_alt=x_neu
%y_alt=y_neu
%____________________________________________________________________________%
%Berechne neue Pos für jeden Punkt
x_neu=x_neu.+(v*Mx)*dt;
y_neu=y_neu.+(v*My)*dt;
%Speichere den letzten Plot
test=["Fig_", num2str(i)];
saveas(i, test, 'jpg')
figure (i+1)
title (['Positionen nach ' num2str(i*dt) 's'])
axis([-5 15 -5 25])
hold on
plot(x_neu,y_neu, '*b')
%____________________________________________________________________________%
%Vektorpfeile anzeigen lassen - Teil 2
%quiver(x_neu,y_neu,x_neu-x_alt,y_neu-y_alt);
%____________________________________________________________________________%
%Überprüfen ob Infiziert und wenn, dann markiert
for k1=1:length(IndInf1)
for j=1:nx
for l=1:ny
%die aktuellen Positionen der Fußgänger-Punkte werden mit den Positionen der Infizierten abgeglichen (Abstand wird berechnet)
r=norm([x_neu(l,j)-x_neu(IndInf1(k1),IndInf2(k1)), y_neu(l,j)-y_neu(IndInf1(k1),IndInf2(k1))]);
if r<r_Inf
%wenn der Abstand zum Infizierten unter dem Ansteckunsradius liegt, wird der l,j-te Punkt infiziert (mit rotem Stern gekenzeichnet)
plot(x_neu(l,j),y_neu(l,j), '*r') ;
set(gca,'Visible','off') %Achsanzeige deaktiviert
%-------------Speicheroptimierung--------------
k2=1;
while k2 <=length(IndInf1)&&(l~=IndInf1neu(k2) || j~=IndInf2neu(k2))
k2=k2+1;
endwhile
if k2 >length(IndInf1)
IndInf1=[IndInf1 l];
IndInf2=[IndInf2 j];
endif
endif
endfor
endfor
endfor
hold off
endfor
test=["Fig_", num2str(i+1)]; %Speichere letztes Bild
saveas(i+1, test, 'jpg')
toc %Beende Zeitmessung
Darstellung Kontaktmodell
[Bearbeiten]
Darstellung des Kontaktmodells:
Darstellung des Kontaktmodells mit erhöhter Geschwindigkeit:
In dieser Darstellung wurde die Geschwindigkeit erhöht. Hierbei ist eine schnellere Infektion zu beobachten, wodurch die Einschränkung der Freizeitaktivitäten zu legitimieren ist.
Darstellung des Kontaktmodells mit verringertem Infektionsradius:
In dieser Darstellung wurde der Infektionsradius verringert. Hierbei ist eine verlangsamte Ausbreitung des Virus zu beobachten. Diese Modellierung soll die Übertragung während der Mundschutzpflicht darstellen. Die Viren werden überwiegen über Nase und Mund aufgenommen und abgegeben. Durch das Bedecken des Mund und Nasenraums verringert sich der Infektionsradius.
Problem
[Bearbeiten]In diesem Modell wird die Genesung nach 14 Tagen nicht berücksichtigt. Es wird davon ausgegangen, dass die Personen weiterhin bei zu geringem Abstand weitere Personen infizieren. Zudem betrachtet dieses Modell weder Sterbe- noch Geburtenrate.
4. SI Modell
[Bearbeiten]
Einführung
[Bearbeiten]
Eine geeignete Modellierung bietet das SI Modell (Kompartimentmodell).
Wir betrachten hier nur das begrenzte oder auch logistische Wachstumsmodell.
In diesem Modell wird zunächst die Gesamtpopulation B betrachtet. Wir wählen eine geschätze Zahl von 2/3 der Gesamtbevölkerung.
Somit gilt: B= 55.000.000.
Diese Gesamtpopulation wird eingeteilt in die Infektionsanfälligen S (susceptible) und die kummulierten Infizierten I (infected).
Sobald sich eine Person aus der Gruppe der Infektionsanfälligen infiziert hat, wechselt er irreversibel in die Gruppe der Infizierten.
Zu Beginn der Modellierung ist eine bestimmte Anzahl an Personen infiziert. Somit gilt:
Zudem gilt:
und
Octave Implementierung
[Bearbeiten]Folgende Modellierung wurde mittels Octave gemacht:
In dieser Modellierung wird mit 16 Infizierten gestartet.
clear all ;
%Hole RKI-Daten von coronaData: ;
%RKI-Daten: ;
RKI=coronaData ;
RKI=[0:size(RKI,2)-1;RKI]; %[Tage;Infizierte;Tote;Geheilte];
% Festlegung der Parameter:
dt=0.1; %Zeitschritt in d
I0=16; %Anfangsinfizierte
B=(2/3)*280; %Kapazität in Tausend
k=0.22; %Infektionsrate
%Zeitarray:
tmax=180;
t=0:dt:tmax;
%Anfangswerte:
y0=[B-I0/1000; I0/1000];
%logistisches Modell (DGL-System):
f1=@(y) [-k*y(1)*y(2)/B ; k*y(2)*y(1)/B]; %y(1)=S, y(2)=I
%Erzeuge numerische Lösung:
y=lsode(f1,y0,t);
%Graphische Ausgabe:
figure()
plot(t,y(:,1),t,y(:,2),RKI(1,:),RKI(2,:)/1000,'.',"linestyle", "none")
hold on
xlabel('Zeit [d]')
axis([0 tmax 0 B])
ylabel('Bevölkerung (in Tsd.)')
legend(['Infektionsanfaellige';'Infizierte (kummuliert)';'RKI-Daten'],"location","east")
title(['SI-Modell in',num2str(tmax),' Tagen mit ',num2str(I0),...
' Anfangsinfizierten und Infektionsrate k=',num2str(k)])
hold off
Darstellung SI Modell
[Bearbeiten]
In dieser Darstellung sind neben den modellierten Zahlen für Infektionsanfällige und Infizierte die Daten des RKI aufgetragen. Hierbei ist eine gute Übereinstimmung nur zu beobachten, wenn man die Zahl der Gesamtpopulation (B) reduziert. Deshalb wurde bei der Modellierung eine Gesamtbevölkerung von 280.000 angenommen.
Problem
[Bearbeiten]
Das Problem dieses Modells ist, dass weder Tote noch Geburten beachtet werden. Die gestrichelte Linie zeigt die RKI Daten. In weitester Betrachtung stimmen die Funktionen zwar überein, jedoch sollte eine Verbesserung des Modells vorgenommen werden.
5. SIR Modell
[Bearbeiten]
Einführung
[Bearbeiten]
Das SIR Modell ist ebenso wie das SI Modell den Kompartimentmodellen zuzuordnen.
Zusätzlich zur Gruppe der Infektionsanfälligen (S) werden hier auch die aktuell Infizierten (I) betrachtet und eine Gruppe der Genesenen inklusive der Verstorbenen (R) ("removed") berücksichtigt.
Zu Beginn der Modellierung ist eine bestimmte Anzahl an Personen aktuell infiziert. Die Anzahl der Genesenen bzw. Verstorbenen wird zunächst null gesetzt. Somit gilt:
Zudem gilt:
wobei
der Kehrwert der Genesungszeit T ist.
Weiterhin gilt:
Octave Implementierung
[Bearbeiten]
Folgende Modellierung wurde mit Octave erstellt:
%Hole RKI-Daten von coronaData:
%RKI-Daten:
RKI=coronaData;
RKI=[0:size(RKI,2)-1;RKI]; %[Tage;Infizierte(kum);Tote;Geheilte]
RKI=[RKI;RKI(2,:)-(RKI(3,:)+RKI(4,:))] %Erzeuge Aktuell Infizierte
%Parameter:
dt=0.1; %Zeitschritt in d
I0=RKI(2,1); %Anfangsinfizierte
k=0.3; %Infektionsrate
R0=0; %Anfangsgenesene bzw. -tote
B=(2/3)*250; %Kapazität in Tausend
T=14; %Genesungsdauer in Tagen
w=1/T; %Genesungsrate
%Zeitarray:
tmax=180;
t=0:dt:tmax;
%Anfangswerte:
y0=[B-(I0+R0)/1000,I0/1000,R0/1000];
f2=@(y,x) [-k*y(2)*y(1)/B ; k*y(2)*y(1)/B-w*y(2) ; w*y(2)]; %y(1)=S, y(2)=I, y(3)=R
%Erzeuge numerische Lösung
y=lsode(f2,y0,t);
%Graphische Ausgabe:
figure()
plot(t,y(:,1),t,y(:,2),t,y(:,3),t,y(:,2)+y(:,3),RKI(1,:),RKI(2,:)/1000,'.',...
RKI(1,:),(RKI(3,:)+RKI(4,:))/1000,'.',RKI(1,:),RKI(5,:)/1000,'.')
hold on
xlabel('Zeit [d]')
axis([0 tmax 0 B])
ylabel('Bevölkerung (in Tsd.)')
legend(['Infektionsanfaellige';'Infizierte';...
'Genesene bzw. Verstorbene';'Infizierte (kummuliert)';...
'RKI Infizierte';'RKI Genesene/Verstorbene';'RKI Infiziert (kum.)'],"location","east")
title(['SIR-Modell in',num2str(tmax),' Tagen mit ',num2str(I0),...
' Anfangsinfizierten und Infektionsrate k=',num2str(k)])
hold off
Darstellung SIR Modell
[Bearbeiten]
Problem
[Bearbeiten]
Ebenso wie im SI Modell stimmen die Zahlen des RKI nur mit der Kurve überein, wenn man die Gesamtbevölkerung geringer wählt. Dies ist auf eine hohe Dunkelziffer zurückzuführen.
6. Modifiziertes SIR Modell
[Bearbeiten]
Einführung
[Bearbeiten]
Das modifizierte SIR Modell berücksichtigt einerseits, dass die gestorbenen Infizierten nicht mehr in der Gruppe der Genesenen erfasst werden. Da nicht alle Infizieten durch Tests identifiziert werden, wird zusätzlich die Dunkelziffer einbezogen. Somit gilt:
Hierbei ist , wobei k und B wie im SI bzw. SIR Modell gewählt werden.
d bezeichnent die Sterbrate der Infizierten und r den Anteil der durch Tests identifizierten Infizierten.
Wählt man r=1 und d=0 erhält man das SIR Modell.
Octave Implementierung
[Bearbeiten]
Folgendes Modell wurde mit Octave erstellt:
%Implementierung SIR-Modell modifiziert:
clear all
%Hole RKI-Daten von coronaData:
RKI=coronaData;
RKI=[0:size(RKI,2)-1;RKI]; %[Tage;Infizierte(kum);Tote;Geheilte]
RKI=[RKI;RKI(2,:)-(RKI(3,:)+RKI(4,:))]; %Erzeuge Zeile aktuell Infizierte
%Parameter: dt=0.1; %Zeitschritt in d
tmax=180; %Betrachtungsdauer in d
I0=RKI(2,1); %Anfangsinfizierte
d=0.003; %Sterberate
R0=0; %Anfangsgenesene bzw. -tote
B=(2/3)*83000; %Kapazität in Tausend
T=14; %Genesungsdauer in Tagen
w=1/T; %Genesungsrate
r=0.9 %rel. Anteil durch Tests erfasste Infizierte
k=[0.3;0.1;0.6]; %Infektionsraten (wurde durch Ausprobieren festgelegt)
it1=56; %Ende 1./Start 2. Infektionsperiode (56=22.03.)
it2=122; %Ende 2./Start 3. Infektionsperiode (122=27.05.)
y0=[B-(I0+R0)/1000,I0/1000,R0/1000]; %Anfangswerte [S,I,R]
%________________________%
%Zeitarrays:
t1=0:dt:it1-dt;
t2=it1:dt:it2-dt;
t3=it2:dt:tmax;
t=0:dt:tmax;
%Modifiziertes SIR Modell (DGL-System):
f=@(y,x) [-k(1)*y(2)*y(1)/(r*B) ; k(1)*y(2)*y(1)/B-w*y(2) ; w*y(2)-d*y(2)]; %y(1)=S, y(2)=I, y(3)=R
%Erzeuge numerische Lösungen:
y1=lsode(f,y0,t1); %Berechne 1. Phase
f=@(y,x) [-k(2)*y(2)*y(1)/(r*B) ; k(2)*y(2)*y(1)/B-w*y(2) ; w*y(2)-d*y(2)]; %Ändern der Infektionsrate
y2=lsode(f,y1(length(t1),:),t2); %Berechne 2. Phase
f=@(y,x) [-k(3)*y(2)*y(1)/(r*B) ; k(3)*y(2)*y(1)/B-w*y(2) ; w*y(2)-d*y(2)]; %Ändern der Infektionsrate
y3=lsode(f,y2(length(t2),:),t3); %Berechne 3. Phase
y=[y1;y2;y3];
%yy=ones(length(y(1)),1)*B;
%yy=yy-(y(:,1)+y(:,2)+y(:,3)); %Berechnen der Verstorbenen (?)
%y=[y,yy];
%Graphische Ausgabe
figure()
plot(t,y(:,1),"b",t,y(:,2),"r",t,y(:,3),'color','g',t,y(:,2)+y(:,3),'color','c',...
RKI(1,:),RKI(5,:)/1000,'.','color','r',RKI(1,:),(RKI(3,:)+RKI(4,:))/1000,'.','color','g',...
RKI(1,:),RKI(2,:)/1000,'.','color','c')
xlabel('Zeit [d]')
axis([0 tmax 0 B])
ylabel('Bevölkerung (in Tsd.)')
legend(['Infektionsanfaellige';'Infizierte';...
'Genesene bzw. Verstorbene';'Infizierte (kummuliert)';'Verstorbene';...
'RKI Infizierte';'RKI Genesene/Verstorbene';'RKI Infizierte (kum.)'],"location","east")
title(['Modifiziertes SIR-Modell in ',num2str(tmax),' Tagen mit ',num2str(I0),...
' Anfangsinfizierten und Kapazität bei ',num2str(round(B*1000)),'.'])
%_______________________%
%Da r den relativen Anteil der von den Tests erfassten Infizierten darstellt, gilt 0<r<1.
%In dieser Darstellung ist r mit 0,9 recht groß gewählt.
%Dies bedeutet, dass der Test fast alle Infizierte erfassen würde.
%Hierdurch ist die Konvergenz am rechten Rand deutlich höher, wie wenn r=0,1 o.�. gewählt wird.
%Gibt man für r=0,1 ein, sieht man eine vergleichsweise geringe Zahl der Infizierten.
%Jedoch würde man dann eine große Dunkelziffer haben.
%______________________________________________________________________________%
%Anpassung der Kapazität und Infektionsrate an RKI-Daten:
%Implementierung SIR-Modell modifiziert:
clear all
%Hole RKI-Daten von coronaData:
RKI=coronaData;
RKI=[0:size(RKI,2)-1;RKI]; %[Tage;Infizierte(kum);Tote;Geheilte]
RKI=[RKI;RKI(2,:)-(RKI(3,:)+RKI(4,:))]; %Erzeuge Zeile Aktuell Infizierte
%Parameter:
dt=0.1; %Zeitschritt in d
tmax=180; %Betrachtungsdauer in d
I0=RKI(2,1); %Anfangsinfizierte
d=0.003; %Sterberate
R0=0; %Anfangsgenesene bzw. -tote
B=(2/3)*300; %Kapazität in Tausend
T=14; %Genesungsdauer in Tagen
w=1/T; %Genesungsrate
r=0.9; %rel. Anteil durch Tests erfasste Infizierte
k=[0.33;0.15;0.45]; %Infektionsraten (wurde durch Ausprobieren festgelegt) (3. Wert für Rate nach Lockerungen)
it1=56-17; %Ende 1./Start 2. Infektionsperiode (56=22.03.)
it2=122-45; %Ende 2./Start 3. Infektionsperiode (122=27.05.)
%Durch Rückdatierung Anpassung an RKI-Daten
y0=[B-(I0+R0)/1000,I0/1000,R0/1000]; %Anfangswerte [S,I,R]
%________________________%
%Zeitarrays:
t1=0:dt:it1-dt;
t2=it1:dt:it2-dt;
t3=it2:dt:tmax;
t=0:dt:tmax;
%Modifiziertes SIR Modell (DGL-System):
f=@(y,x) [-k(1)*y(2)*y(1)/(r*B) ; k(1)*y(2)*y(1)/B-w*y(2) ; w*y(2)-d*y(2)]; %y(1)=S, y(2)=I, y(3)=R
%Erzeuge numerische Lösungen:
y1=lsode(f,y0,t1); %Berechne 1. Phase
f=@(y,x) [-k(2)*y(2)*y(1)/(r*B) ; k(2)*y(2)*y(1)/B-w*y(2) ; w*y(2)-d*y(2)]; %Ändern der Infektionsrate
y2=lsode(f,y1(length(t1),:),t2); %Berechne 2. Phase
f=@(y,x) [-k(3)*y(2)*y(1)/(r*B) ; k(3)*y(2)*y(1)/B-w*y(2) ; w*y(2)-d*y(2)]; %Ändern der Infektionsrate
y3=lsode(f,y2(length(t2),:),t3); %Berechne 3. Phase
y=[y1;y2;y3];
%yy=ones(length(y(1)),1)*B;
%yy=yy-(y(:,1)+y(:,2)+y(:,3)); %Berechnen der Verstorbenen
%y=[y,yy];
%Graphische Ausgabe
figure()
plot(t,y(:,1),"b",t,y(:,2),"r",t,y(:,3),'color','g',t,y(:,2)+y(:,3),'color','c',...
RKI(1,:),RKI(5,:)/1000,'.','color','r',RKI(1,:),(RKI(3,:)+RKI(4,:))/1000,'.','color','g',...
RKI(1,:),RKI(2,:)/1000,'.','color','c')
xlabel('Zeit [d]')
axis([0 tmax 0 B])
ylabel('Bevölkerung (in Tsd.)')
legend(['Infektionsanfaellige';'Infizierte';...
'Genesene bzw. Verstorbene';'Infizierte (kummuliert)';...
'RKI Infizierte';'RKI Genesene/Verstorbene';'RKI Infizierte (kum.)'],"location","east")
title(['Modifiziertes SIR-Modell in ',num2str(tmax),' Tagen mit ',num2str(I0),...
' Anfangsinfizierten und Kapazität bei ',num2str(round(B*1000)),'.'])
Darstellung modifiziertes SIR Modell
[Bearbeiten]
Problem
[Bearbeiten]
Bei diesem Modell wird die Geburtenrate und die allgemeine Sterberate nicht berücksichtigt.
Zudem wird die räumliche Infektionsverbreitung sowie die unterschiedliche räumliche Bevölkerungsdichte vernachlässigt.
7. Modell des Reaktionsdiffusionsprozess
[Bearbeiten]Einführung
[Bearbeiten]
Das Modell der Reaktionsdiffusion wird auch als populationsbasiertes räumlich-kontinuierliches Modell bezeichnet. Bei dem Reaktionsdiffusionsprozess wird die Reaktionsdiffusionsgleichung herangezogen. Dies ist eine inhomogene Gleichung mit Quelldichtefunktion (vgl. Abschnitt 2.). Diese ist folgendermaßen definiert:
f wird auch als Reaktionsterm bezeichnet.
Im Gegensatz zu den rein dynamischen Kompartimentmodellen wird in diesem Modell der räumliche Austausch betrachtet. Dies liegt daran, dass die Kompartimentmodelle auf der Massenerhaltung beruhen.
Somit beschreibt dieses Modell nicht nur die zeitliche, sondern auch die räumliche Ausbreitung.
Wir betrachten auch in diesem Modell wieder nur das beschränkte Wachstum. Somit gilt für den Reaktionsterm:
wobei u die Dichtefunktion der kumulierten Infizierten, k die logistische Infektionsrate und B die Dichtefunktion der Gesamtpopulation angibt.
Teil man die kumulierten Infizierten in aktuell Infizierte und Genesene bzw. Tote (vgl. SIR Modell), erhält man für die Dichtefunktionen der Infektionsanfälligen und der aktuell Infizierten folgende Differentialgleichungen:
Die Reaktionsterme sind definiert durch:
und
Hierbei gibt w die Wechselrate zwischen I und R an.
Randnotizen:
[Bearbeiten]Differenzenquotienten:
erster zenraler Differenzenquotient:
zweiter zentraler Differenzenquotient:
vorwärts(+) / rückwärts(-) Differentienquotient:
Octave Implementierung
[Bearbeiten]%Implementierung Diffusion-Reaktion
close all
clear all
%________________________________Startparameter________________________________%
%Definiere Groesse Anfangsgebiet und Schrittweiten
xend=5;
yend=10;
dx=0.1;
dy=dx;
[x,y]=meshgrid(0:dx:xend,0:dy:yend);
N=size(x,2); %Anzahl x-Schritte
M=size(y,1); %Anzahl y-Schritte
%Definiere Dauer, Zeitschrittlaenge und Anz. Zeitschritte
T=200;
dt=0.1;
nt=T/dt;
%Definiere (konst.) Diffusionskoeffizienten
D=0.01;
c=0.3; %Infektionsrate
w=1/14; %Wechselrate
t_lock=28; %Tag des Lockdowns
%___________Einlesen, interpolieren und anpassen Bevoelkerungsdichte___________%
pic=imread('abc.png');
pic=pic(:,:,2);
pic=double(pic);
[s1 s2]=size(pic);
Max=max(max(pic));
pic_int=interp2(pic,xend*(1*x.+2)/(xend+2),yend*(1*y.+2)/(yend+2), 'cubic')/Max+0.1;
pic_int=flipud (pic_int);
pic_int=reshape(pic_int',M*N,1);
pic_int=(pic_int+0.5)/1.5; %Korrektur Dichte
%________________________sonstige Parameter____________________________________%
k=1; %Zaehler graphische Ausgaben
p=10/dt; %Anz. Zeitschritte bevor neues Bild ausgegeben wird
%______________________________________________________________________________%
%_______________________Erzeugen der Systemmatrix______________________________%
%Hier noch ohne Randbedingungen
B=diag(-4.*ones(N*M,1),0)+diag(ones(N*M-1,1),1)+ diag(ones(N*M-1,1),-1)+diag(ones(N*(M-1),1),N)+diag(ones(N*(M-1),1),-N);
%Korrektur
for i=1:(M-1)
B(i*N+1,i*N)=0; %Korrektur linker Rand
B(i*N,i*N+1)=0; %Korrektur rechter Rand
endfor
%Gewichtung mit Diff.koeff und Schrittweite
B=B*D/dx^2;
%______________________________________________________________________________%
%Neumann'sche Randbedingungen: Setze die Richtungsableitung an allen Raendern 0
%Neumann-Korrektur:
for i=1:N
B(i,i)=B(i,i)+1; %Oberer Rand
endfor
for i=N*(M-1)+1:N*M
B(i,i)=B(i,i)+1; %Unterer Rand
endfor
for i=1:N:N*(M-1)+1
B(i,i)=B(i,i)+1; %Linker Rand
endfor
for i=N:N:N*M
B(i,i)=B(i,i)+1; %Rechter Rand
endfor
%______________________________________________________________________________%
%Erzeugen der Anfangsloesung
for i=1:N
for j=1:M
start(j,i)=0.005*anfang2(x(j,i),y(j,i));
endfor
endfor
%Erzeuge 'Vektor' aus Anfangssituation
inf_alt=1*reshape(start',N*M,1);
sus_alt=pic_int-inf_alt;
inf_anz=sum(inf_alt);
sus_anz=sum(sus_alt);
t=0:dt:T;
%Reaktions-Term/Funktion (SIR)
fS=@(uI,uS,x) -c*slowdown(x,t_lock)*uI.*uS./pic_int;
fI=@(uI,uS,x) c*slowdown(x,t_lock)*uI.*uS./pic_int-w*uI;
%_________________________Berechnung Diff-Reak_________________________________%
for i=1:nt
sus=sus_alt+B*sus_alt*dt+fS(inf_alt,sus_alt,i*dt)*dt;
inf=inf_alt+B*inf_alt*dt+fI(inf_alt,sus_alt,i*dt)*dt;
inf_anz=[inf_anz sum(inf)];
sus_anz=[sus_anz sum(sus)];
sus_alt=sus;
inf_alt=inf;
sus_mat(:,i)=sus;
inf_mat(:,i)=inf;
%Ausgabe jedes p-ten Bildes
if mod(i,p)==0
matrix_ausgabe=reshape(inf_mat(:,i),N,M)';% Matrix mit N(Spalten)x M(Zeilen)
figure(k)
surfc(x,y,matrix_ausgabe, "EdgeColor", "none")
colormap("jet")
colorbar
axis([0 xend 0 yend -0.001 1])
%caxis([0 0.3])
title (["Normierte Infiziertendichte nach ", num2str(dt*i), "Tagen"]);
ylabel("y in km")
xlabel("x in km")
view(2)
test=["Fig_", num2str(k)];
saveas(k, test, 'jpg')
k=k+1;
endif
endfor
figure(k)
plot(t,inf_anz,t,sus_anz)
xlabel('Zeit in Tagen')
ylabel('Bevölkerungsdichte pro Flaecheneinheit')
legend(['Infiziertendichte';'Anfaelligendichte'])
title('Darstellung der Dichten in Abhaengigkeit der Zeit')
test=["Fig_", num2str(k)];
saveas(k, test, 'jpg')
Graphische Darstellung
[Bearbeiten]
Problem
[Bearbeiten]In dieser Modellierung wurde ein konstanter Diffusionskoeffizient angenommen. Jedoch hängt dieser in der Realität von der Bevölkerungsdichte ab. Dieses Problem kann behoben werden, indem der Diffusionskoeffizient in Abhängigkeit der Populationsdichte modelliert wird.
Ergänzungen Octave-Tutorial
[Bearbeiten]Diese Ergänzungen wurden bei dem Octave-Tutorial vorgenommen, um die Implementation der Gruppe bzgl. der verwendeten Octave-Befehle nachvollziehbar zu machen.
- Matrix-Multiplikation in Octave - notwendig für die Modellierung diskreter Transportprozesse.
Skripte in Octave
[Bearbeiten]Referenzieren Sie hier die von Ihnen verwendeten Skripte und Bibliotheken in Octave[1] oder R/Studio
Quellenangaben
[Bearbeiten]Notieren Sie hier die von Ihnen verwendete Literatur
- Boto von Querenburg (2013) Mengentheoretische Topologie - Springer-Lehrbuch
- Wikipedia-Artikel zu Epidemiologie (2020)[2]
Literatur
[Bearbeiten]- ↑ Silva, I., & Moody, G. B. (2014). An open-source toolbox for analysing and processing physionet databases in matlab and octave. Journal of open research software, 2(1).
- ↑ „Epidemiologie“. In: Wikipedia, Die freie Enzyklopädie. Bearbeitungsstand: 25. Juni 2020, 09:27 UTC. URL: https://de.wikipedia.org/w/index.php?title=Epidemiologie&oldid=201288758 (Abgerufen: 25. Juni 2020, 10:24 UTC)