Zum Inhalt springen

Kurs:Räumliche Modellbildung/Gruppe 16

Aus Wikiversity

Gruppenseite - (EGL)

[Bearbeiten]

Diese Seite enthält die gesammelten Materialien der Gruppe 16 für die Portfolioprüfung.

Teilnehmer-innen

[Bearbeiten]
  • Ellerwald, Jonas
  • von Gerichten, Marco
  • Lapport, Felix

Diskrete Modellierung

[Bearbeiten]

Infektionsepidemiologie

[Bearbeiten]

Unter der Infektionsepidemiologie versteht man eine medizinische Fachdisziplin und ein Teilgebiet der Epidemiologie, welche sich mit der Ausbreitung und der Eindämmung von Infektions- und parasitären Krankheiten, unter Einbezug ihres räumlichen und zeitlichen Auftreten, beschäftigt. Dabei können die meisten Infektionskrankheiten mathematisch modelliert werden, um eben das bereits angesprochene zeitliche und räumliche Verhalten zu untersuchen und zu prognostizieren.

Zyklus 1: SIR-Modell

[Bearbeiten]

Erste Gedankenspiele

[Bearbeiten]

Wir wollten eine Graphische Darstellung des SIR Modells anhand der Zahlen der Stadt Kaiserslautern. Die Einwohnerzahl von Kaiserslautern beträgt ca. 100.000. Zusätlich haben wir die Infektionsrate auf 30% täglich festgelegt.

Um uns die Funktionen der Infizierten, Empfänglichen und Genesenen deutlich zu machen, begannen wir mit einer Exeltabelle

Anhand dieser Tabelle und der Bildlichen Programierung der Zellen entwickelten wir das Pendant in Octave:

S = 100885 ;  %Möglichen Infizierten
I = 0  ; %Infizierten
R = 0  ;  %Genesenen

k = 0.3 ;   %Infektionsrisiko
w = 1/14;   %Genesungszeit
Zeit = 30;  %Laufzeit des Modells in Tagen

Erstellung von Vectoren von S, I, R in der länge der zu berechnenden Zeit

Sneu = [0:Zeit];
Ineu = [0:Zeit];
Rneu = [0:Zeit];

Vectoren Nullsetzen

Sneu(2:Zeit) = 0;
Ineu(2:Zeit) = 0;
Rneu(1:Zeit) = 0;

Eintragung des Startwerts an der ersten Stelle des Vectors

Sneu(1) = S;
Ineu(1) = I;
Rneu(1) = R;

Da uns die Genesungsrate von 1/14 nicht zusagte, da dies nicht wirklich der konkreten Darstellung des Genesungsprozesses abbildet, entschieden wir uns für die Genesung nach 14 Tagen. Wegen der Genesungszeit von 14 Tagen, mussten wir für den Zähler eine if Abfrage einbauen, um den Fehler des Programms bezüglich der Vectoren abfrage zu vermeiden.

for t = 1:Zeit
 
 if t >= 15
   Rneu(t+1) = Ineu(t-14);
 else
   Rneu(t+1) = 0; 
 endif

 Ineu(t+1) = k*(Sneu(t))+Ineu(t);
 Sneu(t+1) = Sneu(1) - Ineu(t+1); 
 
endfor


Die ersten Gedankenspiele unserer weiteren epidemiologischen Untersuchung haben wir nun zunächst unabhängig von Wechselwirkungen der Orte für die Ortschaften Kaiserlautern, Neustadt an der Weinstraße, Landau, Pirmasens, Impflingen und Rumbach ausgeweitet Dementsprechend haben wir die Excel-Programmierung bzw. die Libre Office-Programmierung auch durch diese Orte erweitert.

Fazit & weitere Optimierungsmöglichkeiten

[Bearbeiten]

Der Zyklus 1 ist eine zunächst noch sehr einfaches Modell, das das Infektionsgeschehen in unseren gewählten Knoten ohne Bewegung der Bevölkerung modelliert. Die Knoten selbst liegen zumindest in Form der Städte Kaiserlautern, Neustadt, Landau und Pirmasens entlang der Schnell- und Kraftfahrtstraßen und bilden somit die Knotenpunkte eines Wegenetzes. Die Modellierung in Excel und Octave des SIR-Modells können für unsere weiteren Zyklen erneut genutzt werden und bilden die Basis für das weitere Vorgehen. Letztendlich fehlt es dem Zyklus jedoch an den Verbindungen zwischen den Knoten und somit auch an Personenverkehr zwischen unseren gewählten Orten. Somit ergeben sich bereits weitere Möglichkeiten einer Optimierung des Modells. So werden im nächsten Schritt und dementsprechend im zweiten Zyklus die Verbindungen zwischen den Knoten ergänzt und der Personenverkehr könnte anhand einer Transportmatrix simuliert werden.

Zyklus 2: SIR-Modell mit Transportmatrix

[Bearbeiten]

In Zyklus zwei wurde dann der von uns ausgewählte Raum durch eine endliche Menge von Knoten und Verbindungen mittels eines ungerichteten Graphen diskretisiert. Der Graph kodiert dabei das Wegenetz von Impflingen über Landau, Neustadt, Kaiserslautern, Pirmasens nach Rumbach. Es ergibt sich ein ungerichteter Graph mit 6 Knoten wie der Abbildung zu entnehmen ist. Mit der Menge der Knoten und der Menge der ungerichteten Knotenverbindungen:

Anzahl_Orte = 6
vec_u0 = [100000 53148 46677 40403 805 472]  ;
Matrix_Tag_0 = [100000 1 0; 53148 0 0; 46677 0 0; 40403 0 0; 805 0 0; 472 0 0];
r = 0.03 ;
Tage = 5;
w = 1/14;

Die Verbindungen und Übergänge zwischen den jeweiligen Ortsbewohnern haben wir mit Hilfe sogenannter Übergangsmatrizen in Octave modelliert. Unter Beachtung der vorhandenen Verbindungen aus Menge haben wir eine Transportmatrix erstellt.

#Implementieren der Transportmatrix für 6 Orte
Transportmatrix = [0.6 0.3 0.3 0.3 0 0; 0.2 0.5 0.2 0 0 0; 0.1 0.2 0.3 0.2 0.2 0; 0.1 0 0.18 0.48 0 0.15; 0 0 0.02 0 0.8 0; 0 0 0 0.02 0 0.85 ]

Transportmatrix

Ort/Stadt             Kaiserslautern| Neustadt a. d. W. | Landau i. d. P. | Pirmasens | Impflingen | Rumbach 
---------------------------------------------------------------------------------------------------------------
Kaiserslautern    |       0.6       |        0.3        |       0.3       |     0.3   |      0     |    0 
Neustadt a. d. W. |       0.2       |        0.5        |       0.2       |      0    |      0     |    0
Landau i. d. P.   |       0.1       |        0.2        |       0.3       |     0.2   |     0.2    |    0
Pirmasens         |       0.1       |         0         |       0.18      |     0.48  |      0     |   0.15
Impflingen        |        0        |         0         |       0.02      |      0    |     0.8    |    0
Rumbach           |        0        |         0         |         0       |     0.02  |      0     |   0.85

Grundsätzlich gibt diese uns Auskunft über den Personenverkehr zwischen den jeweiligen Verbindungen. Die Einträge mit Null kennzeichnen die nicht vorhandenen Verbindungen zwischen den Knoten. Somit kann aus epidemiologischer Sicht kein Austausch von Personen stattfinden, da diese keine epidemiologischen Nachbarn sind. Mit einer for-Schleife haben wir die täglichen Bewegungen zwischen den Knoten simuliert und für eine endliche Anzahl von Tagen laufen lassen.

 for i = 1:Tage
   %Impffaktor wird festgelegt
   Impffaktor = 0;
   %Ab 4tem Tag wird geimpft (mit dem Faktor 0.0005)
   if i >= 4
     Impffaktor = 0.005;
   endif
   %Iteration läuft über alle Orte
   for j = 1:Anzahl_Orte
     %Epidemiologischer Prozess
     Ergebnismatrix(j,:) = SIR_Impf_Vector(Ergebnismatrix(j,1),Ergebnismatrix(j,2),Ergebnismatrix(j,3),r,w,Impffaktor);
     %Räumlicher Prozess
     %if j == 1 || j == 3 
       %Die Infizierten bleiben an ihrem Ort (j=1 -> S ; j=3 -> R) für die die Transportmatrix angewendet wird
       %Ergebnismatrix(:,j) = Transportmatrix*Ergebnismatrix(:,j);
     %endif
 
   endfor
 Ergebnismatrix
 endfor

Fazit & Ausblick

[Bearbeiten]

Durch das Bilden eines ungerichteten Graphen konnten wir unsere Knoten verbinden und das Wegenetz und somit die Transportprozesse zwischen den jeweiligen Knoten darstellen. Über den Transport und das Anwenden des SIR-Modells kann das Pandemiegeschehen in den jeweiligen Orten modelliert werden. Dies zeigt wie stark der Einfluss der Mobilität auf das jeweilige Geschehen ist. Für den weiteren Zyklus wäre es nun eine Optimierung das SIR-Modell durch das modifizierte SIR-Modell zu ersetzen.

Zyklus 3: Modifiziertes SIR-Modell mit Transportmatrix

[Bearbeiten]

Zunächst haben wir wieder unseren ungerichteten Graphen mit unseren 6 Knoten bzw. unseren 6 gewählten Orten in Octave implementiert. Der Vektor vec_u0 gibt die jeweilige Bevölkerungszahl der Orte und beschreibt somit die für das modifizierte SIR-Modell wichtige Bevölkerungskapazität in jedem gewählten Knoten aus der Menge . Die Matrix gibt uns die Startwerte im Zeitpunkt für unsere Kompartimente. Für die Vereinfachung des Modells haben wir in jedem Knoten einen Infizierten gewählt, der das Infektionsgeschehen in jedem Ort in Gang bringt. Die weiteren wichtigen Variablen für das modifizierte SIR-Modell haben wir anhand unserer Modellierung im Tutorium 3 gewählt.

vec_u0 = [100000 53148 46677 40403 805 472];  
Matrix_Tag_0 = [100000 1 0 0 ; 53148 1 0 0; 46677 1 0 0; 40403 1 0 0; 805 1 0 0 ; 472 1 0 0];
Anzahl_Orte = length(vec_u0)
r = 1 ;
c = 0.3435;
d = 0.03;
T = 100;
w = 1/14;
B = [100000 53148 46677 40403 805 472];

Im nächsten Schritt haben wir in einer Funktion das modifizierte SIR-Modell implementiert.

function wert = SIR_Vec_mod (S, I, R, T,w,c,d,r,B)
 Rneu = w*I - d*I +R  ;
 Ineu =(c/B)*S*I+I - w*I;
 Sneu = S-c*S*I/(r*B) ;
 Tneu = d*I+T ;
 wert=[Sneu Ineu Rneu Tneu];
endfunction
Ergebnismatrix=Matrix_Tag_0;
SIRmatrix = ones(length(vec_u0),4);
Transportmatrix = [0.6 0.3 0.3 0.3 0 0; 0.2 0.5 0.2 0 0 0; 0.1 0.2 0.3 0.2 0.2 0; 0.1 0 0.18 0.498 0 0.15; 0 0 0.02 0 0.8 0; 0 0 0 0.002 0 0.85 ];

Mittels der for-Schleife wird das SIR-Modell für jeden Tag einmal durchgeführt. Die zweite for-Schleife gibt uns die Berechnung der Ergebnisse für jeden Ort.

