# PRAKTIKUM 12
`Solusi Persamaan Differensial Biasa (PDB) 1`

<hr style="border:2px solid black"> </hr>

# Metode Euler
Metode Euler merupakan metode paling klasik yang digunakan untuk menghitung solusi numerik dari persamaan differensial biasa dengan masalah nilai awal. Metode Euler memiliki kompleksitas galat $ O(h) $. Bentuk umum iterasi __metode Euler__ adalah

\begin{equation}\label{eq:12 euler}
t_{k+1} = t_k+h\ ,
\ \ \ \ \ 
y_{k+1}=y_k+h f(t_k,y_k)
\ \ \ \ \ 
\text{untuk }
k=0,1,\dots, M-1
\end{equation}


```julia
#%METODE EULER
# sol = euler(f,a,b,y0,M)
# Input  : f    -> fungsi f(t,y)
#          a,b  -> batas ujung selang I(t) : a<=t<=b
#          y0   -> nilai awal y(a)=y0
#          M    -> banyaknya sub-interval
# Output : sol  -> solusi PD, sol=[T,Y]
function euler(f,a,b,y0,M)
    M = Int(M)
    h = (b-a)/M;
    T = a:h:b;
    Y = Array{Float64}(undef,length(T),1)
    Y[1] = y0;
    # Mulai langkah iterasi euler
    for k = 1:M
        # Rumus iterasi euler
        Y[k+1] = Y[k]+h*f(T[k],Y[k])
    end
    sol = [T Y]
end
```

### Contoh 1
Diberikan persamaan differensial

$$ \dfrac{dy}{dt} = \dfrac{t-y}{2} ,\ \text{ dengan } y(0)=1 $$

Berikut merupakan langkah-langkah untuk menghitung solusi numerik dari persamaan di atas dengan $ h=1/2 $ dan $ h=1/4 $ dan galat hampiran terhadap solusi eksaknya, yaitu $ y(t)=3e^{-t/2}-2+t $ menggunakan metode Euler pada interval $[0,3]$.


```julia
a = 0;
b = 3;
f(t,y) = (t-y)/2;
y0 = 1;
h = 1/2;
M = (b-a)/h;
sol1 = euler(f,a,b,y0,M)
```


```julia
h = 1/4;
M = (b-a)/h;
sol2 = euler(f,a,b,y0,M)
```


```julia
using Plots
```


```julia
y(t) = 3*exp(-t/2)-2+t;
t1 = sol1[:,1];
y1 = sol1[:,2];
t2 = sol2[:,1];
y2 = sol2[:,2];
t = a:0.01:b
plot(t1,y1,label="solusi dengan h = 0.5",legend=:topleft)
plot!(t2,y2,label="solusi dengan h=0.25")
plot!(t,y.(t),label="solusi eksak") 
title!("solusi PDB dengan metode Euler")
```


```julia
y(t) = 3*exp(-t/2)-2+t;
e1 = abs.(y1 - y.(t1));
e2 = abs.(y2 - y.(t2));
plot(t1,e1,label="galat dengan h = 0.5",legend=:bottomright)
plot!(t2,e2,label="galat dengan h=0.25") 
title!("galat solusi PDB dengan metode Euler")
```

Berdasarkan hasil penghitungan galat, nilai galat akhir global untuk hampiran dengan $ h=1/2 $ dan $ h=1/4 $ masing-masing adalah $ 0.13545 $ dan $ 0.065139 $. Dengan demikian, kompleksitas komputasi untuk metode Euler adalah $ O(h) $.

# Metode Heun
Metode Heun merupakan pengembangan dari metode Euler. Metode Heun memiliki kompleksitas galat yang lebih baik daripada metode Euler, yaitu $ O(h^2) $. Bentuk umum iterasi __metode Heun__ adalah
\begin{align}\label{eq:12 heun}
\begin{split}
t_{k+1}&=t_k+h \\
p_{k+1}&=y_k+h\ f(t_k,y_k) \\
y_{k+1}&=y_k+\dfrac{h}{2}(f(t_k,y_k)+f(t_{k+1},p_{k+1}))
\end{split}
\end{align}


