Max_Leb

Untitled

Apr 12th, 2023
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.67 KB | None | 0 0
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3.  
  4.  
  5. class WIRiv:
  6. def __init__(self, W, I, R, i, v, g, mu, alpha, beta, h, max_interferon=1000):
  7. self.ceil_sum = W + I + R
  8. self.W = W / self.ceil_sum
  9. self.I = I / self.ceil_sum
  10. self.R = R / self.ceil_sum
  11. self.molec = max_interferon
  12. self.i = i / self.molec
  13. self.v = v / self.molec
  14. self.g_i = g["i"]
  15. self.g_v = g["v"]
  16. self.m_i = mu["i"]
  17. self.m_I = mu["I"]
  18. self.m_v = mu["v"]
  19. self.a_i = alpha["i"]
  20. self.a_v = alpha["v"]
  21. self.b_i = beta["i"]
  22. self.b_v = beta["v"]
  23. self.h = h
  24. def create_time_line(self, max_timer, step=1):
  25. W_line = []
  26. I_line = []
  27. R_line = []
  28. i_line = []
  29. v_line = []
  30. W = self.W
  31. I = self.I
  32. R = self.R
  33. i = self.i
  34. v = self.v
  35. for t in range(int(max_timer / self.h) + 1):
  36. if t % step == 0:
  37. W_line += [W]
  38. I_line += [I]
  39. R_line += [R]
  40. i_line += [i]
  41. v_line += [v]
  42. W, I, R, i, v = (
  43. W - self.a_i * i * W - self.a_v * v * W,
  44. I + self.a_v * v * W - self.m_I * I,
  45. R + self.a_i * i * W,
  46. i + self.g_i * I - self.b_i * i * W - self.m_i * i,
  47. v + self.g_v * I - self.b_v * v * W - self.m_v * v,
  48. )
  49.  
  50. return (
  51. np.array(W_line) * self.ceil_sum,
  52. np.array(I_line) * self.ceil_sum,
  53. np.array(R_line) * self.ceil_sum,
  54. np.array(i_line) * self.molec,
  55. np.array(v_line) * self.molec,
  56. )
  57.  
  58.  
  59. def create_plot(self, max_timer, step):
  60. W_line, I_line, R_line, i_line, v_line = self.create_time_line(max_timer, step)
  61. steps = W_line.shape[0]
  62. x = range(steps)
  63. fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 6))
  64. ax1.fill_between(x, [0] * steps, W_line, label="Подверженные заражению")
  65. ax1.fill_between(x, W_line, I_line + W_line, label="Зараженные")
  66. ax1.fill_between(
  67. x, W_line + I_line, W_line + I_line + R_line, label="Выздоровевшие"
  68. )
  69. ax1.legend()
  70. ax2.plot(x, i_line, label="Интерферон")
  71. ax2.plot(x, v_line, label="Вирион")
  72. ax2.legend()
  73. plt.show()
  74.  
  75.  
  76. g_dict = {"i": 0.1, "v": 0.1}
  77. mu_dict = {"i": 0.05, "I": 0.05, "v": 0.005}
  78. alpha_dict = {"i": 0.02, "v": 0.02}
  79. beta_dict = {"i": 0.05, "v": 0.05}
  80.  
  81.  
  82.  
  83. data = WIRiv(200, 100, 0, 25, 100, g_dict, mu_dict, alpha_dict, beta_dict, 24, 1000)
  84. data.create_plot(24, 1)
Advertisement
Add Comment
Please, Sign In to add comment