SHARE
TWEET

Pandemie

Yukterez Mar 22nd, 2020 (edited) 123 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
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top