for i = 1:T
   for j = 1:Anzahl_Orte
     %Epidemiologischer Prozess
      Ergebnismatrix(j,:) = SIR_Vec_mod (Ergebnismatrix(j,1),Ergebnismatrix(j,2),Ergebnismatrix(j,3),Ergebnismatrix(j,4),w,c,d,r,B(1,j));%Räumlicher Prozess
       for k = 1:4  
           if k == 1
             Ergebnismatrix(:,k) = Transportmatrix*Ergebnismatrix(:,k);
           else if k == 2
             Ergebnismatrix(:,k) = Transportmatrix*Ergebnismatrix(:,k);
           else if k == 3 
             Ergebnismatrix(:,k) = Transportmatrix*Ergebnismatrix(:,k);
           else if k == 4
             Ergebnismatrix(:,k) = Ergebnismatrix(:,k); 
           endif
           endif
           endif
           endif 
       endfor
   endfor 
Ergebnismatrix
endfor


Das sich die Transportmatrix lediglich in den ersten paar Zeitschritten bemerkbar macht, liegt daran, dass sich das System durch die Transportmatrix sehr schnell stabilisiert und sich, nach kurzer Zeit, keine weiteren Veränderungen mehr ergeben.

Fazit und weitere Optimierungsmöglichkeiten

[Bearbeiten]

Weitere Optimierungsmöglichkeiten wäre die Darstellung in Säulen in den jeweiligen Knoten, um den Verlauf der Pandemie auf unserer diskretisierten Fläche von Rheinland-Pfalz in den Knoten deutlicher darstellen zu können.

Zyklus 4: SIR-Modell Darstellung in 3D

[Bearbeiten]

Im ersten Schritt des vierten Zyklus haben wir mit GeoGebra gearbeitet. Zunächst haben wir unsere Karte mit den markierten Knoten in ein 2D-Koordinatensystem eingefügt. Danach haben wir die Karte bzw. die Grafik der Karte so gelegt, dass sie im ersten Quadranten des Koordinatensystem liegt. Dies erleichtert uns im Endeffekt die Bestimmung der Koordinaten. Dementsprechend wurde die Grafik auf der linken Seite auf die y-Achse gelegt und mit dem unteren Rand auf die x-Achse. Daraufhin haben wir durch einfaches Einfügen von Punkten die Koordinaten unserer Knoten erzeugt. Durch Darstellen dieser Punkte in der 3D-Ansicht ergibt sich zumindest der rechteckige Bereich, auf welchem die gewählten Knoten liegen. Anhand unserer somit gefunden Koordinaten konnten wir nun weiterarbeiten.

Einlesen der Koordinaten in Octave

[Bearbeiten]

Zunächst haben wir das Gebiet in x- und y-Richtung definiert:

step=0.1;
X=[0:step:7];
Y=[0:step:7.5];
[x,y]=meshgrid(X,Y);

function wert= hallo_funktion(x,y,z1,z2,z3,z4,z5,z6)
 
  if sqrt((x.-3.9).^2+(y.-7.2).^2)<=0.3 wert=z1;
   elseif sqrt((x.-6.7).^2+(y.-6).^2)<=0.28  wert=z2;
   elseif sqrt((x.-6.8).^2+(y.-4.1).^2)<=0.24 wert=z3;
   elseif sqrt((x.-2.7).^2+(y.-4).^2)<=0.2 wert=z4;
   elseif sqrt((x.-6.8).^2+(y.-3.5).^2)<=0.06 wert=z5;
   elseif sqrt((x.-4.1).^2+(y.-2.6).^2)<=0.1 wert=z6;
  else wert=0;
  endif 
endfunction

Fazit & weitere Optimierungsmöglichkeiten

[Bearbeiten]

Weiter Optimierungsmöglichkeit wäre das Hinzufügen weiterer Orte. Auch das Impfen als weiterer Faktor für das SIR-Modell könnte hinzugefügt werden. Nach dem Modellieren der Pandemie in den 6 Knoten ergeben sich viele weitere Modellierungsmöglichkeiten. Interessant wäre die Untersuchung und Modellierung der Lockdowns auf das Infektionsgeschehen, ebenso wie der Einfluss der Impfkampagne (angepasst an den realen Verlauf der Impfkampagne). Auch die Entstehung weiterer Varianten des Corona-Virus haben einen großen Einfluss auf den Fortlauf der Pandemie. Auch der Einfluss des Wetters bzw. der Jahreszeit auf die Verbreitung des Virus könnte in einem Modell erarbeitet werden.

Ausblick: Modellierung mit der Impfkampagne. Durch Erstellen einer Funktion, die die Impfquote zu verschiedenen Zeitpunkten abbildet, könnte die vorhergehende Modellierung in Octave angepasst werden.

Verbindung der Werte mit dem SIR-Modell

[Bearbeiten]

for p=1:(length(X))
  for q=1:(length(Y))
    Koordinaten_S(q,p)=1*hallo_funktion(x(q,p),y(q,p),Ergebnismatrix(1,1),Ergebnismatrix(2,1),Ergebnismatrix(3,1),Ergebnismatrix(4,1),Ergebnismatrix(5,1),Ergebnismatrix(6,1));
    Koordinaten_I(q,p)=1*hallo_funktion(x(q,p),y(q,p),Ergebnismatrix(1,2),Ergebnismatrix(2,2),Ergebnismatrix(3,2),Ergebnismatrix(4,2),Ergebnismatrix(5,2),Ergebnismatrix(6,2));
    Koordinaten_R(q,p)=1*hallo_funktion(x(q,p),y(q,p),Ergebnismatrix(1,3),Ergebnismatrix(2,3),Ergebnismatrix(3,3),Ergebnismatrix(4,3),Ergebnismatrix(5,3),Ergebnismatrix(6,3));
  endfor
endfor

Kontinuierliche Modellierung

[Bearbeiten]

Tutorium 1 - Kontaktmodell

[Bearbeiten]

In der ersten Tutoriumsaufgabe soll ein einfaches Kontaktmodell entwickelt werden. Dazu befindet sich unter einer gewissen Anzahl von Individuen ein infiziertes. Nun bewegen sich die alle Individuen. Kommen sie einem Infiziertem zu nahe, infizieren sie sich selbst und tragen so zu einer Verbreitung der Infektionen bei, denn im nächsten Zeitschritt können auch diese die Infektion weitergeben.

Folgende Aufgaben waren zu bearbeiten:

1. Geschwindigkeit, finale Simulationszeit ändern und analysieren, wie sich das auf die Infektionsverbreitung auswirkt.

2. Die Punkte sollen im Verlauf der Simulation die Richtung mehrfach ändern, der Code soll entsprechend angepasst werden.

Umsetzung der Aufgaben

[Bearbeiten]

Als erstes muss ein Mashgrid erzeugt werden, wo sich die Induvidien am Anfang der Simulation befinden. Ein Infizierter wird so gewählt, dass er sich im Zentrum aller Individuen befindet.

 Nx=12;% Anzahl der Vektorkomponenten 
 Ny=18;% Anzahl der Vektorkomponenten
 Zeitschritte=3;% pro T=1
 radiusInf=0.55;% Ansteckungsradius
 T=4 ;% Zeiteinheit 
 g=0.90;% Geschwindigkeit der Teilchen/Personen
 % Abstand am Anfang=1
 %------------------------
 x=[1:Nx];%Zeilenvektor mit Nx - Zeilen
 y=[1:Ny];%Spaltenvektor mit Ny - Spalten
 dt=1/Zeitschritte;% Unterteilung der Zeiteinheit in oben genannte Zeitschritte
[x,y]=meshgrid (x,y);% Aufspannung der Koordinatengitter von x und y 
 neuPosX=x.+g*rand(Ny,Nx)-0.5*g;#x-Koordinaten der Teilchen/Passanten
 neuPosY=y.+g*rand(Ny,Nx)-0.5*g;#y-Koordinaten der Teilchen/Passanten
 %erste Infizierte 
 xInf=x(1, Nx/2);%x-Position des ersten Infizierten im Mittelpunkt 
 yInf=y(Ny/2);%y-Position des ersten Infizierten im Mittelpunkt 
 IndInf2=Nx/2;
 IndInf1=Ny/2;
 IndInf1neu=IndInf1;
 IndInf2neu=IndInf2;

Die Laufrichtung der Induvidien wird in einer For-Schleife mit Zufallszahlen generiert. So bewegen sich alle Punkte im Laufe der Simulation in eine unterschiedliche Richtung.


Kritik: Ein Individuum kann nach einer Infektion nicht genesen, ist es einmal infiziert, bleibt es infiziert.

Tutorium 2 - Fundamentallösungen der Diffusionsgleichung

[Bearbeiten]

Physikalische Herleitung

[Bearbeiten]
Für die Herleitung relevante Funktionen und Größen
[Bearbeiten]

||Raumveränderliche

||Zeitveränderliche

||Dichtefunktion der Konzentration der Corona-Infizierten und nach Definition ist die Abbildung auch ein Vektorfeld auf ´siehe [1] und wird im Fall der Diffusion als Strömungsfeld interpretiert.

||Divergenz: Quellen und Senken eines Vektorfelds oder auch Quelldichte genannt. Besagt grundsätzlich wie sehr Vektoren in einer kleinen Umgebung auseinanderstreben.

||Gradient: Richtung des steilsten Anstiegs

||Laplace-Operator: Ordnet einem zweimal differenzierbaren Skalarfeld die Divergenz seines Gradienten zu. Ist für skalare Funktionen allgemein definiert als [2]

||Laplace-Gleichung oder auch homogene Poisson-Gleichung.

||Poisson-Gleichung

||Diffusionsflussrate oder auch Teilchenstromdichte, die angibt wie viele Teilchen links nach rechts strömen.

||Ortsabhängiger Diffusionkoeffizient = Maß der Beweglichkeit von Teilchen [3]

Herleitung stationäre Diffusion in räumlicher Dimension
[Bearbeiten]

Für die Herleitung der räumlichen Diffusion wird ein dünner horizontaler Stab der Länge betrachtet. Dementsprechend wird mathematisch gesehen die Konzentration der Teilchen in einer räumlichen Dimension auf dem Intervall untersucht. Die Konzentration in vertikaler Richtung wird im System als homogen betrachtet, wodurch nur die Konzentrationsdichte in horizontaler Richtung von Bedeutung ist. Für die Herleitung der Diffusionsgleichung nutzt man nun zwei physikalische Gesetze. Das Fick´sche Gesetz und das Massenerhaltungsgesetz. Zunächst betrachten wir die Herleitung der Diffusionsgleichung in einem von der Zeit unabhängigen System. Also ein System, dass sich bereits im Gleichgewicht befindet. Dies nennt man auch stationäre Diffusion. Bei der Diffusion werden Teilchen bewegt, präziser gefasst werden sollen sich Teilchen des einen Stoffes in einem zweiten Stoff verteilen. Diese Bewegung ist nicht ungeordnet, sondern besitzt eine konkrete Richtung. Diese Richtung nennt man Transportrichtung. Die Teilchen strömen nach dem zweiten Fick'schen Gesetz vom Ort mit höherer Konzentration in Orte mit niedriger Konzentration. Daraus ergibt sich ein Fluss bzw. eine Größe für den Fluss der Teilchen. Diese Größe nennt man auch die Teilchenstromdichte . Nach dem ersten Fick'schen Gesetz ist diese Teilchenstromdichte proportional zum Konzentrationsgradienten , der entgegen der Diffusionsrichtung, also der Teilchentransportrichtung verläuft. Die Teilchenstromdichte setzt sich nach dem ersten Fick'schen Gesetz aus dem Konzentrationsgradienten und dem Diffusionskoeffizienten zusammen:


Das zweite bereits oben angesprochene Gesetz ist das Erhaltungsgesetz bzw. Massenerhaltungsgesetz. Dieses besagt grundsätzlich, dass der Stoff in einem Volumen nicht verschwinden kann, noch das zusätzlich Stoff entstehen kann (sofern keine externe Zugabe oder Abnahme erfolgt). Dieser Stoff bleibt also in diesem Volumen erhalten. Nach dem Massenerhaltungsgesetz kann sich die Teilchenanzahl gegeben durch in unserem horizontalen Stab, also zwischen den Rändern des Stabes und nicht ändern. Durch die Brownsche Bewegung kommt es allerdings zum Austausch der Teilchen an den Rändern des Stababschnnittes . Der Zufluss wird durch die Teilchenstromdichte am linken Rand und der Ausfluss durch die Teilchenstromdichte am rechten Rand gegeben. Aus dem Erhaltungsgesetz folgt nun, dass sich Zufluss und Ausfluss ausgleichen müssen, d.h.:


Durch Bilden des Differentialquotienten durch das Teilen durch und den Grenzübergang ergibt sich . Durch Anwendung des ersten Fick'schen Diffusionsgesetz, erhält man die Diffusionsgleichung . Bei konstantem Diffusionskoeffizient erhält man nun die Laplace-Gleichung in einer räumlichen Dimension:


Verallgemeinerung in [4]
[Bearbeiten]

Die Gesammtzahl von Teilchen in einem beliebigen Volumen lässt sich auf folgenderweise berechnen: :

Der Massenfluss durch den Rand ergibt sich für Volumen :, wobei der äußeren Normalenvektor zum Rand von V und die Verknüpfung '' das Skalarprodukt bezeichnet.

Für das Fick'sche Gesetz in wird die Ableitung von nach wieder durch den Konzentrationsgradienten ersetzt.

Für den Massenfluss ergibt sich aus obiger Rechnung ebenfalls die Erhaltungsgleichung :

Im wird nun anstelle der Bildung des Differentialquotients der Satz von Stokes und die Lemma Integralmittelwert angewendet. So ergibt sich folgendes:


Durch einsetzen des ersten Fick'schen Gesetz bekommt man dann die stationäre (homogene) Diffusionsgleichung in . Diese lautet

 
Herleitung zeitabhängige Diffusion in räumlicher Dimension
[Bearbeiten]

Für die zeitabhängige Diffusion ist das System, welches betrachtet wird, in keinem Gleichgewichtszustand. Dementsprechend ist die gesuchte Dichtefunktion zeitabhängig. Es ergibt sich für die Dichtefunktion der Konzentration . Die Gesamtzahl der Teilchen im Stababschnitt mit der Länge wird nun als zeitabhängiges Integral angegeben Das Erhaltungsgesetz besagt auch in diesem Fall mit einer zeitlichen Veränderungen, dass die zeitliche Veränderung der Gesamtanzahl der Teilchen durch den Austausch bzw. Zufluss und Ausfluss ausbalanciert sein muss.


Nach dem Teilen durch und dem Grenzübergang erhält man mithilfe des Lemma Integralmittelwert die Erhaltungsgleichung


Durch erneute Anwendung des ersten Fick'schen Gesetz lässt sich die Teilchenstromdichte ersetzen und man erhält folgende zeitabhängige (homogene) Diffusionsgleichung für die räumliche Dimension:


Verallgemeinerung in
[Bearbeiten]

Wird für die Ableitung nach der Gradient gesetzt. Wendet man erneut den Satz von Stokes bzw. den Gaußschen Intergalsatz erneut auf den zeitabhängigen Massenfluss an ergibt sich insgesamt folgende (homogene) Diffusionsgleichung:

 bzw. 
Herleitung Diffusion mit Quellterm
[Bearbeiten]

Bei der Diffusion mit Quellterm wird dem System eine externe oder interne Teilchenquelle hinzugefügt. Somit entsteht im System neue Masse. Diese Massenquelle trägt ebenfalls zum Massenerhaltungsgesetz bei und soll mathematisch durch die Dichtefunktion der Materialflussrate beschrieben werden. Diese kennzeichnet die hinzugefügte oder entstandene Masse pro Volumen. Der Quellterm also trägt ebenfalls zur zeitlichen Veränderung der Gesamtzahl von Teilchen im Intervallabschnitt bei, ebenso wie es auch der Austausch an den Rändern tut. Es ergibt sich also folgende Gleichung:


Diese lässt sich nach bekanntem Schema der zeitabhängigen Diffusion über das Teilen durch , den Grenzübergang von in folgende (inhomogene) Diffusionsgleichung in der räumlichen Dimension umformen:


Verallgemeinerung in
[Bearbeiten]

Und durch das verallgemeinern in ergibt sich über das Ersetzen der Ableitung nach von und die Anwendung des Satz von Stokes folgende inhomogene Diffusionsgleichung:


Herleitung Diffusion mit Reaktionsterm
[Bearbeiten]

Die Diffusion mit Reaktionsterm oder auch die Reaktionsdiffusion wird durch die Reaktionsdiffusionsgleichung beschrieben. Diese ist eine inhomogene zeitabhängige Diffusionsgleichung mit einer Quelldichtefunktion auf der rechten Seite, welche von der Stoffkonzentration abhängig ist. Ähnlich wie bei der Diffusion mit Quellterm wird auch hier auf der rechten Seite der Gleichung eine Quelldichte hinzugefügt. Der Unterschied liegt jedoch darin, dass der Quellterm von der Dichtefunktion der Stoffkonzentration abhängig ist. Dementsprechend wird die Diffusionsgleichung nicht durch sondern durch oder auch ergänzt. Diese partiellen Differentialgleichungen werden zum Beispiel auch in der Populationsdynamik genutzt.


Der Reaktionsterm hat eine bzw. die logistische Form und ist dementsprechend beschränkt. In unserem Fall orientiert sich der Reaktionsterm an Fishers-Gleichung der Populationsdynamik. Diese ist eine Sonderform der Kolmogorov-Petrovsky-Piscounov-Gleichung (KPP-Gleichung) ähnlich der logistischen Funktion, welche den Zusammenhang zwischen vertreichender Zeit und Wachstum beschreibt und durch eine obere Schranke beschränkt wird. In unserem Fall wäre dies die Bevölkerungdichte bzw. die Gesamtanzahl von Personen an einem festen Ort . Der Reaktionsterm hat also folgende Form:


Woraus sich auch die folgende Reaktionsdiffusionsgleichung ergibt:


Analytische Lösung

[Bearbeiten]
Stationäre Diffusion: Laplace Gleichung
[Bearbeiten]

Die sogennanten Fundamentallösung der Laplace Gleichung auf (Cauchy-Problem) lässt sich anhand der Rotationsinvarianz des Laplace-Operators finden, da sich der selbst durch das Tauschen der Variablen x nicht verändert. Somit ergibt sich die rotationssymmetrische Lösung der Laplace-Gleichung. Formel der Fundamentallösung für

 

wobei den Volumen der Einheitskugel in beschreibt und die Vektornorm in ist, vergleiche [5].

Für n=3 ist .

Sowohl für aber auch gilt, dass die Fundamentallösung singulär ist.

 
Stationäre Diffusion: Poisson Gleichung
[Bearbeiten]

Ist die Fundamentallösung für einen Differentialoperator bereits gegeben, so erhält man die Lösung der Gleichung bzw. der der Poissongleichung auf durch Faltung der Fundamentallösung mit der Funktion der rechten Seite. (Poissonformel) [6]:

 

Für eine Funktion mit kompaktem Träger, siehe Definition Kompaktheit gilt,

 

(für Beweis siehe [6])

Zeitabhängige Diffusion
[Bearbeiten]

Für die homogene (instationäre) Diffusionsgeichung existieren spezielle Lösungsformel für konstanten Diffusionskoeffizient .

Die Fundamentallösung für , lautet


wobei das Quadrat der euklidischen Norm von ist, siehe [7].

Die Diffusiongleichung ergänzt durch eine Anfangsbedingung :

die im Anfangszeitpunkt die Konzentrationsdichte /Dichte der Infizierten beschreibt heißt Anfangswertproblem.

Die Lösung des (homogenen) Anfangswertproblem für ist durch die Faltung der Fundamentallösung mit der Anfangsfunktion gegeben :


siehe [7]. Siehe auch Lösungsformel für das inhomogene Cauchyproblem.


Tutoriumsaufgaben

[Bearbeiten]
Implementierung der Funktion Φ in Octave
[Bearbeiten]

Grafische Darstellung der Funktion Ψ für n=2
Grafische Darstellung der Funktion Ψ für n≥3
for n=2:3
    if n=2
      x=[-400:1:400];
      phi=(-1/(2*pi))*log(sqrt((x).^2))
      figure(1)
      plot(x, phi,'-')
      axis=('auto')
      grid on 
      xlabel('x-Achse')
      ylabel('y-Achse')
      title("Phi(x)für n=2")
      saveas( 1, "Phix.jpg")
    endif
    if n=3
     for x=-10:0.1:10;
       phi=(3/(4*pi))*(1/(sqrt((x)^2))^(n-2))
       figure (2)
       hold on 
       plot (x, phi,'*b')
       grid on 
       xlabel('x-Achse')
       ylabel('y-Achse')
       title("Phi(x) für n>=2")
       saveas(2, "Phi2x.jpg")
     endfor
    endif
 endfor
Implementierung der Funktion Ψ in Octave
[Bearbeiten]

Grafische Darstellung der Funktion Φ
 for t = 1:5;
   x=-10:10;
   psi=(1/(4*0.02*t))*exp(-sqrt((x).^2)/(4*0.02*t))
   hf= figure(t) 
   plot(x,psi)
   title('Grafische Darstellung Psi(x,t)')
   xlabel('x-Achse')
   ylabel('y-Achse')
   axis([-10 10 0 13])
   test=["Figure_", num2str(t),".jpg"]
   saveas(t, test);
 endfor
Zeitabhängige Diffusion als Anfangswertproblem
[Bearbeiten]

Bei der zeitabhängigen Diffusion als Anfangswertproblem wird die Diffusionsgleichung durch eine Anfangsbedingung ergänzt, die die Konzentrationsdichte/ Dichte der Infizierten zum Anfangszeitpunkt beschreibt.

Anfangswertfunktion
[Bearbeiten]
Anfangswertfunktion u0

Zum Beginn haben wir eine abwechslungsreiche Angfangswertfunktion implementiert

function wert=Anfangswertfunktion(x,y)
  if sqrt((x.-0.0).^2+(y.-2.5).^2)<=0.5 wert=0.5;
  elseif sqrt((x.-2).^2+(y.-0.0).^2)<=0.5 wert=1;
  %elseif sqrt((x.-0.8).^2+(y.-1).^2)<=0.15 wert=3;
  else wert=0;
  endif
endfunction


Implementierung der Formel Psi
[Bearbeiten]
Diffusion der Anfangswertfunktion zum Zeitpunkt t = 0.2
Animation der Diffusion über das Zeitintervall [0.2, 1] mit = 0.05
   for i=1:(length(X)) 
       for j=1:(length(Y))
       xstar=x(j,i)*ones(length(Y),length(X));
       ystar=y(j,i)*ones(length(Y),length(X));
       % Psi
       psi=(1/(4*pi*a*(t0+k*(1/Zeitschritte))))*(exp(-((xstar.-x).^2+(ystar.-y).^2))/(4*a*(t0+k*(1/Zeitschritte))));
       endfor
   endfor