```julia
#%%METODE HEUN
#% sol = heun(f,a,b,y0,M)
#% Input  : f    -> fungsi f(t,y)
#%          a,b  -> batas ujung selang I(t) : a<=t<=b
#%          y0   -> nilai awal y(a)=y0
#%          M    -> banyaknya sub-interval
#% Output : sol  -> solusi PD, sol=[T,Y]
function heun(f,a,b,y0,M)
    M = Int(M)
    h = (b-a)/M;
    T = a:h:b;
    Y = Array{Float64}(undef,length(T),1)
    P = Array{Float64}(undef,length(T),1)
    Y[1] = y0;
    # Mulai langkah iterasi Heun
    for k = 1:M
        #% Rumus iterasi Heun
        P[k+1]=Y[k]+h*f(T[k],Y[k]);
        Y[k+1]=Y[k]+h/2*(f(T[k],Y[k])+f(T[k+1],P[k+1]));
    end
    sol = [T Y];
end

```

### Contoh 2
Diberikan persamaan differensial
$$ \dfrac{dy}{dt} = \dfrac{t-y}{2} ,\ \text{ dengan } y(0)=1 $$
Berikut merupakan langkah-langkah untuk menghitung solusi numerik dari persamaan di atas dengan $ h=1/2 $ dan $ h=1/4 $ dan galat hampiran terhadap solusi eksaknya, yaitu $ y(t)=3e^{-t/2}-2+t $ menggunakan metode Heun.


```julia
a = 0;
b = 3;
f(t,y) = (t-y)/2;
y0 = 1;
h = 1/2;
M = (b-a)/h;
sol1 = heun(f,a,b,y0,M)
```


```julia
h = 1/4;
M = (b-a)/h;
sol2 = heun(f,a,b,y0,M)
```


```julia
y(t) = 3*exp(-t/2)-2+t;
t1 = sol1[:,1];
y1 = sol1[:,2];
t2 = sol2[:,1];
y2 = sol2[:,2];
t = a:0.01:b
plot(t1,y1,label="solusi dengan h = 0.5",legend=:topleft)
plot!(t2,y2,label="solusi dengan h = 0.25")
plot!(t,y.(t),label="solusi eksak") 
title!("solusi PDB dengan metode Heun")
```


```julia
y(t) = 3*exp(-t/2)-2+t;
e1 = abs.(y1 - y.(t1));
e2 = abs.(y2 - y.(t2));
plot(t1,e1,label="galat dengan h = 0.5",legend=:bottomright)
plot!(t2,e2,label="galat dengan h=0.25") 
title!("galat solusi PDB dengan metode Heun")
```

Berdasarkan hasil penghitungan galat, nilai galat akhir global untuk hampiran dengan $ h=1/2 $ dan $ h=1/4 $ masing-masing adalah $ 0.012731 $ dan $ 0.0028783 $. Dengan demikian, kompleksitas komputasi untuk metode Heun adalah $ O(h^2) $. 

# Metode Deret Taylor
Metode Euler dan Heun yang telah dipelajari masih kompleksitas yang rendah yaitu $ O(h) $ dan $ O(h^2) $. Dengan memanfaatkan teorema deret Taylor, kompleksitas komputasi untuk mencari solusi numerik persamaan differensial dapat ditingkatkan sesuai dengan orde yang dipilih. Pada praktikum ini, akan digunakan deret Taylor orde-4 untuk mencari solusi numerik persamaan differensial dengan kompleksitas komputasi $ O(h^4) $.

Bentuk umum dari metode Taylor ordo $ N $ adalah

\begin{equation}\label{eq:12 taylor}
y_{k+1}=y_k+d_1h+\dfrac{d_2h^2}{2!}+\dfrac{d_3h^3}{3!}+\dots+\dfrac{d_Nh^N}{N!}
\end{equation}

