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