Week-05 (Finite Difference Methods)
yang akan dibahas - Metode Beda Hingga untuk Masalah Linear
- Metode Beda Hingga untuk Masalah Nonlinear
Metode ini digunakan untuk mengaproksimasi masalah linear dalam bentuk:
\[\begin{gathered} y^{\prime \prime}=p(x) y^{\prime}+q(x) y+r(x), \quad a \leq x \leq b \\ y(a)=\alpha, y(b)=\beta \end{gathered}\] \[\begin{gathered} w_{0}=\alpha, \quad w_{n+1}=\beta \\ -\left(1+\frac{h}{2} p\left(x_{i}\right)\right) w_{i-1}+\left(2+h^{2} q\left(x_{i}\right)\right) w_{i}-\left(1-\frac{h}{2} p\left(x_{i}\right)\right) w_{i+1}=-h^{2} r\left(x_{i}\right) \end{gathered}\]Bentuk tersebut dapat dibuat sebagai suatu SPL:
\[ A \mathbf{w}=\mathbf{b} \]
\(\mathbf{w}=\left[\begin{array}{c}w_{1} \\ w_{2} \\ \vdots \\ w_{N-1} \\ w_{N}\end{array}\right], \quad\) and \(\quad \mathbf{b}=\left[\begin{array}{c}-h^{2} r\left(x_{1}\right)+\left(1+\frac{h}{2} p\left(x_{1}\right)\right) w_{0} \\ -h^{2} r\left(x_{2}\right) \\ \vdots \\ -h^{2} r\left(x_{N-1}\right) \\ -h^{2} r\left(x_{N}\right)+\left(1-\frac{h}{2} p\left(x_{N}\right)\right) w_{N+1}\end{array}\right]\).
SPL tersebut akan diselesaikan dengan metode faktorisasi Crout (lihat algoritma 6.7). (basicly ini nyari inverse A secara linear, makanya runtime dari algortima ini adalah \(O(n)\))
Algoritma dari metode beda hingga linear:
function [xt,w]=linfdm(p,q,r,a_boundary,b_boundary,alpha,beta,n)
=(b_boundary-a_boundary)/(n+1); %stepsize
h=zeros(n,1); %diagonal sistem persamaannya
a=zeros(n,1); % right diagonal sistem persamaannya
b=zeros(n,1); %left diagonal sistem persamaannya
c=zeros(n,1); %vektor b (Ay=b) pada sistem persamaannya
d=zeros(n,1); % main diagonal of lower triangle matrix
l=zeros(n,1); %right diagonal of upper triangle matrix
u= zeros(n,1); %solution of Lz=b
z=zeros(n+1,1); %solusi aproksimasi dengan linear fdm
w=[a_boundary:h:b_boundary]; %mesh_point
xt=a_boundary+h;
x
%konstruksi matrix tridiagonalnya
1)=2+(h^2)*q(x);
a(1)= -1+(h/2)*p(x);
b(1)=-h^2*r(x) +(1+(h/2)*p(x))*alpha;
d(
for i = 2:n-1
= a_boundary+i*h;
xi)=2+h^2*q(x); %diagonal
a(i)=-1+(h/2)*p(x);
b(i)=-1-(h/2)*p(x);
c(i)=-h^2*r(x);
d(endfor
=b_boundary-h;
x=2+h^2*q(x);
a(n)=-1-(h/2)*p(x);
c(n)=-h^2*r(x)+(1-(h/2)*p(x))*beta;
d(n)
%matriks tridiagonalnya sudah didapatkan,
%akan diselesaikan dengan LU Decomposition (crout factorization)
1)= a(1);
l(1)=b(1)/a(1);
u(1)=d(1)/l(1);
z(
for i= 2:n-1
i)=a(i)-c(i)*u(i-1);
l(i)=b(i)/l(i);
u(i)=(d(i)-c(i)*z(i-1))/l(i);
z(
endfor
=a(n)-c(n)*u(n-1);
l(n)=(d(n)-c(n)*z(n-1))/l(n);
z(n)
%konstruksi akhir w-nya
+1)=beta;
w(n=z(n);
w(n)for i = n-1:-1:1
i)=z(i)-u(i)*w(i+1);
w(endfor
=[alpha;w];
w=transpose(xt);
xt
endfunction
Akan kita uji dengan masalah syarat batas:
\[ \begin{aligned} y^{\prime \prime} & =-\frac{4}{x} y^{\prime}-\frac{2}{x^2} y+\frac{2 \ln x}{x^2}, \quad 1 \leq x \leq 2 \\ y(1) & =\frac{1}{2}, \quad y(2)=\ln 2 \end{aligned} \] Solusi eksak: \[ y(x)=\frac{4}{x}-\frac{2}{x^2}+\ln x-\frac{3}{2} \]
= @(x) (-4/x); %function p(x)
p= @(x) (-2/x^2);%function q(x)
q=@(x) 2*log(x)/(x^2); %function r(x)
r=1; %batas kiri domain
a_boundary=2; %batas kanan domain
b_boundary=19; %banyaknya partisi (agar h=0.05 pilih n=19)
n=0.5; %y(a)=alpha
alphabeta=log(2); %y(b)=beta
,w]=linfdm(p,q,r,a_boundary,b_boundary,alpha,beta,n) %memangil fungsinya
[x_grid
=@(x)4./x -2./(x.^2) +log(x)-1.5;
f_anal=f_anal(x_grid)
sol_analerror=abs(sol_anal-w);
,w,sol_anal,error]
[x_grid
%bikint tabel dan grafiknya :D
fplot(f_anal, [a_boundary,b_boundary],'b')
hold on;
scatter(x_grid,w,'r')
legend('solusi analitik', 'solusi linear FDM');
legend("location", "northwest");
Metode ini digunakan untuk mengaproksimasi masalah linear dalam bentuk:
\[ \begin{gathered} y^{\prime \prime}=f\left(x, y, y^{\prime}\right), \quad a \leq x \leq b \\ y(a)=\alpha, y(b)=\beta \end{gathered} \]
Aproksimasi menggunakan metode ini serupa dengan saat menggunakan metode beda hingga linear, dengan perbedaan kita juga menambahkan metode Newton dalam penyelesaiannya.
Algoritma dari metode beda hingga nonlinear:
function [t_grid,w]=nonlinear_FDM_naive(f,f_y,f_yprime,a,b,n,alpha,beta,max_iter,TOL)
=(b-a)/(n+1); %sepsize
h=zeros(n,1); %vektor solusi aproksimasi
w=[a:h:b]; %mesh_poitnya
t_gridJ=zeros(n,n); %matriks jacobian
=zeros(n,1); %vektor fungsi F=(f_1,f_2,...,f_n) yang dievaluasi di x_k
F
for i=1:n %inisialisasi solusi awal
i)=alpha+i*(beta-alpha)/(b-a)*h;
w(endfor
=1;
kwhile k<=max_iter %lakukan iterasi jika masih belum didapat kriteria stopnya
%solve nonlinear sistem tersebut dengan metode newton
=a+h;
x%kontruksi matriks Jacobian, dan vektor F-nya
=(w(2)-alpha)/(2*h);
tJ(1,1)=2+h^2*f_y(x,w(1),t); %main diagoanal
J(1,2)=-1+(h/2)*f_yprime(x,w(1),t); %right diagonal
1)=(2*w(1)-w(2)-alpha+h^2*f(x,w(1),t));
F(for i =2:n-1
=a+i*h;
x=(w(i+1)-w(i-1))/(2*h);
tJ(i,i)=2+h^2*f_y(x,w(i),t); %main diagoanal
J(i,i+1)=-1+(h/2)*f_yprime(x,w(i),t); %main diagoanal
J(i,i-1)=-1-(h/2)*f_yprime(x,w(i),t); %left diagoanal
i)=(2*w(i)-w(i+1)-w(i-1)+h^2*f(x,w(i),t));
F(endfor
=b-h;
x=(beta-w(n-1))/(2*h);
tJ(n,n)=2+h^2*f_y(x,w(n),t); %main diagonal
J(n,n-1)=-1-(h/2)*f_yprime(x,w(n),t); %right diagonal
=(2*w(n)-w(n-1)-beta+h^2*f(x,w(n),t));
F(n)
=inverse(J)*F; %vector v adalah product dari J^-1 F
v= w-v; % lakukan update nilai pada w
w
if norm(v,2)<= TOL %kriteria stop jika norm(v)<=toleransinya
break;
else
=k+1; %jika belum memenuhi kriteria stop terus lanjut iterasinya (memperbaiki nilai w)
kendif
endwhile
=[alpha ; w ; beta]; %konstruksi akhir w
w=transpose(t_grid); % %transpose meshpoint
t_grid% untuk konsistensi dimensi saja
endfunction
- Gunakan metode beda hingga nonlinear dengan \(h=0.1\) dan toleransi \(10^{-4}\) untuk mengaproksimasi BVP berikut: \[ \begin{aligned} y^{\prime \prime} & =y^{\prime}+2(y-\ln x)^3-\frac{1}{x}, \quad 2 \leq x \leq 3 \\ y(2) & =\frac{1}{2}+\ln 2, \quad y(3)=\frac{1}{3}+\ln 3 \end{aligned} \] Solusi eksak: \[ y(x)=\frac{1}{x}+\ln x \]
=@(x,y,yp) yp+2*(y-log(x))^3-1/x ; %fungsi f pada y=f(x,y,y')
f=@(x,y,yp) 6*(y-log(x))^2; %turunan fungsi f terhadap y
f_y=@(x,y,yp) 1; %turunan fungsi f terhadap yprime
f_yp=2; %left boundary
a=3; %right boundary
b=0.5+log(2); %y(a)
alphabeta=1/3+ log(3); %y(b)
=9; %banyaknya partisi (pilih n=9 sehingga h=0.1)
n=30; %masksimal iterasi newton methodnya
maxiter=10^(-4); %toleransi nilai (untuk kriteria stop)
TOL
%memanggil fungsi nonlinear_FDM_naive
,w]=nonlinear_FDM_naive(f,f_y,f_yp,a,b,n,alpha,beta,maxiter,TOL)
[x_grid= @(x) 1./x +log(x); %sol analitik
f_anal
%membuat grafiknya
fplot(f_anal, [a,b],'b')
hold on;
scatter(x_grid,w,'r')
legend('solusi analitik', 'solusi linear FDM');
legend("location", "northwest");
%membuat tabel saja.
=f_anal(x_grid); %sol analitik di meshpoint
sol_analerror=abs(w-sol_anal); %error
,w,sol_anal,error] [x_grid