Integration
[Bearbeiten]
       %numerische Integration, alles funktioniert
       I(j,i) = trapz(Y,trapz(X,psi.*u0),2);


Nach dem schon die Integration vonstatten ging, wird nun mit Hilfe der folgenden Schleife die Grafik ausgegeben

%Graphische Ausgaben  
Schritte = k*Zeitschritte+1;
figure (k+1)
meshc(x,y,I)
grid on
title (['Loesung von Poissongleichung zum Zeitpunkt t = ', num2str(k*(1/Zeitschritte))])
xlabel('x - Achse')
ylabel ('y - Achse')
zlabel('z - Achse')
zlim([0 9])


Zum Zeitpunkt t = 0 wird eine Singularität erreicht, wodurch das erste Bild in unserer Animation keine Bedeutung zuzuweisen ist, da die Werte viel zu groß werden.

Tutorium 3 - Modifiziertes SIR Modell

[Bearbeiten]

SIR Modell

[Bearbeiten]

Für die Bearbeitung der dritten Aufgabe im Rahmen der Tutorien rückten die Modelle Populationsdynamik, präziser gefasst das modifzierte SIR Modell in den Fokus der Vorlesungsinhalte. Ähnlich wie das logistische (SI) Modell gehört auch das SIR Modell zu den Kompartimentmodellen für die Infektionsverbreitung. Das Modell selbst teilt die Gesamtpopulation in drei Gruppen bzw. Kompartimente ein: Susceptibles (Gruppe der Empfänglichen), Infected (Gruppe der Infizierten) und Removed (Gruppe der Genesenen) so wird die Diffusion als Austausch zwischen den Kompartimenten betrachtet.

Die Änderungsraten der jeweiligen Kompartimente werden mittels eines Systems von drei gekoppelten Differentialgleichungen berechnet:


wobei die die Regenerationsrate bzw. Wechsel- oder Genesensrate und die Infektionsrate ist. Die Wechselrate selbst ergibt sich durch den Umkehrwert der Genesungszeit . Daraus folgt letztendlich: . Für COVID 19 ergibt sich somit eine Wechselrate von , da laut Studien die Inkubationszeit zwischen 2 und 14 Tagen beträgt und 95% aller Befragten auch in diesem Zeitraum Symptome der Viruserkrankung entwickelt haben. Beachtet man nun die Tatsache, dass die Anzahl der Personen in den jeweiligen Gruppen die Gesamtpopulation nicht übersteigen kann, ergibt sich folgende Erhaltungsgleichung:

die im grundlegenden nur besagt, dass die Gesamtpopulation konstant erhalten bleibt, dementsprechend findet kein räumlicher Austausch statt, weswegen das Modell auf eine feste Ortskoordinate angewendet wird und es sich somit um ein rein dynamisches, also zeitabhängiges Modell handelt.

Modifiziertes SIR Modell

[Bearbeiten]

Das modifizierte SIR Modell wird angewendet, wenn die Toten nicht im Kompartiment der Genesenen erfasst werden sollen. Hinzukommend geht man im modifizierten SIR Modell davon aus, dass nur ein gewisser Prozentsatz der Infizierten auch Symptome entwickelt und somit von den Gesundheitsämtern erfasst wird. Unter Betrachtung dieser Modifikationen muss das Modell angepasst werden. So wird das Modell zusätzlich um eine konstante Sterberate , ein konstanter Prozentsatz der durch Tests erfassten Infizierten und durch eine von und abhängige Wachstumsrate mit ergänzt. Somit ergibt sich folgendes System von ebenfalls drei gekoppelten Differentialgleichungen:

Hinzukommt die Anfangsbedingung der jeweiligen Differentialgleichung:


Durch die oben getroffene Anpassung des Modells verändert sich auch die Erhaltungsgleichung aus dem SIR Modell folgendermaßen:

Diese besagt letztendlich nur, dass die Gesamtpopulation um die verstorbenen Infizierten verringert.

Implementierung des modifizierten SIR-Modells in Octave

[Bearbeiten]
 B=55000; % Kapazitätsgrenze, 2/3 der deutschen Bevölkerung (In T) 
 c=0.3545; %Basisinfektionsrate- die Rate des exponentiellen Wachstums am Anfang der Pandemie
 w=1/14; % Wechselrate zu den Genesenen
 d=0.003; % Todesrate
 r=0.1;%Erfassungsfaktor, der besagt, dass 10 Prozent aller Infektionen entdeckt werden
 yo=[B-16/1000;16/1000;0]%Anfangsbedingungen

 %SIR-Modifiziert ohne Slowdown 
 f=@(y,x) [-c*y(1)*y(2)/(r*B);c*y(1)*y(2)/B-w*y(2);w*y(2)-d*y(2)];System von 3 gekoppelten Differentialgleichungen 
 y = lsode (f, yo, timesWHO) %y(1)=S(t) & y(2)=I(t)
 figure(13)%Grafische Darstellung des modifizierten SIR Modells 
 plot (timesWHO, y(:,1), timesWHO, y (:,2), '-.', timesWHO, y (:,3),'-.', timesWHO, y (:,3)+y(:,2))%Darstellung der Lösungen des DGL 
 hold on
 title("SIR modifiziert ohne SLOWDOWN")
 legend ("Susceptible", "Infected", "Removed", " Infected+Removed")%,"German data I+R" ,"German data I ","German data R" ,"location", "west")
 axis([0,n, 0 ,4000])

Aufgabe 1

[Bearbeiten]
Erweiterung der Funktion "coronaData"
[Bearbeiten]

Die erste Aufgabe war es nun die jeweiligen Zahlen des Infektionsgeschehens in die bereits von Frau Hundertmark vorgefertigte Funktion "coronaData" zu implementieren. Dazu sollten wir die jeweiligen Infektionszahlen in dieser Funktion ergänzen. Die jeweiligen Werte konnte man sehr gut im Internet wiederfinden und so werden bereits auf Wikipedia Tabellen und Datenbanken gepflegt, in welche die neuesten Zahlen direkt eingetragen und aktualisiert werden. Siehe [[1]]


 %Implementierung der gesammelten Corona-Daten 
 A=coronaData_Mai2021();
 inf_falleWHO=A(1,:);%Kumulierten Infektionen 
 inf_falleWHOrecovered=A(3,:);%Kumulierten Genesenen 
 inf_falleWHOtoten=A(2,:);%Kumulierte Gestorbene
 inf_falleWHOaktuell=inf_falleWHO-inf_falleWHOrecovered;%Tägliche Neuinfektionen 
 n=length(inf_falleWHO)
 timesWHO=[0:1:n-1];
 figure(1)
 plot(A(1,:),'-r',A(2,:),'-b', A(3,:),'-g' )
 axis([0 456 0 4000000])
 xlabel ('Tage')
 ylabel ('Zahlen')
 legend('Inizierte','Tote','Genesene')
 saveas(figure(1),"Corona_Daten.jpg")

Anpassung der Infektionsrate mittels einer Slowdown-Funktion
[Bearbeiten]
 function val=SIR_slowdown_verbessert(x)
 % Ab Tag t (Argument der Funktion) wird die Infektionsrate in mehrere Schritten sinken:
 if x < 20 
   val=1;
   else if x < 43
     val=0.6;
   else if x < 100%24.05.2020 Infektionsgeschehen hat sich wieder beruhigt
     val=0.095;
   else if x < 220%30.09.2020 die zweite Welle beginnt 
     val=0.0025*(x-100)+0.095;
   else if x < 276
     val=0.27;
   else if x < 310
     val=0.25;
   else if x < 355  
     val=0.15;
   else if x < 385
     val=0.23;
   else if x < 420
     val=0.26;
   else if x < 455 
     val=0.19;
 else  
   val=0.75;
   endif
   endif
   endif 
   endif 
   endif
   endif
   endif
   endif
   endif
 endif
 endfunction

Nachdem wir gemerkt haben, dass die Anpassung der Slowdown-Funktion an das damalige Infektionsgeschehen und nicht nur an die Infektionsrate erfolgen muss, haben wir uns anhand der gesammelten Daten eine neue Slowdown-Funktion gebastelt. Die Ergebnisse sehen sie auf der rechten Seite.

Implementierung der Slowdown-Funktion in Octave
[Bearbeiten]
 %Slowdown-Funktion
 for i=1:(length(timesWHO))
   c_funktion(i)=SIR_slowdown_verbessert (timesWHO (i), 0);
 endfor
 T=1;
 c_real(1)=c_funktion(1);
 for i=T+1:n
   c_real(i-T)=(inf_falleWHO(i)-inf_falleWHO(i-T))/(inf_falleWHO(i-T));
 endfor
 c_real_durchschnitt=c_real;
 for i=4:n-4
   c_real_durchschnitt(i)=(c_real(i-3)+ c_real(i-2)+c_real(i-1)+c_real(i)+ c_real(i+1) + c_real(i+2)+c_real(i+3) )/7;
 endfor 
 figure(111)
 plot (timesWHO(1: n-1),c_funktion(1: n-1), timesWHO(1:n-1),c_real_durchschnitt(1:n-1))%,timesWHO(1: n-1), c_real_durchschnitt),timesWHO(1: n-1),c_beschraenkt_durchschnitt)
 grid on
 title ('Tatsächtliche Infektionsrate als 7-Tage Duchschnitt  und slow-down-Funktion')
 legend ('slow-down Funktion',  '7-Tage Durchschnitt', '7-Tage Durchschnitt beschr. Modell')
Bestimmung des relativen Fehlers
[Bearbeiten]
 %Berechnung der relativen Fehler und absoluten Fehler 
 aF1=y(:,2)'-(inf_falleWHOaktuell/1000)%Absoluter Fehler der aktuell Infizierten
 aF2=y (:,3)'-(inf_falleWHOrecovered/1000)%Absoluter Fehler der Genesenen 
 aF3=(y (:,3)'+y(:,2)')-(inf_falleWHO./1000)%Absoluter Fehler der kumulierten Infizierten + Genesenen 
 rF1=aF1./(inf_falleWHOaktuell/1000)%Relativer Fehler der aktuell Infizierten
 rF2=aF2./(inf_falleWHOrecovered/1000)%Relativer Fehler der Genesenen 
 rF3=aF3./(inf_falleWHO/1000)%Relativer Fehler der kumulierten Infizierten + Genesenen 
 figure(16)
 plot(timesWHO, rF1*100,'.-.r',timesWHO, rF2*100,'.-.b',timesWHO,rF3*100,'.-.g')
 title('Relativer Fehler Modell und Daten')
 xlabel('Tage ab 27. januar')
 ylabel('Abweichung in Prozent')
 legend('Aktuelle Corona-Infektionen','Genesene','Kumulierte Infektionen und Genesene')
 figure(17) 
 plot(timesWHO, aF1,'.-.r',timesWHO,aF2,'.-.b',timesWHO,aF3,'.-.g')
 title('Absoluter Fehler Modell und Daten')
 xlabel('Tage ab 27. januar')
 ylabel('Abweichung in absoluten Zahlen')
 legend('Aktuelle Corona-Infektionen','Genesene','Kumulierte Infektionen und Genesene')
Anpassung des Erfassungsfaktors durch eine Erfassungsfunktion
[Bearbeiten]

