Yukterez

Pandemie

Mar 22nd, 2020
631
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (* pandemic.yukterez.net *)
  2.  
  3. T = 300; (* Zeitraum *)
  4. E0 = 83000000; (* Einwohner *)
  5.  
  6. I0 = 66; (* Infizierte *)
  7. R0 = 0; (* Geheilte *)
  8.  
  9. b0 = 30/100; (* initiale Transmissionsrate *)
  10. b1 = 30/100; (* finale Transmissionsrate *)
  11.  
  12. tu = 15; (* Zeitspanne der ungehinderten Ausbreitung *)
  13. tb = 5; (* Zeitspanne b0 -> b1 *)
  14.  
  15. d = 30; (* Krankheitsdauer *)
  16. h = 2/10; (* Hospitalisierungsrate *)
  17. x = 3/100; (* Sterberate *)
  18.  
  19. f = (b0-b1)/tb; (* Änderung der Transmissionsrate *)
  20. τ = t-tu;
  21. B = If[b0==b1, b0, If[b1<b0, Max[b1, b0-f τ], Min[b1, b0-f τ]]];
  22. b = Interpolation[Table[If[t<tu, b0, B], {t, 0, T, 1}]];
  23.  
  24. i0 = I0/E0; (* Fraktion der Angesteckten *)
  25. r0 = R0/E0; (* Fraktion der Geheilten *)
  26. s0 = 1-i0-r0; (* Fraktion der Ansteckbaren *)
  27.  
  28. DGL = {
  29. s'[t] == -s[t] b[t] i[t], (* Änderungsrate der noch Gesunden *)
  30. i'[t] == s[t] b[t] i[t]-i[t]/d, (* Änderungsrate der Infizierten *)
  31. r'[t] == i[t]/d, (* Änderungsrate der Geheilten *)
  32. s[0] == s0,
  33. i[0] == i0,
  34. r[0] == r0};
  35.  
  36. sol = Quiet[NDSolve[DGL, {s, i, r}, {t, 0, T+tu},
  37. WorkingPrecision -> 48, MaxSteps -> Infinity,
  38. InterpolationOrder -> All]];
  39.  
  40. max = Quiet[FindMaximum[i[t] /. sol, {t, 1}]]
  41.  
  42. Plot[{
  43. Evaluate[E0 s[t] /. sol], (* noch gesund, rot *)
  44. Evaluate[E0 i[t] /. sol], (* erkrankt, blau *)
  45. Evaluate[h E0 i[t] /. sol], (* hospitalisiert, schwarz *)
  46. Evaluate[(1-x) E0 r[t] /. sol], (* wieder gesund, grün *)
  47. Evaluate[x E0 r[t] /. sol] (* gestorben, grau *)
  48. }, {t, 0, T},
  49. Frame -> True,
  50. AxesOrigin -> {0, 0},
  51. ImageSize -> 380,
  52. PlotRange -> {All, {0, E0}},
  53. ImagePadding -> {{50, 1}, {20, 10}},
  54. PlotStyle -> {Red, Blue, Black, Green, Gray},
  55. GridLines -> {{t/.max[[2]]}, {E0 max[[1]], E0/2}}]
  56.  
  57. Framed[Grid[Join[{{
  58. "Tag ",
  59. "Krank (N) ", "Krank (+%) ", "Tot ",
  60. "Spital ", "Gesund ", "Genesen "
  61. }}, {{" ", " ", " ", " ", " "}},
  62. Table[{t,
  63. Round[Evaluate[E0 i[t] /. sol][[1]]],
  64. 100 N[Evaluate[(i[t]/i[Max[0, t-1]]-1) /. sol][[1]], 4],
  65. Round[Evaluate[x E0 r[t] /. sol][[1]]],
  66. Round[Evaluate[h E0 i[t] /. sol][[1]]],
  67. Round[Evaluate[E0 s[t] /. sol][[1]]],
  68. Round[Evaluate[(1-x) E0 r[t] /. sol][[1]]]},
  69. {t, 0, T, 1}]],
  70. Alignment -> Left]]
RAW Paste Data