202 CHAPTER 5. EPIDEMICS, IMAGES AND MONEY
30. infp = inf;
31. for k = 1:maxk % begin time steps
32. for m =1:20 % begin Newton iteration
33. for j = 2:n % compute sparse Jacobian matrix
34. for i = 2:n
35. G(i,j) = sus(i,j) - susp(i,j) +
dt*a*sus(i,j)*inf(i,j);
36. H(i,j) = inf(i,j) - infp(i,j) + b*dt*inf(i,j) - ...
37. alpha*(cw(i,j)*inf(i-1,j)
+ce(i,j)* inf(i+1,j)+ ...
38. cs(i,j)*inf(i,j-1)+ cn(i,j)* inf(i,j+1)
-cc(i,j)*inf(i,j))- ...
39. a*dt*sus(i,j)*inf(i,j);
40. ac(i,j) = 1 + dt*b+alpha*cc(i,j)-dt*a*sus(i,j);
41. ae(i,j) = -alpha*ce(i,j);
42. aw(i,j) = -alpha*cw(i,j);
43. an(i,j) = -alpha*cn(i,j);
44. as(i,j) = -alpha*cs(i,j);
45. ac(i,j) = ac(i,j)-(dt*a*sus(i,j))*
(-dt*a*inf(i,j))/(1+dt*a*inf(i,j));
46. rhs(i,j) = H(i,j) - (-dt*a*inf(i,j))*G(i,j)/
(1+dt*a*inf(i,j));
47. end
48. end
49. [dinf , mpcg]= pcgssor(an,as,aw,ae,ac,inf,rhs,n);
50. dsus(2:n,2:n) = G(2:n,2:n)-
(dt*a*sus(2:n,2:n)).*dinf(2:n,2:n);
51. update_bc; % update the boundary values
52. sus = sus - dsus;
53. inf = inf - dinf;
54. error = norm(H(2:n,2:n));
55. if error
?.0001
56. break;
57. end
58. end % Newton iterations
59. susp = sus;
60. infp = inf;
61. time(k) = k*dt;
62. current_time = time(k)
63. mpcg
64. error
65. subplot(1,2,1)
66. mesh(x,y,inf)
67. title(’infected’)
68. subplot(1,2,2)
© 2004 by Chapman & Hall/CRC