Zur Anpassung Erfassungsfunktion haben wir uns zunächst die Zahl der jeweiligen Testungen zur Hand genommen. Dazu haben wir uns auf die Zahlen des RKIs berufen. Diese geben für jede Kalenderwoche die Zahl der jeweils durchgeführten Tests aus und bieten somit die Möglichkeit die Testungen und die Testverfahren für die Bevölkerung transparenter zu gestalten. Grundannahme unserer Anpassung war, dass mit steigenden Testzahlen auch mehr Corona-Infektionen erkannt werden. Dabei haben wir angenommen, dass der Anteil der Infektionen, die vom Gesundheitssystem registriert werden, linear zur Anzahl der Tests steigt. Die Daten des RKIs zeigen, dass die Zahlen bis in Kalenderwoche 17/2020 auf einen durchschnittlichen Wert von ungefähr 300.000 Tests pro Woche angestiegen sind. Wir haben angenommen, dass bei 300.000 Testungen pro Woche 10% der wirklichen Infektionen auch durch das Gesundheitssystem erfasst werden. Aufbauend auf dieser Zahl haben wir unsere Funktion in Orientierung an den RKI-Zahlen angepasst. Dazu haben wir die Tage zwischen den Kalenderwochen gezählt und über den Differenzenquotient , wobei also den Tagen ab dem 27. Januar jeweils genau ein (Erfasste Infektionen in Prozent) zugeordnet wird.

function val=SIR_erfassungsfunktion(x,t)

 % t gibt die Tage an, an denen die Erfassung der Infizierten besser wird.
 % Durch zum Beispiel Tests
 % Annahme bei 300.000 Tests Erfassung von 10% der Fälle 
   if x < t + 147%Signifikant steigende Zahlen der landesweiten Testungen in KW27/2020
     val=0.1 ;
     else if x < t + 196%Erstmalige Zahlen über 1 Mio. Testungen pro Woche 
       val=0.0014*(x-147)+0.1;
     else if x < t + 322%Maximale Testungen in KW 50/2020  
       val= 0.0018*(x-196)+0.3;
     else if x < t + 336%Testungen sinken über Weihnachten und Silvester
       val= -0.02*(x-322)+0.53;
     else if x < t + 455%Testungen steigen auf Mittel von 1.2 Mio pro Woche also ungefähr 40% 
       val= 0.0013*(x-336)+0.25;
   else 
     val= 0.4;
     endif 
     endif 
     endif 
     endif 
   endif 
 endfunction
Implementierung der Erfassungsfunktion
[Bearbeiten]
 %Erfassungs-Funktion
 for i=1:length(timesWHO)
   rr(i)=SIR_erfassungsfunktion (timesWHO (i),0);% r 
 endfor
 %Modell mit Erfassungsfunktion
 r=SIR_erfassungsfunktion(timesWHO,0);
 g=@(y,x) [-c*SIR_slowdown_verbessert(x)*y(1)*y(2)/(r*B);c*SIR_slowdown_verbessert(x)*y(1)*y(2)/B-w*y(2);w*y(2)-d*y(2)];
 y = lsode (g, yo, timesWHO);%y(1)= S(t) y(2) = I(t)
 figure(18)
 plot (timesWHO, y (:,2), '-.r', timesWHO, y (:,3),'-.b', timesWHO, y (:,3)+y(:,2),'-.g')
 hold on
 plot (timesWHO, inf_falleWHO./1000, 'sg', "linewidth",4,timesWHO,inf_falleWHOaktuell/1000, '*r' , timesWHO,inf_falleWHOrecovered/1000, '*b' )
 legend ( "Infected", "Removed", " Infected+Removed","German data I+R" ,"German data I ","German data R" ,"location", "west")
 axis([0,n, 0 ,3600])
 title('Vergleich Modell mit Erfassungsfunktion und CoronaDaten ')
 hold off
Bestimmung des relativen Fehlers
[Bearbeiten]
 %Berechnung relativer Fehler und absoluter Fehler 
 AF1=y(:,2)'-(inf_falleWHOaktuell/1000)
 AF2=y (:,3)'-(inf_falleWHOrecovered/1000)
 AF3=(y (:,3)'+y(:,2)')-(inf_falleWHO/1000)
 RF1=AF1./(inf_falleWHOaktuell/1000)
 RF2=AF2./(inf_falleWHOrecovered/1000)
 RF3=AF3./(inf_falleWHO/1000)
 
 %Grafische Darstellung 
 figure(19)
 plot(timesWHO, RF1*100,'.-.r',timesWHO, RF2*100,'.-.b',timesWHO,RF3*100,'.-.g')
 title('Relativer Fehler Modell mit Erfassungsfunktion und Daten')
 xlabel('Tage ab 27. januar')
 ylabel('Abweichung in Prozent')
 legend('Aktuelle Corona-Infektionen','Genesene','Kumulierte Infektionen und Genesene')
 figure(20) 
 plot(timesWHO, AF1,'.-.r',timesWHO,AF2,'.-.b',timesWHO,AF3,'.-.g')
 title('Absoluter Fehler Modell mit Erfassungsfunktion und Daten')
 xlabel('Tage ab 27. januar')
 ylabel('Abweichung in absoluten Zahlen')
 legend('Aktuelle Corona-Infektionen','Genesene','Kumulierte Infektionen und Genesene')

Nach der Anpassung der Erfassungsfunktion folgte natürlich auch das Implementieren dieser in unser Modell des modifizierten SIR Modells. Dazu wurden erstmal die Werte der Funktion implementiert und das System der Differentialgleichungen dementsprechend verändert.

Tutorium 4: Finite-Differenzen-Methode (Dirichlet- und Neumann-Randbedingung)

[Bearbeiten]
Randwertprobleme
[Bearbeiten]

Die genutzten elliptischen Differentialoperatoren wie der Laplace-Operator führen immer auf Randwertprobleme. Dementsprechend werden diese im weiteren Verfahren gelöst. Das Randwertproblem für Diffusionsgleichungen beschreibt ein Diffusionsproblem auf einem beschränkten Gebiet D. Über eine Randwertbedingung wird das Verhalten der approximierten Funktion am Rand des Gebietes festgelegt. Nun gibt es verschiedene Typen von Randwertproblemen für partielle Differentialgleichungen. Für unsere Programmierung in Octave werden das Dirichlet- und das Neumann-Problem betrachtet.

Dirichlet-Problem
[Bearbeiten]

Beim Dirichlet-Problem werden die Randwertbedingungen als Funktionswerte vorgegeben.



Neumann-Problem
[Bearbeiten]

Beim Neumann-Problem werden anstatt Funktionswerten Ableitungswerte vorgeschrieben. Präziser gefasst, erfüllt die Funktion die Neumann-Randbedingungen wenn die Richtungsableitungen von in der Richtung des äußeren Normalenvektors gegeben sind.



Finite Differenzen: Grundidee
[Bearbeiten]

Aufgabe im vierten Tutorium der Veranstaltung war die Implementierung der Finiten-Differenzen-Methode. Einer der wohl bekanntesten numerischen Diskretisierungsverfahren für partielle Differentialgleichungen. Dabei handelt es sich um ein gitter-basiertes Verfahren, das eine unbekannte Funktion auf endlich vielen Gitterpunkten approximiert. Dazu werden die Differentialoperatoren der Differentialgleichung durch Punktauswertung des Differenzenquotienten approximiert, wodurch aus (nicht-)linearen Differentialgleichungen Systeme (nicht-) linearer Gleichungen werden. Die Differenzenquotienten ergeben sich als Approximation der Ableitungen von nach dem Abbruch der Taylorreihe bzw. aus der Taylorformel mit Lagrangeschem Restglied

Taylorreihe
[Bearbeiten]
.
Taylorformel mit lagrangeschem Restglied
[Bearbeiten]

Sei Funktion hinreichend oft differenzierbar.


Erste Differenzenquotienten
[Bearbeiten]

Damit ergibt sich

  • für den ersten (vorwärts-) Differenzenquotient
,
  • für den ersten (rückwärts-) Differenzenquotient mit Anwendung von anstatt von in der obigen Taylorformel
,
  • für den ersten zentralen Differenzenquotient durch aus der Summe ,

Alle drei, also der vorwärts, rückwärts und zentrale Differenzenquotient approximieren die erste Ableitung für falls hinreichend oft differenzierbar auf einem Intervall ist mit .

Zweite Differenzenquotienten
[Bearbeiten]

Der zweite Differenzenquotient approximiert die zweite Ableitung an der Stelle , falls hinreichend oft differenzierbar ist.

Die Formel für ergibt sich aus der Differenz der ersten Differenzenquotienten mithilfe der Taylorentwicklung bis zur vierten Ableitung:


Beispiel eines Dirichlet-Problems in einer Raumdimension
[Bearbeiten]

Grundidee ist also die Differentialoperatoren durch finite Differenzen zu approximieren. Dazu suchen wir eine Funktion , die für einen Quellterm sowohl die Differentialgleichung (auf dem gesamten Rechengebiet), als auch die Randwertbedingungen erfüllt. Gegeben ist also folgendes Randwertproblem:

 für 

Zur Lösung mit der Finiten Differenzen Methode wird das Intervall durch die Gitterpunkte mit der Gitterweite diskretisiert. Die zweite Ableitung wird nun durch den oben gezeigten zentralen Differenzenquotient der zweiten Ableitung diskretisiert für jedes .Hier bezeichnet .

Dies ergibt an den inneren Gitterpunkten die Differenzengleichungen

 für 

für die numerischen Näherungswerte der Lösungswerte . Unter Verwendung der gegebenen Randwerte entsteht ein lineares Gleichungssystem mit Gleichungen für die Unbekannten .

 mit der tridiagonalen Systemmatrix 

In Matrixform ergibt sich also folgendes zu lösendes System:

Beispiel eines Neumann-Randwertproblem in einer Raumdimension
[Bearbeiten]

Wie oben bereits beschrieben, werden beim Neumann-Randwertproblem die Richtungsableitungen der Funktion in Richtung der äußeren Normalenvektoren gegeben. Seien die Randbedingungen in den Normalrichtungen gegeben:


Um die Ableitungen in den Randpunkten zu approximieren führen wir neue Unbekannte Funktionswerte in den Randpunkten und mit ein. Das Gitter geht ebenfalls wie bereits im LGS beim Dirichlet-Randwertproblem von . Nun bieten sich zwei Approximationsmöglichkeiten. Die Approximation erster Ordnung über die einseitigen Differenzenquotienten, also den Vorwärts- und Rückwärtsdifferenzenquotient oder die Approximation zweiter Ordnung über den ersten zentralen Differenzenquotient. Gerade die zweite Möglichkeit bietet wohl genauere Lösungen.

Approximation erster Ordnung
[Bearbeiten]

Ersetzt man die Ableitung der Funktion am Punkt durch den Vorwärtsdifferenzenquotient, erlauben wir uns einen Fehler , der sich durch eine Konstante mal den Wert h nach oben abschätzen lässt.

* den vorwärts -Differenzenquotient 

Ersetzt man die Ableitung der Funktion am Punkt durch den Rückwärtsdifferenzenquotient, erlauben wir uns einen Fehler , der sich durch eine Konstante mal den Wert h nach oben abschätzen lässt.

* den rückwärts -Differenzenquotient 

So erhalten wir letztendlich zwei neue Gleichungen. Die Gleichung für und , also die 0-te und -te Gleichung.

,

Systemmatrix
[Bearbeiten]

So ergibt sich in Matrixform folgende Systemmatrix mit und Vektor u .

