BAB VII PENUTUP
B. Saran
Penulis sadar bahwa penyusunan tulisan ini masih banyak
kekurangan. Dalam tulisan ini baru menyelesaikan permasalahan apabila
kontrolnya dapat ditemukan secara analitik. Dengan demikian, disarankan agar
pembaca dapat menyelesaikan permasalahan penyebaran penyakit apabila
kontrolnya tidak dapat ditemukan secara analitik, sehingga harus ditemukan
secara numerik. Selain itu, pembaca juga bisa mengembangkan permasalahan
penyebaran penyakit dalam model SEIR tanpa kontrol. Model tersebut dapat
dikembangkan dengan masalah bahwa individu yang sembuh dari penyakit dapat
kembali menjadi individu yang rentan penyakit karena tidak adanya pemberian
i
DAFTAR PUSTAKA
Boyce, William E. & Richard C. Diprima (2008). Elementary Differential Equations and Boundary Value Problems. New York: Wiley Plus
Burghes, D. & Alexander Graham (2004). Control And Optimal Control
Theories With Applications. England : Horwood
Chong, Edwin K. P. & Stanislaw H, ZAK (1995). An Introduction to
Optimization. New York: A Wiley – Interscience Publication
Fitzhugh, R. (1961). Impulses And Physiological States In Theoretical Models of Nerve membrane. Biophysical Journal.Volume 1. Halaman 445-466.
Greenbaum, Anne & Timothy P (2012). Numerical Methods. New Jersey:
Princeton University Press
Lenhart, S. & John T. Workman (2007). Optimal Control Applied To
133 LAMPIRAN
1. Program Metode Sweep Maju - Mundur
function y = SEIR(b,d,c,e,g,a,S0,E0,I0,R0,A,T)%fungsi keluaran
test = -1; %variabel uji konvergensi
delta = 0.001; %nilai toleransi M = 1000;
t=linspace(0,T,M+1); %waktu ke-0 sampai ke-T sebanyak M+1 h=T/M; %panjang langkah
h2 = h/2; %panjang langkah yang digunakan dalam RK-4
S=zeros(1,M+1); E=zeros(1,M+1);
I=zeros(1,M+1); %inisial awal R=zeros(1,M+1);
N=zeros(1,M+1); S(1)=S0;
E(1)=E0;
I(1)=I0; %nilai awal keadaan R(1)=R0;
N(1)=S0+E0+I0+R0; %banyaknya populasi pada keadaan awal lambda1=zeros(1,M+1);
lambda2=zeros(1,M+1);
lambda3=zeros(1,M+1); %inisial awal lambda4=zeros(1,M+1);
u=zeros(1,M+1); %inisial awal while(test < 0) ulama = u; Slama = S; Elama = E; Ilama = I;
Nlama = N; %nilai awal dari iterasi while lambda1lama = lambda1;
lambda2lama = lambda2; lambda3lama = lambda3; lambda4lama = lambda4;
%RK-4 Secara Maju Untuk Mencari X for i = 1:M
m11 = b*N(i) - d*S(i) - c*S(i)*I(i) - u(i)*S(i); m12 = c*S(i)*I(i) - (e+d)*E(i); m13 = e*E(i) - (g+a+d)*I(i); m14 = (b-d)*N(i) - a*I(i); m21 = b*(N(i)+h2*m14) - d*(S(i)+h2*m11) - c*(S(i)+h2*m11)*(I(i)+h2*m13) - 0.5*(u(i)+u(i+1))*(S(i)+h2*m11); m22 = c*(S(i)+h2*m11)*(I(i)+h2*m13) - (e+d)*(E(i)+h2*m12); m23 = e*(E(i)+h2*m12) - (g+a+d)*(I(i)+h2*m13); m24 = (b-d)*(N(i)+h2*m14) - a*(I(i)+h2*m13); m31 = b*(N(i)+h2*m24) - d*(S(i)+h2*m21) - c*(S(i)+h2*m21)*(I(i)+h2*m23) - 0.5*(u(i)+u(i+1))*(S(i)+h2*m21);
m32 = c*(S(i)+h2*m21)*(I(i)+h2*m23) - (e+d)*(E(i)+h2*m22); m33 = e*(E(i)+h2*m22) - (g+a+d)*(I(i)+h2*m23); m34 = (b-d)*(N(i)+h2*m24) - a*(I(i)+h2*m23); m41 = b*(N(i)+h*m34) - d*(S(i)+h*m31) - c*(S(i)+h*m31)*(I(i)+h*m33) - u(i+1)*(S(i)+h*m31); m42 = c*(S(i)+h*m31)*(I(i)+h*m33) - (e+d)*(E(i)+h*m32); m43 = e*(E(i)+h*m32) - (g+a+d)*(I(i)+h*m33); m44 = (b-d)*(N(i)+h*m34) - a*(I(i)+h*m33); S(i+1) = S(i) + (h/6)*(m11 + 2*m21 + 2*m31 + m41); E(i+1) = E(i) + (h/6)*(m12 + 2*m22 + 2*m32 + m42); I(i+1) = I(i) + (h/6)*(m13 + 2*m23 + 2*m33 + m43); N(i+1) = N(i) + (h/6)*(m14 + 2*m24 + 2*m34 + m44); end
%RK-4 Secara Mundur Untuk Mencari Lambda for i = 1:M
j = M + 2 - i;
m11 = lambda1(j)*(d + c*I(j) + u(j)) - c*lambda2(j)*I(j); m12 = lambda2(j)*(e + d) - lambda3(j)*e; m13 = -A + (lambda1(j) - lambda2(j))*c*S(j) + lambda3(j)*(g+a+d) + lambda4(j)*a; m14 = -lambda1(j)*b - lambda4(j)*(b-d);
m21 = (lambda1(j)-h2*m11)*(d + c*0.5*(I(j) + I(j-1)) + 0.5*(u(j) + u(j-1))) - c*(lambda2(j)-h2*m12)*0.5*(I(j) + I(j-1));
m22 = (lambda2(j)-h2*m12)*(e + d) - (lambda3(j)-h2*m13)*e;
m23 = -A + ((lambda1(j)-h2*m11) - (lambda2(j)-h2*m12))*c*0.5*(S(j) + S(j-1)) + (lambda3(j)-h2*m13)*(g+a+d) + (lambda4(j)-h2*m14)*a; m24 = -(lambda1(j)-h2*m11)*b - (lambda4(j)-h2*m14)*(b-d);
m31 = (lambda1(j)-h2*m21)*(d + c*0.5*(I(j) + I(j-1)) + 0.5*(u(j) + u(j-1))) - c*(lambda2(j)-h2*m22)*0.5*(I(j) + I(j-1)); m32 = (lambda2(j)-h2*m22)*(e + d) - (lambda3(j)-h2*m23)*e; m33 = -A + ((lambda1(j)-h2*m21) - (lambda2(j)-h2*m22))*c*0.5*(S(j) + S(j-1)) + (lambda3(j)-h2*m23)*(g+a+d) + (lambda4(j)-h2*m24)*a; m34 = -(lambda1(j)-h2*m21)*b - (lambda4(j)-h2*m24)*(b-d);
m41 = (lambda1(j)-h*m31)*(d + c*I(j-1) + u(j-1)) - c*(lambda2(j)-h*m32)*I(j-1); m42 = (lambda2(j)-h*m32)*(e + d) - (lambda3(j)-h*m33)*e; m43 = -A + ((lambda1(j)-h*m31) - (lambda2(j)-h*m32))*c*S(j-1) + (lambda3(j)-h*m33)*(g+a+d) + (lambda4(j)-h*m34)*a; m44 = -(lambda1(j)-h*m31)*b - (lambda4(j)-h*m34)*(b-d); lambda1(j-1) = lambda1(j) - (h/6)*(m11 + 2*m21 + 2*m31 + m41); lambda2(j-1) = lambda2(j) - (h/6)*(m12 + 2*m22 + 2*m32 + m42); lambda3(j-1) = lambda3(j) - (h/6)*(m13 + 2*m23 + 2*m33 + m43); lambda4(j-1) = lambda4(j) - (h/6)*(m14 + 2*m24 + 2*m34 + m44); end
%Mencari Nilai u yang Maksimal temp=(S.*lambda1)./2;
u1 = min(0.9,max(0,temp)); u = 0.5*(u1 + ulama);
%Uji Konvergensi
temp1 = delta*sum(abs(u)) - sum(abs(ulama - u)); temp2 = delta*sum(abs(S)) - sum(abs(Slama - S)); temp3 = delta*sum(abs(E)) - sum(abs(Elama - E)); temp4 = delta*sum(abs(I)) - sum(abs(Ilama - I)); temp5 = delta*sum(abs(N)) - sum(abs(Nlama - N));
temp6 = delta*sum(abs(lambda1)) - sum(abs(lambda1lama - lambda1));
temp7 = delta*sum(abs(lambda2)) - sum(abs(lambda2lama - lambda2));
temp8 = delta*sum(abs(lambda3)) - sum(abs(lambda3lama - lambda3));
temp9 = delta*sum(abs(lambda4)) - sum(abs(lambda4lama - lambda4));
test = min(temp1, min(temp2, min(temp3, min(temp4, min(temp5, min(temp6, min(temp7, min(temp8, temp9)))))))); end
%RK-4 Untuk Banyaknya Individu Yang Sembuh for i=1:M
m1 = g*I(i) - d*R(i) + u(i)*S(i);
m2 = g*0.5*(I(i)+I(i+1)) - d*(R(i)+h2*m1) + 0.5*(u(i)+u(i+1))*0.5*(S(i)+S(i+1));
m3 = g*0.5*(I(i)+I(i+1)) - d*(R(i)+h2*m2) + 0.5*(u(i)+u(i+1))*0.5*(S(i)+S(i+1));
m4 = g*I(i+1) - d*(R(i)+h*m3) + u(i+1)*S(i+1); R(i+1) = R(i) + (h/6)*(m1 + 2*m2 + 2*m3 + m4); end
y(2,:) = S; y(3,:) = E; y(4,:) = I; y(5,:) = R; y(6,:) = N; y(7,:) = u;
2. Program Masukkan Nilai – Nilai Parameter close flag1=0; flag2=0; flag3=0; flag4=0; while(flag1==0)
var1 = input('Masukkan nilai laju untuk kelahiran b: '); if(var1 > 0)
b = var1; flag1=1; else
disp(' ')
disp('ERROR: b positif.') disp(' ') end end flag1=0; disp(' ') while(flag1==0)
var1 = input('Masukkan nilai untuk laju kematian alami d: '); if(var1 > 0) d = var1; flag1=1; else disp(' ')
disp('ERROR: d positif.') disp(' ') end end flag1=0; disp(' ') while(flag1==0)
var1 = input('Masukkan nilai untuk laju individu dalam masa inkubasi c: '); if(var1 > 0) c = var1; flag1=1; else disp(' ')
disp('ERROR: c positif.') disp(' ') end end flag1=0; disp(' ') while(flag1==0)
var1 = input('Masukkan nilai untuk laju individu yang masuk masa infeksi dari masa inkubasi e: ');
if(var1 > 0) e = var1;
flag1=1; else
disp(' ')
disp('ERROR: e positif.') disp(' ') end end flag1=0; disp(' ') while(flag1==0)
var1 = input('Masukkan nilai untuk laju individu yang sembuh g: '); if(var1 >= 0) g = var1; flag1=1; else disp(' ')
disp('ERROR: g tidak negatif.') disp(' ') end end flag1=0; disp(' ') while(flag1==0)
var1 = input('Masukkan nilai untuk laju individu yang mengalami kematian akibat terinfeksi a: ');
if(var1 > 0) a = var1; flag1=1; else
disp('ERROR: a positif.') disp(' ') end end flag1=0; disp(' ') while(flag1==0)
var1 = input('Masukkan nilai awal untuk populasi individu yang rentan (S_0): '); if(var1 >= 0) S0 = var1; flag1=1; else disp(' ')
disp('ERROR: S_0 tidak negatif.') disp(' ') end end flag1=0; disp(' ') while(flag1==0)
var1 = input('Masukkan nilai awal untuk populasi individu yang masuk masa inkubasi (E_0): ');
if(var1 >= 0) E0 = var1; flag1=1; else
disp(' ')
disp('ERROR: E_0 tidak negatif.') disp(' ')
end flag1=0;
disp(' ') while(flag1==0)
var1 = input('Masukkan nilai awal untuk populasi individu yang terinfeksi (I_0): ');
if(var1 >= 0) I0 = var1; flag1=1; else
disp(' ')
disp('ERROR: I_0 tidak negatif.') disp(' ') end end flag1=0; disp(' ') while(flag1==0)
var1 = input('Masukkan nilai awal untuk populasi individu yang sembuh (R_0): '); if(var1 >= 0) R0 = var1; flag1=1; else disp(' ')
disp('ERROR: R_0 tidak negatif.') disp(' ')
end end flag1=0;
while(flag1==0)
var1 = input('Masukkan nilai laju individu terinfeksi berpengaruh meminimalkan banyaknya individu terinfeksi A: '); if(var1>=0)
A = var1; flag1=1; else
disp(' ')
disp('ERROR: A tidak negatif.') disp(' ') end end flag1=0; disp(' ') while(flag1==0)
var1 = input('Berapa tahun lamanya untuk menjalankan sistem ini: '); if(var1>0) T=var1; flag1=1; else disp(' ')
disp('ERROR: T positif.') disp(' ')
end end flag1=0;
disp(' ')
disp('Harap tunggu beberapa saat...') y1=SEIR(b,d,c,e,g,a,S0,E0,I0,R0,A,T); disp(' ')
while(flag2==0)
disp('Akankah ingin mencoba untuk parameter yang lain?') disp('1. Ya')
disp('2. Tidak')
var2=input('Jawaban 1 atau 2: ');
if(var2==1)
disp(' ') flag2=1;
while(flag3==0)
disp('Parameter manakah yang akan diubah?') disp('1. b') disp('2. d') disp('3. c') disp('4. e') disp('5. g') disp('6. a') disp('7. S0') disp('8. E0') disp('9. I0') disp('10. R0') disp('11. A') disp('12. T')
var3 = input('Jawaban 1 - 12: '); if(var3==1)
disp(' ') while(flag4==0)
var4 = input('Masukkan nilai b yang kedua: ');
b2 = var4; flag4 = 1; else
disp(' ') disp('ERROR: b positif.') disp(' ')
end end
disp(' ')
disp('Harap tunggu beberapa saat...') y2=SEIR(b2,d,c,e,g,a,S0,E0,I0,R0,A,T); flag3=1;
elseif(var3==2) disp(' ') while(flag4==0)
var4=input('Masukkan nilai d yang kedua: '); if(var4 > 0) d2 = var4; flag4 = 1; else disp(' ')
disp('ERROR: d positif.') disp(' ')
end end
disp(' ')
disp('Harap tunggu beberapa saat...') y2=SEIR(b,d2,c,e,g,a,S0,E0,I0,R0,A,T); flag3=1;
disp(' ') while(flag4==0)
var4 = input('Masukkan nilai c yang kedua: '); if(var4 > 0) c2 = var4; flag4 = 1; else disp(' ')
disp('ERROR: c positif.') disp(' ')
end end
disp(' ')
disp('Harap tunggu beberapa saat...') y2=SEIR(b,d,c2,e,g,a,S0,E0,I0,R0,A,T); flag3=1;
elseif(var3==4) disp(' ') while(flag4==0)
var4=input('Masukkan nilai e yang kedua: '); if(var4 > 0) e2 = var4; flag4 = 1; else disp(' ')
disp('ERROR: e positif.') disp(' ')
end end
disp(' ')
disp('Harap tunggu beberapa saat...') y2=SEIR(b,d,c,e2,g,a,S0,E0,I0,R0,A,T); flag3=1;
elseif(var3==5) disp(' ') while(flag4==0)
var4=input('Masukkan nilai g yang kedua: '); if(var4 >= 0) g2 = var4; flag4 = 1; else disp(' ')
disp('ERROR: g tidak negatif.') disp(' ')
end end
disp(' ')
disp('Harap tunggu beberapa saat...') y2=SEIR(b,d,c,e,g2,a,S0,E0,I0,R0,A,T); flag3=1;
elseif(var3==6) disp(' ') while(flag4==0)
var4=input('Masukkan nilai a yang kedua: ');
if(var4 > 0) a2 = var4; flag4 = 1; else
disp(' ')
disp('ERROR: a positif.') disp(' ')
end end
disp(' ')
disp('Harap tunggu beberapa saat...') y2=SEIR(b,d,c,e,g,a2,S0,E0,I0,R0,A,T); flag3=1;
elseif(var3==7) disp(' ') while(flag4==0)
var4=input('Masukkan nilai S_0 yang kedua: '); if(var4 >= 0) S02 = var4; flag4 = 1; else disp(' ')
disp('ERROR: S_0 tidak negatif.') disp(' ')
end end
disp(' ')
disp('Harap tunggu beberapa saat...') y2=SEIR(b,d,c,e,g,a,S02,E0,I0,R0,A,T); flag3=1;
elseif(var3==8) disp(' ') while(flag4==0)
var4=input('Masukkan nilai E_0 yang kedua: '); if(var4 >= 0) E02 = var4; flag4 = 1; else disp(' ')
disp('ERROR: E_0 tidak negatif.') disp(' ')
end end
disp(' ')
disp('Harap tunggu beberapa saat...') y2=SEIR(b,d,c,e,g,a,S0,E02,I0,R0,A,T); flag3=1;
elseif(var3==9) disp(' ') while(flag4==0)
var4=input('Masukkan nilai I_0 yang kedua: '); if(var4 >= 0) I02 = var4; flag4 = 1; else disp(' ')
disp('ERROR: I_0 tidak negatif.') disp(' ')
end end
disp(' ')
y2=SEIR(b,d,c,e,g,a,S0,E0,I02,R0,A,T); flag3=1;
elseif(var3==10) disp(' ') while(flag4==0)
var4=input('Masukkan nilai R_0 yang kedua: '); if(var4 >= 0) R02 = var4; flag4 = 1; else disp(' ')
disp('ERROR: R_0 tidak negatif.') disp(' ')
end end
disp(' ')
disp('Harap tunggu beberapa saat...') y2=SEIR(b,d,c,e,g,a,S0,E0,I0,R02,A,T); flag3=1;
elseif(var3==11)
disp(' ') while(flag4==0)
var4=input('Masukkan nilai A yang kedua: '); if(var4 >= 0) A2 = var4; flag4 = 1; else disp(' ')
disp(' ') end
end
disp(' ')
disp('Harap tunggu beberapa saat...') y2=SEIR(b,d,c,e,g,a,S0,E0,I0,R0,A2,T); flag3=1;
elseif(var3==12)
disp(' ') while(flag4==0)
var4=input('Masukkan nilai T yang kedua: '); if(var4 > 0) T2 = var4; flag4 = 1; else disp(' ')
disp('ERROR: T positif.') disp(' ')
end end
disp(' ')
disp('Harap tunggu beberapa saat...') y2=SEIR(b,d,c,e,g,a,S0,E0,I0,R0,A,T2); flag3=1; else disp(' ') disp('Pardon?') disp(' ') end end
elseif(var2==2) disp(' ') flag2=1; subplot(3,2,1);plot(y1(1,:),y1(2,:)) subplot(3,2,1);xlabel('Waktu') subplot(3,2,1);ylabel('Rentan') subplot(3,2,2);plot(y1(1,:),y1(3,:)) subplot(3,2,2);xlabel('Waktu') subplot(3,2,2);ylabel('Inkubasi') subplot(3,2,3);plot(y1(1,:),y1(4,:)) subplot(3,2,3);xlabel('Waktu') subplot(3,2,3);ylabel('Infeksi') subplot(3,2,4);plot(y1(1,:),y1(5,:)) subplot(3,2,4);xlabel('Waktu') subplot(3,2,4);ylabel('Sembuh') subplot(3,2,5);plot(y1(1,:),y1(6,:)) subplot(3,2,5);xlabel('Waktu')
subplot(3,2,5);ylabel('Total Populasi') subplot(3,2,6);plot(y1(1,:),y1(7,:)) subplot(3,2,6);xlabel('Waktu')
subplot(3,2,6);ylabel('Laju Vaksinasi') subplot(3,2,6);axis([0 T -0.1 1]) else disp(' ') disp('Pardon?') disp(' ') end end
if(var2==1)
subplot(3,2,1);plot(y1(1,:),y1(2,:),'b',y2(1,:),y2(2,:),'g') subplot(3,2,1);xlabel('Waktu')
subplot(3,2,1);ylabel('Rentan')
subplot(3,2,1);legend('Nilai Pertama','Nilai Kedua',0)
subplot(3,2,2);plot(y1(1,:),y1(3,:),'b',y2(1,:),y2(3,:),'g') subplot(3,2,2);xlabel('Waktu')
subplot(3,2,2);ylabel('Inkubasi')
subplot(3,2,2);legend('Nilai Pertama','Nilai Kedua',0)
subplot(3,2,3);plot(y1(1,:),y1(4,:),'b',y2(1,:),y2(4,:),'g') subplot(3,2,3);xlabel('Waktu')
subplot(3,2,3);ylabel('Infeksi')
subplot(3,2,3);legend('Nilai Pertama','Nilai Kedua',0)
subplot(3,2,4);plot(y1(1,:),y1(5,:),'b',y2(1,:),y2(5,:),'g') subplot(3,2,4);xlabel('Waktu')
subplot(3,2,4);ylabel('Sembuh')
subplot(3,2,4);legend('Nilai Pertama','Nilai Kedua',0)
subplot(3,2,5);plot(y1(1,:),y1(6,:),'b',y2(1,:),y2(6,:),'g') subplot(3,2,5);xlabel('Waktu')
subplot(3,2,5);ylabel('Total Populasi')
subplot(3,2,5);legend('Nilai Pertama','Nilai Kedua',0)
subplot(3,2,6);plot(y1(1,:),y1(7,:),'b',y2(1,:),y2(7,:),'g') subplot(3,2,6);xlabel('Waktu')
subplot(3,2,6);ylabel('Laju Vaksinasi')
subplot(3,2,6);legend('Nilai Pertama','Nilai Kedua',0) if(var3==10)
else
subplot(3,2,6);axis([0 T -0.1 1]) end