dengan $ d_j=y^{(j)}(t_k) $ untuk $ j=1,2,\dots,N $ pada setiap langkah $ k=0,1,\dots,M-1 $.


```julia
function taylor(df,a,b,y0,M)
  M = Int(M)
  h = (b-a)/M;
  T = a:h:b;
  Y = Array{Float64}(undef,length(T),1) 
  Y[1]=y0;
  for j = 1:M
    D = df(T[j],Y[j]);
    Y[j+1]=Y[j]+h*(D[1]+h*(D[2]/2+h*(D[3]/6+h*D[4]/24)));
  end
  sol = [T Y];
end
```

### Contoh 3
Diberikan persamaan differensial

$$ \dfrac{dy}{dt} = \dfrac{t-y}{2} ,\ \text{ dengan } y(0)=1 $$

Berikut merupakan langkah-langkah untuk menghitung solusi numerik dari persamaan di atas dengan $ h=1/2 $ dan $ h=1/4 $ dan galat hampiran terhadap solusi eksaknya, yaitu $ y(t)=3e^{-t/2}-2+t $ menggunakan metode deret Taylor orde-4.

**Langkah 1**. Pendefinisian fungsi `df` yang berisi $ y',\ y'',\ y^{(3)},$ dan $y^{(4)} $.


Perhatikan bahwa