Lineares Gleichungssystem für Neumann-Problem mit Approximation erster Ordnung
[Bearbeiten]

Approximation zweiter Ordnung
[Bearbeiten]

Ersetzt man die Ableitung in den Randpunkten durch den ersten zentralen Differenzenquotienten, approximiert man die Ableitung in bzw. und in bzw. durch:

 mit   

 mit . 

Dazu werden erneute neue unbekannte Funktionswerte und festgelegt. Dabei liegt links vom Randpunkt und rechts vom Randpunkt . Durch Umformen erhalten wir nun erneut zwei neue Gleichungen des LGS. DIe -te Gleichung und die -te Gleichung mit

,
.

Nun möchten wir aber unser System nicht wieder um zwei weitere neue unbekannte ergänzen, weswegen wir auf einen anderen Ansatz zurückgreifen. Dementsprechend ersetzen wir die neuen Unbekannten in den ersten zentralen Differenzenquotienten durch die Approximation der zweiten Ableitung in den Randpunkten, also durch den zweiten Differenzenquotienten an den Randpunkten :

 und  
 und  

Nun setzen wir in die Approximation der zweiten Ableitung ein:

 und 

Durch Umformen gelangt man letztendlich zu bzw. und bzw.

Systemmatrix
[Bearbeiten]

So ergibt sich in Matrixform folgende Systemmatrix mit und Vektor u

Lineares Gleichungssystem für Neumann-Problem für Approximation zweiter Ordnung
[Bearbeiten]

Regularität der Systemmatrizen
[Bearbeiten]

Das somit entstehende LGS wäre nun nur eindeutig lösbar, wenn die Systemmatrizen regulär wären. Das heißt:

Eine -Matrix mit Einträgen aus einem Körper , zum Beispiel die reellen oder komplexen Zahlen, ist genau dann invertierbar, wenn eine der folgenden äquivalenten Bedingungen erfüllt ist:

  • Es gibt eine Matrix mit .
  • Die Determinante von ist ungleich null.
  • Die Eigenwerte von sind alle ungleich null.
  • Für alle existiert mindestens eine Lösung des linearen Gleichungssystems .
  • Für alle existiert höchstens eine Lösung des linearen Gleichungssystems .
  • Das lineare Gleichungssystem besitzt nur die triviale Lösung .
  • Die Zeilenvektoren sind linear unabhängig.
  • Die Zeilenvektoren erzeugen .
  • Die Spaltenvektoren sind linear unabhängig.
  • Die Spaltenvektoren erzeugen .
  • Der Rang der Matrix ist gleich .

Berechnet man nun die Determinante der Matrizen und so ist diese sowohl für die Systemmatrix der Approximation erster Ordnung, als auch für die Approximation zweiter Ordnung . Ebenso gut könnte man allerdings auch zum Beispiel den Rang der Matrix über das Gauß Verfahren bestimmen. Siehe Beispiel für . Des Weiteren sind die Vektoren linear abhängig. Multipliziert man die Systemmatrizen von rechts mit dem Einsvektor erhält man den Nullvektor und somit lässt sich der Nullvektor nicht nur durch die triviale Lösung erzeugen. Daraus folgt aus oben gegebenen äquivalenten Bedingungen, dass die Matrix nicht regulär ist und somit existiert keine eindeutige Lösung für das LGS.

Dirichlet-Randwertproblem in zwei Raumdimensionen
[Bearbeiten]
Homogene Randbedingungen
[Bearbeiten]

Gegeben ist nun folgendes Dirichlet-Randwertproblem mit homogenen Randbedingungen auf dem rechteckigen Gebiet mit :

 in 
       auf 
 %----------------------------------
 %Implementierung der Quellfunktion 
 %----------------------------------
 function wert=Quellfunktion_FDM(x,y)
   if sqrt((x.-3.25).^2+(y.-3).^2)<=0.35 wert=1;
     elseif
       sqrt((x.-6).^2+(y.-1).^2)<=0.45 wert=1.5;
  else wert=0;
  endif
 endfunction
%------------------------------------------------
 %Eingabe der homogenen Dirichlet-Randbedingungen
 %------------------------------------------------
 funktion_unten  = @(x) [0];
 funktion_oben   = @(x) [0];
 funktion_links  = @(x) [0];
 funktion_rechts = @(x) [0];

Gesucht wird nun die Funktion mit

Nun überziehen wir unser rechteckiges Gebiet mit einem äquidistanten Netz aus Gitterpunkten. Da wir uns im zweidimensionalen Bereich befinden benötigen wir Gitterpunkte in und Richtung mit konstanter Gittergröße .



 %--------------------------------------
 %Aufspannen des rechteckigen Gebiets D
 %--------------------------------------
 %definiere Gebiet D
 xend=8;
 yend=5.0; 
 %--------------------------------------
 %Implementierung des Gitters in Octave
 %--------------------------------------
 %Anzahl von X-Punkten, verkleinern Sie diese um die Struktur der Matrix in weiteren Zellen besser zu erkennen.
 N=60
 %Berechnung der konstanten Gittergröße
 hx=xend/(N+1)
 hy=hx;
 M=floor((yend/hy))-1;
 %Koordinatenmatrix der Gitterpunkte
 [x,y]=meshgrid(hx:hx:xend-hx,hy:hy:yend-hy);

Man bezeichne nun die Approximation der Lösung in den jeweiligen Gitterpunkten :


Die Differenzenquotienten mit welchen die Funktionswerte in den Gitterpunkten approximiert werden, müssen nun ebenfalls wie unsere Gitterpunkte an die zweite Raumdimension angepasst werden. Dabei werden die zweiten Differenzenquotienten genutzt, um die partiellen Ableitungen von der gesuchten Funktion nach x und y zu approximieren:



Ersetzt man nun die zweite Ableitung durch dieses Schema in jedem Gitterpunkt ersetzen, bekommen wir unser Approximationsschema. So erhalten wir als Approximation des Laplace-Operators, die Summe dieser zwei Differenzenquotienten:


Diese Approximation führen wir für jeden Gitterpunkt durch, wodurch wir - Gleichungen, die durch die Nachbarpunkte des Punktes verbunden sind. Dieses Schema nennt man auch das 5-Punkt-Sternschema. Dieses ergibt sich nach dem Approximationsschema, indem man 4-mal den zentralen Punkt nimmt und jeweils einmal den oberen, unteren, rechten und linken Nachbar hinzu addiert. Die Randwerte werden nun approximiert, indem man die Nachbarpunkte im Rand durch die gegebenen Randwertbedingungen ersetzt. In den Randgitterpunkten werden die Werte von nach der Dirichlet-Randbedingung folgend ersetzt:

, 
.

Nun werden die unbekannten Approximationen der Lösung in der Gitterpunkten in einem langen Vektor eingeordnet. Dabei werden diese Werte in einer bestimmten Reihenfolge in den Vektor eingeordnet. Siehe [8]. Diese Assemblierung findet ebenfalls für den Vektor der rechten Seite statt. Nach der oben beschriebenen numerischen Diskretisierung und Assemblierung des unbekannten Vektors ergibt sich nun ein LGS der Form mit der Blocktridiagonalmatrix

