From 61dd3db15d4d2af70e5920002571df76f9542bb2 Mon Sep 17 00:00:00 2001 From: Paul CACHEUX <paulcacheux@gmail.com> Date: Wed, 6 Jun 2018 10:43:47 +0200 Subject: [PATCH] Extracted model functionnality --- SRI_matlab/main.m | 29 +++++------------------------ SRI_matlab/model.m | 39 +++++++++++++++++++++++++++++++++++++++ SRI_matlab/step.m | 2 +- 3 files changed, 45 insertions(+), 25 deletions(-) create mode 100644 SRI_matlab/model.m diff --git a/SRI_matlab/main.m b/SRI_matlab/main.m index 698be6b..b7274a5 100644 --- a/SRI_matlab/main.m +++ b/SRI_matlab/main.m @@ -6,9 +6,6 @@ S = 990; I = 10; R = 0; -% input = [S, I, R]; -input = build_input(S, I, R, 12); - coeffs = options; coeffs.InfectionRate = 0.02; coeffs.ImmunisationRate = 0.029; @@ -16,22 +13,15 @@ coeffs.ImmunisationLossRate = 2.7e-4; coeffs.DeathRate = 1.3e-2; coeffs.NaturalDeathRate = 2e-5; coeffs.NatalityRate = 5e-5; -VaccinationRate = build_vacc_rate(2.4e-4, 2.4e-3, 50, N); -% VaccinationRate = build_vacc_rate(0, 0, 50, N); +VaccinationVector = build_vacc_rate(2.4e-4, 2.4e-3, 50, N); +% VaccinationVector = build_vacc_rate(0, 0, 50, N); -Slist = zeros(1, N); -Wlist = zeros(1, N); -Ilist = zeros(1, N); -Rlist = zeros(1, N); +model = model(S, I, R, 12, N); t = 1:N; for i=t - Slist(i) = input(1); - Ilist(i) = input(2); - Rlist(i) = input(3); - Wlist(i) = sum(input(4:length(input))); - input = step(input, coeffs, VaccinationRate(i)); + model.step(i, coeffs, VaccinationVector); end % figure @@ -40,7 +30,7 @@ end % plot(t, Ilist); % plot(t, Rlist); % plot(t, Dlist); -area([Slist.', Wlist.', Ilist.', Rlist.']); +area([model.Slist.', model.Wlist.', model.Ilist.', model.Rlist.']); legend('Susceptible', 'Waiting', 'Infected', 'Immunized'); title('Evolution of virus in population'); @@ -50,15 +40,6 @@ axis([1, N, 0, inf]); % utility functions -function input=build_input(S, I, R, Waiting) - input(1) = S; - input(2) = I; - input(3) = R; - for i = 1:Waiting - input(3+i) = 0; - end -end - function vacc_rate=build_vacc_rate(start_rate, end_rate, change_step, N) vacc_rate = zeros(1, N); for i=1:change_step diff --git a/SRI_matlab/model.m b/SRI_matlab/model.m new file mode 100644 index 0000000..22b1430 --- /dev/null +++ b/SRI_matlab/model.m @@ -0,0 +1,39 @@ +classdef model < handle + properties + vector + Slist + Ilist + Rlist + Wlist + end + + methods + function obj=model(S, I, R, Waiting, N) + if nargin > 4 + repeat = N; + else + repeat = 100; + end + + obj.vector(1) = S; + obj.vector(2) = I; + obj.vector(3) = R; + for i = 1:Waiting + obj.vector(3+i) = 0; + end + obj.Slist = zeros(1, repeat); + obj.Ilist = zeros(1, repeat); + obj.Rlist = zeros(1, repeat); + obj.Wlist = zeros(1, repeat); + end + + function step(obj, i, coeffs, VaccinationVec) + obj.Slist(i) = obj.vector(1); + obj.Ilist(i) = obj.vector(2); + obj.Rlist(i) = obj.vector(3); + obj.Wlist(i) = sum(obj.vector(4:length(obj.vector))); + obj.vector = step(obj.vector, coeffs, VaccinationVec(i)); + end + end +end + \ No newline at end of file diff --git a/SRI_matlab/step.m b/SRI_matlab/step.m index b3f9b39..eb70acb 100644 --- a/SRI_matlab/step.m +++ b/SRI_matlab/step.m @@ -11,7 +11,7 @@ for i=5:length(X) end if length(X) > 3 - infecter = sum(X(4:length(X)) + I); + % infecter = sum(X(4:length(X)) + I); infection = S * (1 - 25 * options.InfectionRate / N) ^ I; % infection = options.InfectionRate * S * infecter/N; new_waiting(1) = infection; -- GitLab