$\begin{align*}
	y'(t) &= \dfrac{t-y}{2} \\
	y^{(2)}(t) &= \dfrac{d}{dt}\left( \dfrac{t-y}{2} \right) =\dfrac{1-y'}{2}=\dfrac{2-t+y}{4}\\
	y^{(3)}(t) &= \dfrac{d}{dt}\left( \dfrac{2-t+y}{4} \right) =\dfrac{0-1+y'}{4}=\dfrac{-2+t-y}{8}\\
	y^{(4)}(t) &= \dfrac{d}{dt}\left( \dfrac{-2+t-y}{8} \right) =\dfrac{-0+1-y'}{8}=\dfrac{2-t+y}{16}&&
\end{align*}$

Dengan demikian diperoleh fungsi `df` yaitu


```julia
function df(t,y)
	y1 = (t-y)/2;
	y2 = (2-t+y)/4;
	y3 = (-2+t-y)/8;
	y4 = (2-t+y)/16;
	z = [y1,y2,y3,y4];
end 
```

**Langkah 2**. Penghitungan solusi PD pada selang $ [0,3] $ dengan ukuran langkah $ h=1/2 $ dan $ 1/4 $ menggunakan metode deret Taylor orde-4.


```julia
a = 0;
b = 3; 
y0 = 1;
h = 1/2;
M = (b-a)/h;
sol1 = taylor(df,a,b,y0,M)
```


```julia
h = 1/4;
M = (b-a)/h;
sol2 = taylor(df,a,b,y0,M)
```


```julia
y(t) = 3*exp(-t/2)-2+t;
t1 = sol1[:,1];
y1 = sol1[:,2];
t2 = sol2[:,1];
y2 = sol2[:,2];
t = a:0.01:b
plot(t1,y1,label="solusi dengan h = 0.5",legend=:topleft)
plot!(t2,y2,label="solusi dengan h = 0.25")
plot!(t,y.(t),label="solusi eksak") 
title!("solusi PDB dengan metode deret Taylor")
```


```julia
y(t) = 3*exp(-t/2)-2+t;
e1 = abs.(y1 - y.(t1));
e2 = abs.(y2 - y.(t2));
plot(t1,e1,label="galat dengan h = 0.5",legend=:right)
plot!(t2,e2,label="galat dengan h=0.25") 
title!("galat solusi PDB dengan metode deret Taylor")
```

# Metode Runge-Kutta Orde-4
Salah satu metode yang populer dan sering digunakan untuk menyelesaikan masalah PDB adalah metode Runge-Kutta. Metode ini memiliki kompleksitas komputasi sesuai orde yang digunakan. Untuk Runge-Kutta orde-4, kompleksitas galat yang dihasilkan adalah $ O(h^4) $.

Kelemahan terbesar mencari solusi numerik menggunakan deret Taylor adalah untuk menghasilkan metode dengan kompleksitas $ O(h^4) $, dibutuhkan persamaan fungsi turunan hingga orde ke-4. Sementara itu, banyak persamaan differensial yang sulit untuk dicari turunannya. Salah satu metode yang dapat mengatasinya adalah metode Runge-Kutta orde-4. Metode ini memiliki kompleksitas komputasi $ O(h^4) $ tanpa harus mendefinisikan fungsi turunan hingga orde-4.

Bentuk umum metode Runge-Kutta ordo 4 untuk menyelesaikan masalah nilai awal $ y'(t)=f(t,y) $ pada $ [t_0,t_M] $ adalah

\begin{equation}\label{eq:12 rk}
y_{k+1}=y_k+\dfrac{h}{6}(f_1+2f_2+2f_3+f_4)
\end{equation}
dengan
\begin{align}\label{eq:12 rk 1}
\begin{split}
f_1 &= f(t_k,y_k) \\
f_2 &= f\left( t_k+\dfrac{h}{2},\ y_k+\dfrac{h}{2}f_1 \right) \\
f_3 &= f\left( t_k+\dfrac{h}{2},\ y_k+\dfrac{h}{2}f_2 \right) \\
f_4 &= f\left( t_k+h,\ y_k+h\ f_3 \right) \\
\end{split}
\end{align}


```julia
#%%METODE RUNGE-KUTTA ORDE 4
#% sol = rungekutta(f,a,b,y0,M)
#% Input  : f    -> fungsi f(t,y)
#%          a,b  -> batas ujung selang I(t) : a<=t<=b
#%          y0   -> nilai awal y(a)=y0
#%          M    -> banyaknya sub-interval
#% Output : sol  -> solusi PD, sol=[T,Y]
function rungekutta(f,a,b,y0,M)
    M = Int(M)
    h = (b-a)/M;
    T = a:h:b;
    Y = Array{Float64}(undef,length(T),1) 
    Y[1] = y0;
    for k = 1:M
        f1 = f(T[k]     ,Y[k]        );
        f2 = f(T[k]+h/2 ,Y[k]+f1*h/2 );
        f3 = f(T[k]+h/2 ,Y[k]+f2*h/2 );
        f4 = f(T[k]+h   ,Y[k]+f3*h   );
        Y[k+1] = Y[k] + h/6*(f1+2*f2+2*f3+f4);
    end
    sol = [T Y];
end

```

### Contoh 4
Diberikan persamaan differensial
$$ \dfrac{dy}{dt} = \dfrac{t-y}{2} ,\ \text{ dengan } y(0)=1 $$
Berikut merupakan langkah-langkah untuk menghitung solusi numerik dari persamaan di atas dengan $ h=1/2 $ dan $ h=1/4 $ dan galat hampiran terhadap solusi eksaknya, yaitu $ y(t)=3e^{-t/2}-2+t $ menggunakan metode Runge-Kutta orde-4.


```julia
a = 0;
b = 3;
f(t,y) = (t-y)/2;
y0 = 1;
h = 1/2;
M = (b-a)/h;
sol1 = rungekutta(f,a,b,y0,M)
```


```julia
h = 1/4;
M = (b-a)/h;
sol2 = rungekutta(f,a,b,y0,M)
```


```julia
y(t) = 3*exp(-t/2)-2+t;
t1 = sol1[:,1];
y1 = sol1[:,2];
t2 = sol2[:,1];
y2 = sol2[:,2];
t = a:0.01:b
plot(t1,y1,label="solusi dengan h = 0.5",legend=:topleft)
plot!(t2,y2,label="solusi dengan h = 0.25")
plot!(t,y.(t),label="solusi eksak") 
title!("solusi PDB dengan metode Runge-Kutta")
```


```julia
y(t) = 3*exp(-t/2)-2+t;
e1 = abs.(y1 - y.(t1));
e2 = abs.(y2 - y.(t2));
plot(t1,e1,label="galat dengan h = 0.5",legend=:right)
plot!(t2,e2,label="galat dengan h=0.25") 
title!("galat solusi PDB dengan metode Runge-Kutta")
```

Berdasarkan hasil penghitungan galat, nilai galat akhir global untuk hampiran dengan $ h=1/2 $ dan $ h=1/4 $ masing-masing adalah $ 0.000040281 $ dan $ 0.0000022674 $. Dengan demikian, kompleksitas komputasi untuk metode Rungke-Kutta Orde-4 adalah $ O(h^4) $.

<hr style="border:2px solid black"> </hr>

# Soal Latihan
Kerjakan soal berikut pada saat kegiatan praktikum berlangsung.

`Nama: ________`

`NIM: ________`

### Soal 1
Diberikan persamaan differensial
$$ \dfrac{dy}{dt} = -y-2t-1 ,\ \text{ dengan } y(0)=2 $$
Gunakan metode Euler untuk menyelesaikan PD di atas untuk $ h=1/2 $, $ h=1/4 $ dan $ h=1/8 $, kemudian bandingkan dengan solusi eksaknya adalah $ y(t)=e^{-t}-2t+1 $ dan hitung nilai galat akhir global masing-masing hampiran dengan langkah-langkah seperti pada **Contoh 1**.


```julia

```

### Soal 2
Diberikan persamaan differensial

$$ \dfrac{dy}{dt} = -y-2t-1 ,\ \text{ dengan } y(0)=2 $$

Gunakan metode Heun untuk menyelesaikan PD di atas untuk $ h=1/2 $, $ h=1/4 $ dan $ h=1/8 $, kemudian bandingkan dengan solusi eksaknya adalah $ y(t)=e^{-t}-2t+1 $ dan hitung nilai galat akhir global masing-masing hampiran dengan langkah-langkah seperti pada **Contoh 2**.


```julia

```

### Soal 3
Diberikan persamaan differensial

$$ \dfrac{dy}{dt} = -y-2t-1 ,\ \text{ dengan } y(0)=2 $$

Gunakan metode deret Taylor Orde-4 untuk menyelesaikan PD di atas untuk ukuran langkah $ h=1/2 $, $ h=1/4 $ dan $ h=1/8 $, kemudian bandingkan dengan solusi eksaknya yaitu $ y(t)=e^{-t}-2t+1 $ dan hitung pula nilai galat akhir global masing-masing hampiran dengan langkah-langkah seperti pada **Contoh 3**.


```julia

```

### Soal 4
Diberikan persamaan differensial
$$ \dfrac{dy}{dt} = -y-2t-1 ,\ \text{ dengan } y(0)=2 $$
Gunakan metode Runge-Kutta Orde-4 untuk menyelesaikan PD di atas untuk ukuran langkah $ h=1/2 $, $ h=1/4 $ dan $ h=1/8 $, kemudian bandingkan dengan solusi eksaknya yaitu $ y(t)=e^{-t}-2t+1 $ dan hitung nilai galat akhir global masing-masing hampiran dengan langkah-langkah seperti pada **Contoh 4**.


```julia

```

d7fe8402e0b97b6607819d7bc20a9560fede88cc
ipynb
Jupyter Notebook
notebookpraktikum/Praktikum 12.ipynb
mkhoirun-najiboi/metnum.jl
a6e35d04dc277318e32256f9b432264157e9b8f4
MIT
notebookpraktikum/Praktikum 12.ipynb
mkhoirun-najiboi/metnum.jl
a6e35d04dc277318e32256f9b432264157e9b8f4
MIT
notebookpraktikum/Praktikum 12.ipynb
mkhoirun-najiboi/metnum.jl
a6e35d04dc277318e32256f9b432264157e9b8f4
MIT
Qwen/Qwen-72B
1. YES
2. YES