size (f);
 %reshape funktioniert Spaltenmässig: es wird Spalte1, dann Spalte2, usw eingeordnet, wobei wir die Matrix f nach Reihen/Zeilen einordnen.
 %Daher soll die Matrix f' mit N(Zeilen)x M(Spalten) in ein langern Vektor eingeordnet.
 b=-1*reshape(f',(N*M),1);
 %----------------------------------------------------------------------------
 %Aufstellen der Systemmatrix durch Zusammensetzen aus verschiedenen Blöcken
 %----------------------------------------------------------------------------
 %Funktion zur Anpassung des Zwischenblocks der Matrix 
 %-----------------------------------------------------
 function wert = Zwischenblock(N,B1,B,C1,zeilennummer)
   wert = [repmat(C1,[1,zeilennummer-2]),B1,B,B1,repmat(C1,[1,N-(zeilennummer+1)])];
 endfunction
 %-----------------------------
 %Erstellen der Blockmatrix
 %-----------------------------
 function wert = Blockmatrix(N,M,h)
   %---------------------------------
   %Erstellen der einzelnen Matrizen
   %---------------------------------
   B = diag(-4*ones(N,1),0)+diag(ones(N-1,1),-1)+diag(ones(N-1,1),1);%Matrix B
   I=diag(ones(N,1),0);%Einheitsmatrix
   C1=diag(zeros(N,1),0);%Nullmatrix
   %---------------------------------
   %Anfang der Blockmatrix 
   %--------------------------------- 
   Ah=[B,I,repmat(C1,[1,M-2]); %1.Zeile
       I,B,I,repmat(C1,[1,M-3])]; %2.Zeile 
   %----------------------------------------------------------
   %Zwischenzeilen der Blockmatrix aus oben genannter Funktion
   %----------------------------------------------------------  
   for i = 1:M-4
     Ah=[Ah;Zwischenblock(M,I,B,C1,i+2)];
   endfor
   %----------------------------------
   %Abschließende Zeilen 
   Ah= [Ah;repmat(C1,[1,M-3]),I,B,I;
        repmat(C1,[1,M-2]),I,B]; 
   %-------------------------------------------------  
   %Definition der oben eingeführten Variable 'Wert'
   %--------------------------------------------------
   wert = Ah;
 endfunction
 
 B=Blockmatrix(N,M,hx);
 B=B*a/hx^2;

mit Diagonalblock
und der Einheitsmatrix auf der Nebendiagonale.

 %------------------------------------------------------------------
 %Anpassung der rechten Seite auf dem Rand durch die Randbedingungen 
 %------------------------------------------------------------------
 for i=1+1:N  
 for j=1+1:M
 f(j,i)=1*Quellfunktion_FDM(x(j,i),y(j,i));
 %Dirichlet Randbedingung oben und unten: 
   if j==1 
     f(j,i)=1*Quellfunktion_FDM(x(j,i),y(j,i))+ funktion_unten(i*hx)*a/hx^2;  %(eine Konstante oder eine Funktion von x-also Vektor1(i)); 
   endif
   if j==M 
     f(j,i)=1*Quellfunktion_FDM(x(j,i),y(j,i))+ funktion_oben(i*hx)*a/hx^2;  %(eine Konstanteoder eine Funktion von x -also Vektor2(i)); 
   endif
 %Dirichlet Randbedingung links und rechts:
   if (i==1)
     f(j,i)=1*Quellfunktion_FDM(x(j,i),y(j,i))+ funktion_links(j*hx)*a/hx^2;    %(eine Konstante oder eine Funktion von y); endif
   endif
   if (i==N )
     f(j,i)=1*Quellfunktion_FDM(x(j,i),y(j,i))+ funktion_rechts(j*hx)*a/hx^2;    %(eine Konstante oder eine Funktion von y); endif
   endif
 endfor
 endfor
 % Erneute Definition der unteren Reihe, weil es  irgendwie mit der funktion_unten, funktion_links nicht funktioniert...
 f(1,:)= 0*a/hx^2;
 f(:,1)= 0*a/hx^2;
 
 %Eckbeiträge
 f(1,1)=0;
 f(1,N)=0;
 f(M,1)=0;
 f(M,N)=0;
 % Wichtig!: Ecken-Beiträge: da in den Ecken jeweils der Differenzenquotioent in x (Wert Links oder rechts) in der Matrix schon festgelegt ist, muss Null entsprechend auf der rechten Sete stehen.
 %-------------------------------------------------
 % LOESUNGSSCHRITT
 %-------------------------------------------------
 sol=B\b;
 sol_matrix=reshape(sol,N,M);% Matrix mit N(Zeilen)x M(Spalten)
 sol_matrix=sol_matrix'; % Transponiert, wegen reshape

Inhomogene Randbedingungen
[Bearbeiten]

Sind die Randwertbedingungen nicht homogen, also unterschiedlich von Null, dann tragen die bekannten Randwerte der gesuchten Funktion zum Vektor der rechten Seite .

 %Eingabe der inhomogenen Dirichlet-Ranbedingungen
 funktion_oben   = @(x) [0.01*x];
 funktion_unten  = @(x) [-0.25];
 funktion_rechts = @(x) [0.25];
 funktion_links  = @(x) [-0.2];

 %------------------------------------------------------------------
 %Anpassung der rechten Seite auf dem Rand durch die Randbedingungen 
 %------------------------------------------------------------------
 for i=1+1:N  
 for j=1+1:M
 f(j,i)=1*Quellfunktion_FDM(x(j,i),y(j,i));
 %Dirichlet Randbedingung oben und unten: 
   if j==1 
     f(j,i)=1*Quellfunktion_FDM(x(j,i),y(j,i))+ funktion_unten(i*hx)*a/hx^2;  
   endif
   if j==M 
     f(j,i)=1*Quellfunktion_FDM(x(j,i),y(j,i))+ funktion_oben(i*hx)*a/hx^2;  
   endif
 %Dirichlet Randbedingung links und rechts:
   if (i==1)
     f(j,i)=1*Quellfunktion_FDM(x(j,i),y(j,i))+ funktion_links(j*hx)*a/hx^2;    
   endif
   if (i==N )
     f(j,i)=1*Quellfunktion_FDM(x(j,i),y(j,i))+ funktion_rechts(j*hx)*a/hx^2;    
   endif
 endfor
 endfor


 %Eckbeitraege!
 f(1,1)=1*Quellfunktion_FDM(x(1,1),y(1,1))+ (funktion_links(1*hx) + funktion_unten(1*hx))*a/hx^2;
 f(1,N)=1*Quellfunktion_FDM(x(1,N),y(1,N))+ (funktion_rechts(1*hx)+ funktion_unten(N*hx))*a/hx^2; %f(1,1);
 f(M,1)=1*Quellfunktion_FDM(x(M,1),y(M,1))+ (funktion_links(M*hx)+ funktion_oben(1*hx))*a/hx^2;
 f(M,N)=1*Quellfunktion_FDM(x(M,N),y(M,N))+ (funktion_rechts(M*hx)+ funktion_oben(N*hx))*a/hx^2; %f(M,1);

Neumann-Problem in zwei Raumdimensionen
[Bearbeiten]

Ähnlich wie beim Dirichlet-Problem wird die Anwendung der zweidimensionalen Differenzenquotienten in ein 5Punkt-Stern-Approximationsschema resultieren, bei dem ebenfalls in jedem Gitterpunkt der zentrale Punkte viermal genommen wird und man jeweils den oberen, unteren, rechten und linken Nachbar hinzu addiert. Durch Behandlung der Randbedingungen werden zur Änderung einiger Blöcke der tridiagonalen Blockmatrix führen. Analog zum Neumann-Problem in einer Raumdimension wird die Matrix lediglich um die die Unbekannten erweitert. Diese werden letztlich wieder zur Bildung der Differenzenquotienten verwendet.

Zunächst werden wieder die Randbedingungen gegeben. Das heißt, die Richtungsableitungen in die Normalenrichtung der unbekannten Funktion in den Randpunkten des Rechtecks werden gegeben:

* linker Rand: 
* rechter Rand: 
* unterer Rand: 
* oberer Rand: 
wobei 
Speziell  oder  am Rand eines  Rechtecks

Bei der Anwendung der einseitigen Differenzenquotienten, analog wie 1-dimensionalem Fall muss der Vektor der Unbekannten um die Randwerte erweitert werden, diese werden zur Bildung der Differenzenquotienten verwendet:

  • linker Rand: den vorwärts -Differenzenquotient
  • rechter Rand: den rückwärts -Differenzenquotient
  • unterer Rand: den vorwärts -Differenzenquotient
  • oberer Rand: den rückwärts -Differenzenquotient

(Hier wurde direkt die obige Neumann-Randbedingung für ein Rechteckgebiet eingesetzt.)

Nach der Einordnung der unbekannter Werte in den Lösungsvektor wie obenbeschrieben (siehe Assemblierung ) ergibt sich wie zuvor eine erweiterte Blocktridiagonale Systemmatrix :

  • erweitert um die 0-te und m+1-te Blockzeile für die Approximation der Ableitung nach y in den Gitterpunkten am oberem und unterem Rand,
  • die Blöcke der Matrix: sind um die 0-te und n+1-te Zeile für die Approximation der Ableitung nach x in den Gitterpunkten am linkem und rechtem Rand erweitert


So ergibt sich in Matrixform folgender Block B mit und Vektor u .

Gemischte Randbedingungen
[Bearbeiten]

Aufgabe war es nun ein Programm zu schreiben, dass die Unbekannte Funktion in den Gitterpunkten mit gemischten Randbedingungen approximiert. Linkes und rechts sollten homogene Neumann-Randbedingungen behandelten und oben und unten sollten inhomogene Dirichlet-Randbedingungen behandelt werden. Zunächst haben wir dazu unser rechteckiges Gebiet aufgespannt. Und danach das Gebiet mit dem erweiterten Gitter des Neumann-Problems überzogen. Dementsprechend mussten wir auch unsere Dimensionen der Matrizen N und M jeweils um eine Zeile oben und unten und eine Spalte rechts und links erweitern, da sonst das LGS zum Ende des Programms nicht aufgegangen wäre.

 %definiere Gebiet D
 xend=8;
 yend=5.0;
 %Anzahl von X-Punkten, verkleinern Sie diese um die Struktur der Matrix in weiteren Zellen besser zu erkennen.
 N=60
 %--------------------
 hx=xend/(N+1)
 hy=hx;
 M=floor((yend/hy))-1 
 %Koordinatenmatrix der Gitterpunkte
 [x,y]=meshgrid(0:hx:xend,0:hy:yend); 
 %wegen Erweiterung des Gitters bei Neumann-Problem
 N=N+2;
 M=M+2;
 %konstanter Diffusionskoeffizient
 a=0.1;
 %Dirichlet RB:
 funktion_unten  = @(x) [1];% [0.15*x];
 funktion_oben   = @(x) [-1];%[0.1*x];

Ebenfalls wie beim Dirichlet Problem haben wir dann unsere Funktion der rechten Seite implementiert.

 %------------------------------
 %Erstellen der Quellfunktion
 %------------------------------ 
 function wert=Quellfunktion_FDM(x,y)
   if sqrt((x.-3.25).^2+(y.-3).^2)<=0.35 wert=1;
     elseif
     sqrt((x.-6).^2+(y.-1).^2)<=0.45 wert=1.5;
   else wert=0;
   endif
 endfunction

Danach folgte der wohl wichtigste Schritt, nämlich die Anpassung der Blockmatrix, da sich die Blöcke durch die Erweiterung nach Neumann verändern. So haben wir Matrix um die Unbekannten, siehe Neumann Problem in einer Raumdimension erweitert. Auch die Einheitsmatrix wurde um die 0-te und -Zeile erweitert, die jedoch mit Nullen gefüllt sind.

 %-------------------------------
 %Erstellen der Blockmatrix 
 %-------------------------------
 function wert = Blockmatrix(N,M,h)
   B = diag(-4*ones(N,1),0)+diag(ones(N-1,1),-1)+diag(ones(N-1,1),1);
     %----------------------------------------------
     %Erweiterung des B-Blocks durch die Unbekannten 
     %----------------------------------------------
     B(1,1)=-h;
     B(1,2)=+h;
     B(N,(N-1))=h;
     B(N,N)=-h;
   %---------------------------------
   %Erstellen der einzelnen Matrizen
   %---------------------------------
   I=diag(ones(N,1),0);
     %---------------------------------
     %Anpassen von 0-ter und n+1-Zeile 
     %---------------------------------
     I(1,1)=0;
     I(N,N)=0;
   C1=diag(zeros(N,1),0);
   %--------------------------
   %Anfang der Blockmatrix  
   %--------------------------
   Ah=[B,I,repmat(C1,[1,M-2]); 
       I,B,I,repmat(C1,[1,M-3])]; 
   %-------------------------------   
   %Zwischenzeilen der Blockmatrix  
   %-------------------------------
   for i = 1:M-4
     Ah=[Ah;Zwischenblock(M,I,B,C1,i+2)];
   endfor
    %-----------------------------------
    %Letzen zwei Zeilen der Blockmatrix
    %-----------------------------------
    Ah=[Ah;repmat(C1,[1,M-3]),I,B,I;
        repmat(C1,[1,M-2]),I,B]; 
   
   wert = Ah;
 endfunction

Aufgrund der inhomogenen Dirichlet-Randbedingungen muss der Vektor der rechten Seite angepasst werden. Dazu werden an den oberen und unteren Ränder die Bedingungen behandelt. Da jedoch Neumann für links und rechts gilt und diese homogen sind, verändern diese nichts am Vektor der rechten Seite. %rechte Seite des Systems

 for i=1+1:N  
 for j=1+1:M
 f(j,i)=1*Quellfunktion_FDM(x(j,i),y(j,i));
   if j==1 
     f(j,i)=1*Quellfunktion_FDM(x(j,i),y(j,i))+ funktion_unten(i*hx)*a/hx^2;  %(eine Konstante oder eine Funktion von x-also Vektor1(i)); 
   endif
   if j==M 
     f(j,i)=1*Quellfunktion_FDM(x(j,i),y(j,i))+ funktion_oben(i*hx)*a/hx^2;  %(eine Konstanteoder eine Funktion von x -also Vektor2(i)); 
   endif
 endfor
 endfor

Da an den Ecken jeweils die homogenen Randbedingungen gelten, müssen die Eckbeiträge nicht angepasst werden, wie es im reinen Dirichlet-Problem mit inhomogenen Randbedingungen ist. Aufgrund der

 %Eckbeiräge
 f(1,1)=0;
 f(1,N)=0;
 f(M,1)=0;
 f(M,N)=0;
 % Wichtig!: Ecken-Beiträge: da in den Ecken jeweils der Differenzenquotion in x (Wert Links oder rechts) in der Matrix schon festgelegt ist, muss Null entsprechend auf der rechten Sete stehen

Nun werden die unbekannten Approximationen der Lösung in der Gitterpunkten in einem langen Vektor eingeordnet. Dabei werden diese Werte in einer bestimmten Reihenfolge in den Vektor eingeordnet. Siehe [5]. Diese Assemblierung findet ebenfalls für den Vektor der rechten Seite statt. Nach der oben beschriebenen numerischen Diskretisierung und Assemblierung des unbekannten Vektors ergibt sich nun ein LGS der Form

 size (f);
 %reshape funktioniert Spaltenmässig: es wird Spalte1, dann Spalte2, usw eingeordnet, wobei wir die Matrix f nach Reihen/Zeilen einordnen.
 %Daher soll die Matrix f' mit N(Zeilen)x M(Spalten) in ein langern Vektor eingeordnet.
 b=-1*reshape(f',(N*M),1);
 
 %-------------------------------------------------
 % LOESUNGSSCHRITT
 %-------------------------------------------------
 sol=B\b;
 sol_matrix=reshape(sol,N,M);% Matrix mit N(Zeilen)x M(Spalten)
 sol_matrix=sol_matrix'; % Transponiert, wegen reshape

Tutorium 5: Abschlussprojekt

[Bearbeiten]

Theoretischer Input

[Bearbeiten]

Für den Abschluss der letzten Tutoriumsaufgaben wird letztendlich sämtliche Theorie in einer letzten Modellierung zusammengebracht. Beginnend mit der Reaktionsdiffusionsgleichung, fortlaufend mit den Kompartimentmodellen und abschließend mit dem FDM-Verfahren sowie den Randwertproblemen.

Numerische Diskretisierung der Reaktionsdiffusionsgleichung
[Bearbeiten]

Die instationäre, inhomogene partielle Differentialgleichung der Reaktionsdiffusionsgleichung ist bereits aus Tutorium 2 und 3 bekannt, bietet sie uns die Möglichkeit über den Reaktionsterm der rechten Seite, die in Tutorium 3 behandelten Modelle, mit der Diffusion zu verbinden. Somit stellt der Reaktionsterm den Zusammenhang zwischen der räumlichen Infektionsverbreitung und den dynamischen Kompartimentmodellen her.

 

Die Funktion u sei dabei die Populationsdichte der (aktuell oder kummulierten) Infizierten Individuen, wobei der Reaktionsterm die zeitliche Dynamik der aktuell oder der kummulierten Infizierten steuert.

Räumliche Semidiskretisierung für die Diffusiongleichung [9]

[Bearbeiten]

(Genommen aus Skript Frau Prof. Dr. Hundertmark)

Zuerst wird Neumann Randwertproblem für die zeitabhängige homogene Diffusionsgleichung auf einem Rechteckgebiet D betrachtet.

Im folgenden nehmen wir an, dass der Diffusionskoeffizient ist konstant, . Somit erhalten wir die homogene Diffusionsgleichung in der Form .

System von gewöhnlichen Differentialgleichungen

[Bearbeiten]

Mithilfe der räumlichen Semidiskretisierung des Laplace Operators mit Finite-Differenzenverfahren unter Beachtung der homogenen Neumann Randbedingungen und Approximation der Richtungsableitungen erster Ordnung erhält man für ein festes nach dem Stern-Approximationsschema

,

hierbei ist der Vektor der Restriktionen der exakten Lösung an die Gitterpunkte in Zeitpunkt und der Vektor der numerischen Lösung in den Gitterpunkten in Zeitpunkt .

Die Matrix des Approximationsschema für Neumann Randbedingungen hat die Form:




wobei
und der Einheitsmatrix .


Schließlich ergibt sich nach der räumlichen Semidiskretisierung folgendes System der gewöhnlichen Differentialgleichungen:

,

Der Vektor der numerischen Lösung wird hier als Funktion von Zeit betrachtet.

Räumliche Semidiskretisierung für die Reaktionsdiffusiongleichung

[Bearbeiten]
Diskretisierung des Reaktionsterms, Gesamtinfizierte
[Bearbeiten]

Der Reaktionsterm an den Gitterpunkten wird Mithilfe der Restriktionen der exakten Lösung formuliert, für die kumulierte Infizierte (Logistisches Wachstum):

wobei Vektor der nach der Assemblierung aus der Matrix der Bevölkerungsdichte entstanden ist und ist komponentenweise Multiplikation.

Bemerkung: die logistische Infektionsrate , vergleiche Modifiziertes SIR Modell berechnet sich als Rate der Infektionsverbreitung bei einer Kontaktrate: Wahrscheinlichkeit des Kontakts eines Infizierten mit einem Anfälligen.

Diskretisierung des Reaktionsterms, aktuell Infizierte
[Bearbeiten]

Im Falle der räumlichen Modellierung der Dichte der aktuellen Infizierten in Wechselwirkung mit Susceptibles nach dem Prinzip des SIR-Kompartimentmodells werden drei einander gekopelte Reaktionsdiffusionsgleichungen für die Dichtefunktionen gelöst.

Diese partielle Differentialgleichungen werden durch die reche Seiten gekoppelt. Die entsprechende Reaktionsterme und werden an den Gitterpunkten ausgewertet:

wobei die Wechselrate zwischen den Infizierten und Genesenen ist.

Da die erste und zweite partielle Differentialgleichung für nicht von abhängig ist, kann man diese zwei Gleichungen separat lösen und dann im Nachgang berechnen.)

System von gewöhnlichen Differentialgleichungen
[Bearbeiten]

Nach der Zunahme des diskretisierten Reaktionstern zum System von gewöhnlichen Differentialgleichungen des räumlich diskretisierten Neumann Randwertproblems für die Diffusion ergibt sich folgendes System der gewöhnlichen Differentialgleichungen (GDGL) für die Reaktionsdiffusionsgleichung:

mit einem linearen Anteil und einem nichtlinearen Anteil .

Dieses GDGL System, ergänzt um die Anfangsbedingung gegeben durch eine bekannte Funktion

definiert ein Anfangswertproblem für Reaktionsdiffusionsgleichung.

Zeitdiskretisierung der Reaktion-Diffusionsgleichung

[Bearbeiten]

Unter der Zeitdiskretisierung versteht man ein approximatives Vorgehen zur Bestimmung der Lösung eines Anfangswertproblems in diskreten Zeitpunkten. Der Zeitintervall wird auf äquidistante Teilintervalle der Länge geteilt.

Das einfachste numerische Verfahren, das Euler- oder Polygonzugverfahren entsteht durch das Ersetzten der Zeitableitung mit Vorwärts- oder Rückwardsdifferenzenquotienten

.

Dieses Verfahren hat die Konvergenzordnung 1, siehe Approximationsgüte der Differenzenquotienten.

Nach dem Anwenden des ersten Differenzenquotientes im obigen System von GDL ergeben sich folgende Approximationsschemas erster Ordnung:

Zeitdiskretisierung mit explizitem Eulerverfahren

[Bearbeiten]

Unter Verwendung von erhält man die Berechnungsformel

mit dem Startvektor

Die numerische Lösung in einem neuen Zeitschritt erhält man iterativ durch Einsetzen der Lösung aus dem vorherigen Zeitschritt in die rechte Seite der obigen Formel. Dieses Verfahren hat beschränkten Bereich der zulässigen Schrittweiten im Hinblick auf die Stabilität der numerischen Lösung, die Schrittweite muss aus diesem Grund ausreichend klein gewählt werden, ansonsten kann die numerische Lösung nach wenigen Schritten instabil werden und 'explodieren'.

Zeitdiskretisierung mit implizitem Eulerverfahren

[Bearbeiten]

Unter Verwendung von erhält man die implizite Berechnungsformel

mit dem Startvektor

Die numerische Lösung im neuen Zeitschritt erhält man nach dem Lösen des obigen Systems von nichlinearen Gleichungen für und benötigt weitere numerische Approximationsverfahren für nichtlineare Gleichungssysteme. Dieses Verfahren hat gute Stabilitätseigenschaften in Hinblick auf die Schrittweite (es ist A-stabil), die Schrittweite ist stabilitätsbedingt nicht beschränkt.

Weitere Zeitdiskretisierungsverfahren für gewöhnliche Differentialgleichungen

[Bearbeiten]

Sei eine gewöhnliche Differentialgleichung oder ein System von DGL gegeben allgemein als

Unter Verwendung des zentralen Differenzenquotienten erhält man
die explizite Mittelpunktregel (verbessertes Eulerverfahren) zweiter Ordnug:

.

Ein weiteres Verfahren zweiter Ordnung ist die Trapezregel (Newmark scheme):

.


Für weitere Diskretisierungsverfahren für die Anfangswertprobleme ggf. höherer Konvergenzordnungen siehe Runge-Kutta und Mehrschrittverfahren.

Raumdiskretisierung des regionaldifferenzierten Diffusionskoffizienten

[Bearbeiten]

Um die räumlichen Epidemieausbreitung regional zu differenzieren, nehmen wir an, dass der Diffusionskoeffizient von der Populationsdichte abhängig ist, siehe nicht-konstanter Diffusionkoeffizient

.

Für diesen Fall muss Diffusionsmatrix (das Approximationsschema) entsprechend angepasst werden, hierbei werden anstatt eines konstanten Faktors vor der Matrix entsprechende Gitterwerte der Funktion in der Matrix figurieren.

Diskretisierung der Randbedingungen

[Bearbeiten]

Die homogene Neumann-Randbedingung in diesem Fall lautet:

.

Mit Anwendung der einseitigen Differenzenquotienten und der Bezeichnung erhält man

  • am linken und rechten Rand des Rechtecks:
,
  • am unteren und oberen Rand des Rechtecks:
.

Diskretisierung des Diffusionsterms

[Bearbeiten]

Das Approximationsschema für den Diffusionsterm

kann mit zweifacher Anwendung des zentralen Differenzenquotienten im obigen Ausdruck in den inneren Gitterpunkten hergeleitet werden:

.

Herleitung des zweiten Differenzenquotienten bez. x:

,
,

hier bezeichnet die Werte der Funktion zwischen den Gitterpunkten .

Analog kann man für den zweiten Differenzenquotienten bez. y zeigen:

.

Insgesamt gilt für den Diffusionsterm:

Approximationsschema
[Bearbeiten]

Unter der Anwendung der Approximation der Randbedingungen und des Diffusionsterms erhalten wir folgende Systemmatrix



wobei






und .

Bemerkung

[Bearbeiten]

In den obigen Matrizen kann man die Zwischenwerte der Funktion c durch die Mittelwerte ersetzen:

In diesem Fall braucht man für den raumabhängigen Diffusionsokeffizient nur die Matrix der Werte an den Gitterpunkten speichern.

Für stückweise lineare Funktion sind die obigen Mittelwerte identisch mit den Zwischenwerten, d.h in den obigen Formeln für gilt Gleichheit '='.

Im Fall einer allgemeinen Funktion ist die Approximation durch die Mittelwerte von zweiter Ordnung, was nach der Addition der Taylorpolynome für bzw. folgt.

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.

Skripte in Octave

[Bearbeiten]

Referenzieren Sie hier die von Ihnen verwendeten Skripte und Bibliotheken in Octave oder R/Studio

Literatur

[Bearbeiten]

Notieren Sie hier die von Ihnen verwendete Literatur

  • Quelle 1
  1. https://de.wikiversity.org/wiki/Reeller_Vektorraum/Vektorfeld/Definition
  2. https://de.wikipedia.org/wiki/Laplace-Gleichung#Definition
  3. https://de.wikipedia.org/wiki/Diffusionskoeffizient
  4. https://de.wikiversity.org/wiki/Reaktion-Diffusionsprozess#Verallgemeinung_in_%7F'%22%60UNIQ--postMath-0000002D-QINU%60%22'%7F,_Zusammenfassung
  5. Laplace Gleichung, Wikipedia abgerufen am 21.04.2020
  6. 6,0 6,1 Lawrence C. Evans: Partial Differential Equations. American M mathematical Society, Providence RI 1998, ISBN 0-8218-0772-2 (Graduate studies in mathematics 19)
  7. 7,0 7,1 Fundamentallösung, Wärmeleitungsgleichung , Wikipedia .. abgerufen am 22.04.2020
  8. https://de.wikiversity.org/wiki/Numerische_Modellierung_der_Diffusion#Assemblierung
  9. https://de.wikiversity.org/wiki/Numerische_Modellierung_der_Diffusion#SW10:_Numerische_Diskretisierung_der_Reaktionsdiffusionsgleichung_mit_FDM