Lampiran 1. Solusi Fungsi Green
1 function G = greenfunction(k, v, n, a, b)
2 % k adalah fungsi difusi 3 % v adalah fungsi adveksi
4 % n adalah jumlah diskritisasi sepanjang domain (a,b) 5 h = (b-a)/n;
6 x = linspace(a, b, n+1);
7 muval(1) = 0.0; 8 for j = 2: n+1
9 increment_m = (v(x(j))/k(x(j)) + v(x(j-1))/k(x(j-1)))*0.5*h; 10 muval(j) = muval(j-1) + increment_m;
11 end
12 mu(1:n+1) = exp(-muval(1:n+1)); 13 kval(1)=0.0;
14 for j=2:n+1
15 increment_k = ( mu(j)/k(x(j))+ mu(j-1)/k(x(j-1)))*(0.5)*h; 16 kval(j) = kval(j-1) + increment_k;
17 end 18
19 %fungsi Green untuk kondisi batas Neumann-Neumann 20 for j=1:n+1
21 for i=1:n+1
22 c = (-mu(n+1)/v(n+1) - (kval(n+1) - kval(j))) /... 23 (mu(n+1)/v(n+1) - 1/v(1) + kval(n+1));
24 if (x(i)<x(j))
25 phi(i,j) = (c/mu(i))*(1/v(1) - kval(i));
26 else
27 phi(i,j) = ((1+c)/mu(i))*(mu(n+1)/v(n+1) +... 28 (kval(n+1)-kval(i)));
29 end
30 end 31 end 32 %
33 plot(x,G(:,2500)) %Grafik fungsi Green
34 xlabel({'$x$'},'interpreter','latex')
Lampiran 2. Solusi Numerik Persamaan Diferensial Semilinear
1 function u = semilinear(f, dif, n, a, b)
2 % f adalah fungsi semilinear dan dif adalah turunan dari fungsi
semilinear
3 h = (b-a)/n;
4 x = linspace(a, b, n+1);
5 for i= 1:n+1
6 k(i) = 1/(1-0.99*(x(i)ˆ2)*sin(50*pi*x(i))); 7 v(i) = 10;
8 end
9 muval(1) = 0.0; 10 for j = 2: n+1
11 increment_m = (v(j)/k(j) + v(j-1)/k(j-1))*0.5*h; 12 muval(j) = muval(j-1) + increment_m;
13 end
14 mu(1:n+1) = exp(-muval(1:n+1)); 15 kval(1) = 0.0;
16 for j=2:n+1
17 increment_k = (mu(j)/k(j)+ mu(j-1)/k(j-1))*(0.5)*h; 18 kval(j) = kval(j-1) + increment_k;
19 end 20
21 % G(i,j) adalah fungsi Green untuk kondisi batas
Dirichlet-Dirichlet
22 for j=1:n+1 23 for i=1:n+1
24 c = -(kval(n+1)-kval(j))/kval(n+1); 25 if (x(i)<x(j))
26 G(i,j) = -(c/mu(i))*kval(i);
27 else
28 G(i,j) = (1 + c)/mu(i)*(kval(n+1) - kval(i));
29 end
30 end 31 end 32
38 DG(i,j) = - c*mu(i)/k(i);
50 Niter = 15; %Iterasi Newton 51 id = eye(n+1); 57 ff(1:n+1) = f(u(1:n+1))*h; 58 ff(1) = ff(1)*0.5; 59 ff(n+1) = ff(n+1)*0.5; 60 for j = 2:n
61 g(j) = u(j) - ff*G(:,j) - k(1)*DG(1,j); 62 ja(j,:) = dif(u(j))*G(:,j)*h;
63 ja(j,1) = ja(j,1)*0.5; 64 ja(j,n+1) = ja(j,n+1)*0.5; 65 end
73 xlabel({'$x$'},'interpreter','latex')
Lampiran 3. Solusi Fungsi Green dengan Menggunakan Algoritma MCMC
1 function phi = greenmcmc(bc, xi, a, b, nx, k, v, ht, nt)
2 % bangkitkan koordinat 3 hx = (b-a)/nx;
4 x = linspace(a, b, nx+1);
5 %
6 % bangkitkan matriks diskritisasi operator diferensial.
7 A = zeros(nx +1);
8 kinterface = 0.5*(k(x(1:nx)) + k(x(2:nx+1))); 9 kinterface = kinterface/hx;
10 vinterface = 0.5*(v(x(1:nx)) + v(x(2:nx+1))); 11 for i = 2:nx
12 A(i,i) = kinterface(i-1)+ kinterface(i)+ vinterface(i); 13 end
14 for i = 1:nx
15 A(i,i+1) = -kinterface(i);
16 A(i+1,i) = A(i,i+1)- vinterface(i); 17 end
18 A = 0.5*ht*A; 19 AA = -A;
20 for i = 2:nx
21 A(i,i) = A(i,i) + hx; 22 AA(i,i) = hx + AA(i,i); 23 end
24 % left boundary condition 25 if (bc(1) == 1)
26 A(1,1) = 1; A(1,2) = 0; 27 AA(1,1) = -1; AA(1,2) = 0; 28
29 elseif (bc(1) == 2)
30 A(1,1) = 0.5*hx + 0.5 * ht * (kinterface(1) + ( vinterface(1)- v(x(1))));
31 AA(1,1) = - A(1,1) + hx; 32
33 elseif (bc(1) == 3)
38 % right boundary condition 39 if (bc(2) == 1)
40 A(nx+1,nx+1) = 1; A(nx+1,nx) = 0; 41 AA(nx+1,nx+1) = -1; AA(nx+1,nx) = 0;
42 elseif (bc(2) == 2)
43 A(nx+1,nx+1) = 0.5*hx + 0.5* ht* (kinterface(nx)+ v(x(nx +1)));
44 AA(nx+1,nx+1) = - A(nx+1,nx+1) + hx; 45
46 elseif (bc(2) ==3)
47 A(nx+1, nx+1) = 0.5*hx + 0.5* ht* kinterface(nx); 48 AA(nx+1,nx+1) = -A(nx+1,nx+1) + hx;
49 end 50
51 A = sparse(A);
52 %
53 % MCMC dengan Metropolis-Hasting 54 if (bc(1) == 1)
55 f(1,1) = 0.0; 56 else
57 f(1,1) = randn(1,1)*sqrt(hx*ht); 58 end
59 f(2:nx,1) = randn(nx-1,1)*sqrt(2*hx*ht); 60 if (bc(2) == 1)
61 f(nx+1,1) = 0.0; 62 else
63 f(nx+1,1) = randn(1,1)*sqrt(hx*ht); 64 end
65 Ux(:,1) = A \ f; 66 for l = 2:nt 67 %white noise 68 if (bc(1) == 1) 69 f(1,1) = 0.0; 70 else
71 f(1,1) = randn(1,1)*sqrt(hx*ht) ; 72 end
73 f(2:nx,1) = randn(nx-1,1)*sqrt(2*hx*ht); 74 if (bc(2) == 1)
75 f(nx+1,1) = 0.0; 76 else
79 f = f + AA*Ux(:,l-1); 80 u = A \ f;
81 R = u(xi) - Ux(xi,l-1); 82 alpha = exp(min(0,R)); 83 if (rand<alpha)
84 Ux(:,l) = u; % accept 85 else
86 Ux(:,l) = Ux(:,l-1); % reject, jadi pakai yang sebelumnya
.
87 end 88 end
89 % Hitung rata-rata
90 phi = sum(Ux,2)/nt; %ini fungsi Greenya. 91 size(phi)
92 hold on
93 plot(x, phi,'r ');
94 xlabel({'$x$'},'interpreter','latex')