Modul 4 Praktikum Pesamaan Diferensial Biasa: Sistem PDB dan PDB Orde Tinggi
Kembali ke Praktikum Persamaan Diferensial Biasa
Pendahuluan Sistem PDB secara Numerik
Sebuah sistem orde \(m\) memiliki bentuk umum
\[ \begin{align*} u'_1 &= f_1(t,u_1,u_2,...,u_m)\\ u'_2 &= f_2(t,u_1,u_2,...,u_m)\\ \ldots\\ u'_m &= f_m(t,u_1,u_2,...,u_m) \end{align*} \]
dengan
\(a \leq t \leq b\)
dan nilai awal diberikan oleh
\(u_1(a)=a_1, u_2(a)=a_2, ..., u_m(a)=a_m\)
Bentuk umum algoritma metode untuk sistem PDB orde 1 kurang lebih adalah
for i = 1 : N do
for R in (rumus-rumus untuk iterasi ke-i) do
for j = 1 : m do
Hitung R dengan f_j
endfor
endfor
endfor
Apabila ada lima rumus (seperti dalam metode Runge-Kutta orde 4), algoritma untuk sistem menjadi
for i = 1 : N do
for j = 1 : m do
Hitung Rumus1 dengan f_j
endfor
for j = 1 : m do
Hitung Rumus2 dengan f_j
endfor
for j = 1 : m do
Hitung Rumus3 dengan f_j
endfor
for j = 1 : m do
Hitung Rumus4 dengan f_j
endfor
for j = 1 : m do
Hitung Rumus5 dengan f_j
endfor
endfor
Apabila misalnya rumus pada iterasi 1, 2, 3 berbeda dengan rumus pada iterasi 4+ (seperti untuk metode Adams predictor-corrector orde 4), algoritma untuk sistem bisa seperti berikut
--- Bagian Tebakan ---
for i = 1 : 3 do
for j = 1 : m do
Hitung Rumus1 dengan f_j
endfor
for j = 1 : m do
Hitung Rumus2 dengan f_j
endfor
for j = 1 : m do
Hitung Rumus3 dengan f_j
endfor
for j = 1 : m do
Hitung Rumus4 dengan f_j
endfor
for j = 1 : m do
Hitung Rumus5 dengan f_j
endfor
endfor
--- Bagian Utama ---
for i = 4 : N do
for j = 1 : m do
Hitung Rumus1 dengan f_j
endfor
for j = 1 : m do
Hitung Rumus2 dengan f_j
endfor
endfor
Metode Runge-Kutta untuk Sistem PDB
Pada bagian ini, akan dibahas mengenai metode Runge-Kutta orde 4 untuk menyelesaikan sistem persamaan diferensial biasa. Berikut merupakan kode dari metode Runge-Kutta untuk sistem persamaan diferensial biasa pada Octave yang perlu disimpan pada function file.
Sistem Dua Persamaan
function [t, w1, w2] = rko4_sys2(f1, f2, a, b, N, alph1, alph2)
h = (b - a)/N;
t = w1 = w2 = [];
t(1) = a;
w1(1) = alph1;
w2(1) = alph2;
for i = 1:N
k11 = h * f1(t(i), w1(i), w2(i));
k12 = h * f2(t(i), w1(i), w2(i));
k21 = h * f1((t(i)+(h/2)), (w1(i)+(k11/2)), (w2(i)+(k12/2)));
k22 = h * f2((t(i)+(h/2)), (w1(i)+(k11/2)), (w2(i)+(k12/2)));
k31 = h * f1((t(i)+(h/2)), (w1(i)+(k21/2)), (w2(i)+(k22/2)));
k32 = h * f2((t(i)+(h/2)), (w1(i)+(k21/2)), (w2(i)+(k22/2)));
k41 = h * f1((t(i)+h), (w1(i)+k31), (w2(i)+k32));
k42 = h * f2((t(i)+h), (w1(i)+k31), (w2(i)+k32));
w1(i+1) = w1(i) + (k11 + 2*k21 + 2*k31 + k41)/6;
w2(i+1) = w2(i) + (k12 + 2*k22 + 2*k32 + k42)/6;
t(i+1) = a + i*h;
endfor
endfunctionSistem \(m\) Persamaan
function [t, w] = rko4_sysm(cell_f, a, b, N, alphas)
m = length(cell_f);
h = (b - a) / N;
t = zeros(N + 1, 1);
w = zeros(m, N + 1);
t(1) = a;
w(:, 1) = alphas;
k1 = zeros(m, 1);
k2 = zeros(m, 1);
k3 = zeros(m, 1);
k4 = zeros(m, 1);
for i = 1 : N
t(i + 1) = t(i) + h;
for j = 1 : m
k1(j) = h * cell_f{j}(t(i), w(:, i));
endfor
for j = 1 : m
k2(j) = h * cell_f{j}(t(i) + (h / 2), w(:, i) + (k1 / 2));
endfor
for j = 1 : m
k3(j) = h * cell_f{j}(t(i) + (h / 2), w(:, i) + (k2 / 2));
endfor
for j = 1 : m
k4(j) = h * cell_f{j}(t(i + 1), w(:, i) + k3);
endfor
for j = 1 : m
w(j, i + 1) = w(j, i) + (k1(j) + 2 * k2(j) + 2 * k3(j) + k4(j)) / 6;
endfor
endfor
endfunctionContoh Penggunaan
Misalkan diberikan masalah nilai awal
\[ \begin{gathered} u'_1 = -4u_1+3u_2+6,\\ u'_2 = -2.4u_1+1.6u_2+3.6,\\ u_1(0)=0,\, u_2(0)=0 \end{gathered} \]
Cari solusi numerik dengan menggunakan \(h = 0.1\) pada interval \(0\leq t \leq 0.5\).
Diketahui solusi eksak:
\[ \begin{gather} u_1(t)=-3.375e^{-2t}+1.875e^{-0.4t}+1.5\\ u_2(t) = -2.25e^{-2t}+2.25e^{-0.4t} \end{gather} \]
f1 = @(t, y1, y2) (-4*y1 + 3*y2 + 6);
f2 = @(t, y1, y2) (-2.4*y1 + 1.6*y2 + 3.6);
a = 0;
b = 0.5;
N = 5;
alph1 = 0;
alph2 = 0;
[t, w1, w2] = rko4_sys2(f1, f2, a, b, N, alph1, alph2);
sln1 = @(t) (-3.375*exp(-2*t) + 1.875*exp(-0.4*t) + 1.5);
sln2 = @(t) (-2.25*exp(-2*t) + 2.25*exp(-0.4*t));
u1_eks = sln1(t);
u2_eks = sln2(t);
[t', w1', w2', u1_eks', u2_eks']
hold on;
fplot(sln1, [a, b], 'r');
fplot(sln2, [a, b], 'b');
scatter(t, w1, 'r');
scatter(t, w2, 'b');
legend('u1', 'u2');
legend('location', 'northwest');>> coba_rko4_sys2
ans =
0 0 0 0 0
0.1000 0.5383 0.3196 0.5383 0.3196
0.2000 0.9685 0.5688 0.9685 0.5688
0.3000 1.3107 0.7607 1.3107 0.7607
0.4000 1.5813 0.9063 1.5813 0.9063
0.5000 1.7935 1.0144 1.7935 1.0144
f1 = @(t, u) (-4*u(1) + 3*u(2) + 6);
f2 = @(t, u) (-2.4*u(1) + 1.6*u(2) + 3.6);
a = 0;
b = 0.5;
N = 5;
alpha1 = 0;
alpha2 = 0;
[t, w] = rko4_sysm({f1, f2}, a, b, N, [alpha1, alpha2]);
sln1 = @(t) (-3.375*exp(-2*t) + 1.875*exp(-0.4*t) + 1.5);
sln2 = @(t) (-2.25*exp(-2*t) + 2.25*exp(-0.4*t));
u1_eksak = sln1(t);
u2_eksak = sln2(t);
[t, w', u1_eksak, u2_eksak]
hold on;
fplot(sln1, [a, b], 'r');
scatter(t, w(1, :), 'r'); % ambil baris pertama yaitu solusi u1
fplot(sln2, [a, b], 'b');
scatter(t, w(2, :), 'b'); % ambil baris kedua yaitu solusi u2
legend('u1 (eksak)', 'w1,i', 'u2 (eksak)', 'w2,i');
legend('location', 'northwest');ans =
0 0 0 0 0
0.1000 0.5383 0.3196 0.5383 0.3196
0.2000 0.9685 0.5688 0.9685 0.5688
0.3000 1.3107 0.7607 1.3107 0.7607
0.4000 1.5813 0.9063 1.5813 0.9063
0.5000 1.7935 1.0144 1.7935 1.0144
Kita juga bisa melakukan visualisasi dari masing-masing persamaan secara terpisah seperti berikut.
f1 = @(t, u) (-4*u(1) + 3*u(2) + 6);
f2 = @(t, u) (-2.4*u(1) + 1.6*u(2) + 3.6);
a = 0;
b = 0.5;
N = 5;
alpha1 = 0;
alpha2 = 0;
[t, w] = rko4_sysm({f1, f2}, a, b, N, [alpha1, alpha2]);
sln1 = @(t) (-3.375*exp(-2*t) + 1.875*exp(-0.4*t) + 1.5);
sln2 = @(t) (-2.25*exp(-2*t) + 2.25*exp(-0.4*t));
u1_eksak = sln1(t);
u2_eksak = sln2(t);
% menghitung error
err_w1 = abs(w(1, :)' - u1_eksak);
err_w2 = abs(w(2, :)' - u2_eksak);
err_w1_total = sum(err_w1); % norm L1 (taxicab/Manhattan)
err_w2_total = sum(err_w2); % norm L1 (taxicab/Manhattan)
% menampilkan tabel, termasuk error
format long;
disp("Tabel aproksimasi w1,i, solusi eksak u1(t), dan error:");
[t, w(1, :)', u1_eksak, err_w1]
disp("Tabel aproksimasi w2,i, solusi eksak u2(t), dan error:");
[t, w(2, :)', u2_eksak, err_w2]
disp("Error total (norm L1) untuk w1,i:");
disp(err_w1_total);
disp("Error total (norm L1) untuk w2,i:");
disp(err_w2_total);
format;
figure;
hold on;
fplot(sln1, [a, b], 'g');
scatter(t, w(1, :), 'r'); % ambil baris pertama yaitu solusi u1
title("Aproksimasi u1");
legend("u1 (eksak)", "w1,i (aproksimasi)")
legend('location', 'northwest');
figure;
hold on;
fplot(sln2, [a, b], 'g');
scatter(t, w(2, :), 'b'); % ambil baris kedua yaitu solusi u2
title("Aproksimasi u2");
legend("u2 (eksak)", "w2,i (aproksimasi)")
legend('location', 'northwest');Tabel aproksimasi w1,i, solusi eksak u1(t), dan error:
ans =
0 0 0 0
0.100000000000000 0.538255200000000 0.538263906772417 0.000008706772417
0.200000000000000 0.968498737529088 0.968512994104659 0.000014256575571
0.300000000000000 1.310719039205257 1.310736547027331 0.000017507822074
0.400000000000000 1.581265238963142 1.581284350416023 0.000019111452881
0.500000000000000 1.793507490120283 1.793527048067598 0.000019557947315
Tabel aproksimasi w2,i, solusi eksak u2(t), dan error:
ans =
0 0 0 0
0.100000000000000 0.319626240000000 0.319632043667268 0.000005803667268
0.200000000000000 0.568782173034906 0.568791675789742 0.000009502754836
0.300000000000000 0.760733131868175 0.760744801402045 0.000011669533870
0.400000000000000 0.906320617948927 0.906333355910227 0.000012737961300
0.500000000000000 1.014402416769883 1.014415451789714 0.000013035019830
Error total (norm L1) untuk w1,i:
7.914057025892873e-05
Error total (norm L1) untuk w2,i:
5.274893710444095e-05


Metode Taylor Orde \(n\) untuk Sistem Persamaan
Sebelumnya kita menggunakan metode Runge-Kutte, sekarang kita akan menggunakan metode Taylor orde \(n\) untuk menyelesaikan sistem \(m\) persamaan.
function [t, w] = taylor_sysm(cell_f, cell_fp, a, b, N, alphas)
m = length(cell_f);
h = (b - a) / N;
n = length(cell_fp{1}) + 1;
t = zeros(N + 1, 1);
w = zeros(m, N + 1);
t(1) = a;
w(:, 1) = alphas;
for i = 1 : N
t(i + 1) = t(i) + h;
for j = 1 : m
T = cell_f{j}(t(i), w(:, i));
for p = 2 : n
T += h^(p-1) * cell_fp{j}{p-1}(t(i), w(:, i)) / factorial(p);
endfor
w(j, i + 1) = w(j, i) + h * T;
endfor
endfor
endfunctionMisalkan diberikan masalah nilai awal yang sama
\[ \begin{gathered} u'_1 = -4u_1+3u_2+6,\\ u'_2 = -2.4u_1+1.6u_2+3.6,\\ u_1(0)=0,\, u_2(0)=0 \end{gathered} \]
Cari solusi numerik dengan menggunakan \(h = 0.1\) pada interval \(0\leq t \leq 0.5\).
Diketahui solusi eksak:
\[ \begin{gather} u_1(t)=-3.375e^{-2t}+1.875e^{-0.4t}+1.5\\ u_2(t) = -2.25e^{-2t}+2.25e^{-0.4t} \end{gather} \]
Perhatikan bahwa
\[ \begin{gather} u_1' = f_1(t, u_1, u_2) = -4u_1+3u_2+6\\ u_2' = f_2(t, u_1, u_2) = -2.4u_1+1.6u_2+3.6 \end{gather} \]
Metode Euler
Apabila kita tidak menyediakan turunan (terhadap \(t\)) dari \(f_1\) maupun dari \(f_2\), maka \(n=1\), yaitu metode Taylor orde \(n\) menjadi metode Euler.
f1 = @(t, u) (-4*u(1) +3*u(2) + 6);
turunan_f1 = {}; % tidak menyediakan turunan f1 terhadap t
f2 = @(t, u) (-2.4*u(1) + 1.6*u(2) + 3.6);
turunan_f2 = {}; % tidak menyediakan turunan f2 terhadap t
a = 0;
b = 0.5;
h = 0.1;
N = (b - a) / h;
alpha1 = 0;
alpha2 = 0;
[t, w] = taylor_sysm({f1, f2}, {turunan_f1, turunan_f2}, a, b, N, [alpha1, alpha2]);
sln1 = @(t) (-3.375*exp(-2*t) + 1.875*exp(-0.4*t) + 1.5);
sln2 = @(t) (-2.25*exp(-2*t) + 2.25*exp(-0.4*t));
u1_eksak = sln1(t);
u2_eksak = sln2(t);
% menghitung error
err_w1 = abs(w(1, :)' - u1_eksak);
err_w2 = abs(w(2, :)' - u2_eksak);
err_w1_total = sum(err_w1); % norm L1 (taxicab/Manhattan)
err_w2_total = sum(err_w2); % norm L1 (taxicab/Manhattan)
% menampilkan tabel, termasuk error
format long;
disp("Tabel aproksimasi w1,i, solusi eksak u1(t), dan error:");
[t, w(1, :)', u1_eksak, err_w1]
disp("Tabel aproksimasi w2,i, solusi eksak u2(t), dan error:");
[t, w(2, :)', u2_eksak, err_w2]
disp("Error total (norm L1) untuk w1,i:");
disp(err_w1_total);
disp("Error total (norm L1) untuk w2,i:");
disp(err_w2_total);
format;
figure;
hold on;
fplot(sln1, [a,b], 'r');
scatter(t, w(1, :), 'r');
title("u1");
legend("u1 (eksak)", "w1,i (aproksimasi)")
legend('location', 'northwest')
figure;
hold on;
fplot(sln2, [a,b], 'b');
scatter(t, w(2, :), 'b');
title("u2");
legend("u2 (eksak)", "w2,i (aproksimasi)")
legend('location', 'northwest')Tabel aproksimasi w1,i, solusi eksak u1(t), dan error:
ans =
0 0 0 0
0.100000000000000 0.600000000000000 0.538263906772417 0.061736093227583
0.200000000000000 1.068000000000000 0.968512994104659 0.099487005895341
0.300000000000000 1.430880000000000 1.310736547027331 0.120143452972669
0.400000000000000 1.710124800000000 1.581284350416023 0.128840449583977
0.500000000000000 1.922903808000000 1.793527048067598 0.129376759932402
Tabel aproksimasi w2,i, solusi eksak u2(t), dan error:
ans =
0 0 0 0
0.100000000000000 0.360000000000000 0.319632043667268 0.040367956332732
0.200000000000000 0.633600000000000 0.568791675789742 0.064808324210258
0.300000000000000 0.838656000000000 0.760744801402045 0.077911198597955
0.400000000000000 0.989429760000000 0.906333355910227 0.083096404089773
0.500000000000000 1.097308569600000 1.014415451789714 0.082893117810286
Error total (norm L1) untuk w1,i:
0.539583761611971
Error total (norm L1) untuk w2,i:
0.349077001041004


Metode Taylor.
Apabila ingin menggunakan metode Taylor orde 4, kita perlu memiliki turunan (terhadap \(t\)) dari \(f_1\) maupun dari \(f_2\) hingga turunan ketiga (\(n-1=4-1=3\)). Maka dengan contoh yang samaa, kita perlu mencari turunan-turunan fungsi hingga 4 kali untuk masing-masing persamaan.
- Untuk \(f_1\),
\[\begin{align*} f_1(t, u_1, u_2) &= -4u_1 + 3u_2 + 6 \\[1em] f_1'(t, u_1, u_2) &= \frac{d}{dt} f_1(t, u_1, u_2) \\ &= \frac{d}{dt} \left(-4u_1 + 3u_2 + 6\right) \\ &= -4u'_1 + 3u'_2 \\ &= -4\left(-4u_1 + 3u_2 + 6\right) + 3\left(-2.4u_1 + 1.6u_2 + 3.6\right) \\ &= 16u_1 - 12u_2 - 24 - 7.2u_1 + 4.8u_2 + 10.8 \\ &= 8.8u_1 - 7.2u_2 - 13.2 \\[1em] f_1''(t, u_1, u_2) &= \frac{d}{dt} f_1'(t, u_1, u_2) \\ &= \frac{d}{dt} \left(8.8u_1 - 7.2u_2 - 13.2\right) \\ &= 8.8u_1' - 7.2u_2' \\ &= 8.8\left(-4u_1 + 3u_2 + 6\right) - 7.2\left(-2.4u_1 + 1.6u_2 + 3.6\right) \\ &= -35.2u_1 + 26.4u_2 + 52.8 + 17.28u_1 - 11.52u_2 - 25.92 \\ &= -17.92u_1 + 14.88u_2 + 26.8 \\[1em] f_1'''(t, u_1, u_2) &= \frac{d}{dt} f_1''(t, u_1, u_2) \\ &= \frac{d}{dt} \left(-17.92u_1 + 14.88u_2 + 26.8\right) \\ &= -17.92u_1' + 14.88u_2' \\ &= -17.92\left(-4u_1 + 3u_2 + 6\right) + 14.88\left(-2.4u_1 + 1.6u_2 + 3.6\right) \\ &= 71.68u_1 - 53.76u_2 -107.52 - 35.712u_1 + 23.808u_2 + 53.568 \\ &= 35.968u_1 - 29.952u_2 - 53.952 \end{align*}\]
- Untuk \(f_2\),
\[\begin{align*} f_2(t, u_1, u_2) &= -2.4u_1 + 1.6u_2 + 3.6 \\[1em] f_2'(t, u_1, u_2) &= \frac{d}{dt} f_2(t, u_1, u_2) \\ &= \frac{d}{dt} \left(-2.4u_1 + 1.6u_2 + 3.6\right) \\ &= -2.4u_1' + 1.6u_2' \\ &= -2.4\left(-4u_1 + 3u_2 + 6\right) + 1.6\left(-2.4u_1 + 1.6u_2 + 3.6\right) \\ &= 9.6u_1 - 7.2u_2 - 14.4 + -3.84u_1 + 2.56u_2 + 5.76 \\ &= 5.76u_1 - 4.64u_2 - 8.64 \\[1em] f_2''(t, u_1, u_2) &= \frac{d}{dt} f_2'(t, u_1, u_2) \\ &= \frac{d}{dt} \left(5.76u_1 - 4.64u_2 - 8.64\right) \\ &= 5.76u_1' - 4.64u_2' \\ &= 5.76\left(-4u_1 + 3u_2 + 6\right) -4.64\left(-2.4u_1 + 1.6u_2 + 3.6\right) \\ &= -23.04u_1 + 17.28u_2 + 34.56 + 11.136u_1 - 7.424u_2 - 16.704 \\ &= -11.904u_1 + 9.856u_2 + 17.856 \\[1em] f_2'''(t, u_1, u_2) &= \frac{d}{dt} f_2''(t, u_!, u_2) \\ &= \frac{d}{dt} \left(-11.904u_1 + 9.856u_2 + 17.856\right) \\ &= -11.904u_1' + 9.856u_2' \\ &= -11.904\left(-4u_1 + 3u_2 + 6\right) + 9.856\left(-2.4u_1 + 1.6u_2 + 3.6\right) \\ &= 47.616u_1 - 35.712u_2 - 71.424 - 23.6544u_1 + 15.7696u_2 + 35.4816 \\ &= 23.9616u_1 - 19.9424u_2 - 35.9424 \end{align*}\]
Sehingga, untuk \(f_1\),
\[\begin{align*} f_1(t, u_1, u_2) &= -4u_1 + 3u_2 + 6 \\[1em] f_1'(t, u_1, u_2) &= 8.8u_1 - 7.2u_2 - 13.2 \\[1em] f_1''(t, u_1, u_2) &= -17.92u_1 + 14.88u_2 + 26.8 \\[1em] f_1'''(t, u_1, u_2) &= 35.968u_1 - 29.952u_2 - 53.952 \end{align*}\]
dan untuk \(f_2\),
\[\begin{align*} f_2(t, u_1, u_2) &= -2.4u_1 + 1.6u_2 + 3.6 \\[1em] f_2'(t, u_1, u_2) &= 5.76u_1 - 4.64u_2 - 8.64 \\[1em] f_2''(t, u_1, u_2) &= -11.904u_1 + 9.856u_2 + 17.856 \\[1em] f_2'''(t, u_1, u_2) &= 23.9616u_1 - 19.9424u_2 - 35.9424 \end{align*}\]
Fungsi \(f_1\) dan \(f_2\) serta turunan-turunannya bisa kita gunakan sebagai berikut.
f1 = @(t, u) (-4*u(1) +3*u(2) + 6);
f1p = @(t, u) (8.8*u(1) - 7.2*u(2) - 13.2);
f1pp = @(t, u) (-17.92*u(1) + 14.88*u(2) + 26.8);
f1ppp = @(t, u) (35.968*u(1) - 29.952*u(2) - 53.952);
turunan_f1 = {f1p, f1pp, f1ppp};
f2 = @(t, u) (-2.4*u(1) + 1.6*u(2) + 3.6);
f2p = @(t, u) (5.76*u(1) - 4.64*u(2) - 8.64);
f2pp = @(t, u) (-11.904*u(1) + 9.856*u(2) + 17.856);
f2ppp = @(t, u) (23.9616*u(1) - 19.9424*u(2) - 35.9424);
turunan_f2 = {f2p, f2pp, f2ppp};
a = 0;
b = 0.5;
h = 0.1;
N = (b - a) / h;
alpha1 = 0;
alpha2 = 0;
[t, w] = taylor_sysm({f1, f2}, {turunan_f1, turunan_f2}, a, b, N, [alpha1, alpha2]);
sln1 = @(t) (-3.375*exp(-2*t) + 1.875*exp(-0.4*t) + 1.5);
sln2 = @(t) (-2.25*exp(-2*t) + 2.25*exp(-0.4*t));
u1_eksak = sln1(t);
u2_eksak = sln2(t);
% menghitung error
err_w1 = abs(w(1, :)' - u1_eksak);
err_w2 = abs(w(2, :)' - u2_eksak);
err_w1_total = sum(err_w1); % norm L1 (taxicab/Manhattan)
err_w2_total = sum(err_w2); % norm L1 (taxicab/Manhattan)
% menampilkan tabel, termasuk error
format long;
disp("Tabel aproksimasi w1,i, solusi eksak u1(t), dan error:");
[t, w(1, :)', u1_eksak, err_w1]
disp("Tabel aproksimasi w2,i, solusi eksak u2(t), dan error:");
[t, w(2, :)', u2_eksak, err_w2]
disp("Error total (norm L1) untuk w1,i:");
disp(err_w1_total);
disp("Error total (norm L1) untuk w2,i:");
disp(err_w2_total);
format;
figure;
hold on;
fplot(sln1, [a,b], 'r');
scatter(t, w(1, :), 'r');
title("u1");
legend("u1 (eksak)", "w1,i (aproksimasi)")
legend('location', 'northwest')
figure;
hold on;
fplot(sln2, [a,b], 'b');
scatter(t, w(2, :), 'b');
title("u2");
legend("u2 (eksak)", "w2,i (aproksimasi)")
legend('location', 'northwest')Tabel aproksimasi w1,i, solusi eksak u1(t), dan error:
ans =
0 0 0 0
0.100000000000000 0.538241866666667 0.538263906772417 0.000022040105751
0.200000000000000 0.968476855353088 0.968512994104659 0.000036138751571
0.300000000000000 1.310692432573591 1.310736547027331 0.000044114453740
0.400000000000000 1.581236949834047 1.581284350416023 0.000047400581977
0.500000000000000 1.793479923348867 1.793527048067598 0.000047124718731
Tabel aproksimasi w2,i, solusi eksak u2(t), dan error:
ans =
0 0 0 0
0.100000000000000 0.319626240000000 0.319632043667268 0.000005803667268
0.200000000000000 0.568785014157039 0.568791675789742 0.000006661632703
0.300000000000000 0.760741028831847 0.760744801402045 0.000003772570198
0.400000000000000 0.906335276984882 0.906333355910227 0.000001921074655
0.500000000000000 1.014425131989109 1.014415451789714 0.000009680199395
Error total (norm L1) untuk w1,i:
1.968186117699000e-04
Error total (norm L1) untuk w2,i:
2.783914421899958e-05


Metode Adams Predictor-Corrector untuk Sistem Persamaan
function [t, w] = adams_pc_orde4_sysm(cell_f, a, b, N, alphas)
m = length(cell_f);
% Inisiasi variabel awal
h = (b - a) / N;
t = zeros(N + 1, 1);
w = zeros(m, N + 1);
t(1) = a;
w(:, 1) = alphas;
% Hitung w(2), w(3), w(4) menggunakan metode Runge-Kutta orde 4
k1 = zeros(m, 1);
k2 = zeros(m, 1);
k3 = zeros(m, 1);
k4 = zeros(m, 1);
for i = 1 : 3
t(i + 1) = t(i) + h;
for j = 1 : m
k1(j) = h * cell_f{j}(t(i), w(:,i));
endfor
for j = 1 : m
k2(j) = h * cell_f{j}(t(i) + (h/2), w(:,i) + (k1/2));
endfor
for j = 1 : m
k3(j) = h * cell_f{j}(t(i) + (h/2), w(:,i) + (k2/2));
endfor
for j = 1 : m
k4(j) = h * cell_f{j}(t(i + 1), w(:,i) + k3);
endfor
for j = 1 : m
w(j,i+1) = w(j,i) + (k1(j) + 2*k2(j) + 2*k3(j) + k4(j)) / 6;
endfor
endfor
% Algoritma utama Adams Predictor-Corrector orde 4
m0 = zeros(m, 1);
m1 = zeros(m, 1);
m2 = zeros(m, 1);
m3 = zeros(m, 1);
m4 = zeros(m, 1);
for i = 4 : N
t(i + 1) = t(i) + h;
for j = 1 : m
m1(j) = cell_f{j}(t(i), w(:,i));
endfor
for j = 1 : m
m2(j) = cell_f{j}(t(i-1), w(:,i-1));
endfor
for j = 1 : m
m3(j) = cell_f{j}(t(i-2), w(:,i-2));
endfor
for j = 1 : m
m4(j) = cell_f{j}(t(i-3), w(:,i-3));
endfor
% Adams-Bashforth orde 4 (four-step)
for j = 1 : m
w(j,i+1) = w(j,i) + (h/24) * (55*m1(j) - 59*m2(j) + 37*m3(j) - 9*m4(j));
endfor
% Adams-Moulton orde 4 (three-step)
for j = 1 : m
m0(j) = cell_f{j}(t(i+1), w(:,i+1));
endfor
for j = 1 : m
w(j,i+1) = w(j,i) + (h/24) * (9*m0(j) + 19*m1(j) - 5*m2(j) + m3(j));
endfor
endfor
endfunctionMenggunakan masalah nilai awal yang sama seperti sebelumnya.
f1 = @(t, u) (-4*u(1) +3*u(2) + 6);
f2 = @(t, u) (-2.4*u(1) + 1.6*u(2) + 3.6);
a = 0;
b = 0.5;
h = 0.1;
N = (b - a) / h;
alpha1 = 0;
alpha2 = 0;
[t, w] = adams_pc_orde4_sysm({f1, f2}, a, b, N, [alpha1, alpha2]);
sln1 = @(t) (-3.375*exp(-2*t) + 1.875*exp(-0.4*t) + 1.5);
sln2 = @(t) (-2.25*exp(-2*t) + 2.25*exp(-0.4*t));
u1_eksak = sln1(t);
u2_eksak = sln2(t);
% menghitung error
err_w1 = abs(w(1, :)' - u1_eksak);
err_w2 = abs(w(2, :)' - u2_eksak);
err_w1_total = sum(err_w1); % norm L1 (taxicab/Manhattan)
err_w2_total = sum(err_w2); % norm L1 (taxicab/Manhattan)
% menampilkan tabel, termasuk error
format long;
disp("Tabel aproksimasi w1,i, solusi eksak u1(t), dan error:");
[t, w(1, :)', u1_eksak, err_w1]
disp("Tabel aproksimasi w2,i, solusi eksak u2(t), dan error:");
[t, w(2, :)', u2_eksak, err_w2]
disp("Error total (norm L1) untuk w1,i:");
disp(err_w1_total);
disp("Error total (norm L1) untuk w2,i:");
disp(err_w2_total);
format;
figure;
hold on;
fplot(sln1, [a,b], 'r');
scatter(t, w(1, :), 'r');
title("u1");
legend("u1 (eksak)", "w1,i (aproksimasi)")
legend('location', 'northwest')
figure;
hold on;
fplot(sln2, [a,b], 'b');
scatter(t, w(2, :), 'b');
title("u2");
legend("u2 (eksak)", "w2,i (aproksimasi)")
legend('location', 'northwest')Tabel aproksimasi w1,i, solusi eksak u1(t), dan error:
ans =
0 0 0 0
0.100000000000000 0.538255200000000 0.538263906772417 0.000008706772417
0.200000000000000 0.968498737529088 0.968512994104659 0.000014256575571
0.300000000000000 1.310719039205257 1.310736547027331 0.000017507822074
0.400000000000000 1.581306013228106 1.581284350416023 0.000021662812083
0.500000000000000 1.793573533217050 1.793527048067598 0.000046485149452
Tabel aproksimasi w2,i, solusi eksak u2(t), dan error:
ans =
0 0 0 0
0.100000000000000 0.319626240000000 0.319632043667268 0.000005803667268
0.200000000000000 0.568782173034906 0.568791675789742 0.000009502754836
0.300000000000000 0.760733131868175 0.760744801402045 0.000011669533870
0.400000000000000 0.906347797116244 0.906333355910227 0.000014441206017
0.500000000000000 1.014446438459705 1.014415451789714 0.000030986669992
Error total (norm L1) untuk w1,i:
1.086191315975427e-04
Error total (norm L1) untuk w2,i:
7.240383198242606e-05


PDB Orde Tinggi
Mengubah orde tinggi menjadi sistem PDB satu.
Misalkan ada PDB orde \(m\) (tidak harus linier),
\[\dots y^{\left(m\right)}\left(t\right) + \dots y^{\left(m-1\right)}\left(t\right) + \dots + \dots y''\left(t\right) + \dots y'\left(t\right) + \dots y\left(t\right) + \dots = 0\]
yang bisa dipindah ruas dsb, untuk memperoleh bentuk:
\[y^{\left(m\right)}\left(t\right) = \left[\text{sisanya}\right]\]
atau biasa ditulis
\[y^{\left(m\right)}\left(t\right) = f\left(t, y, y', y'', \dots, y^{\left(m-1\right)}\right)\]
Kita bisa mendefinisikan fungsi \(u_1 \left(t\right), u_2 \left(t\right), \dots, u_m \left(t\right)\) sebagai berikut,
\[\begin{align*} u_1 \left(t\right) &= y\left(t\right) \\ u_2 \left(t\right) &= y'\left(t\right) \\ &\vdots \\ u_j \left(t\right) &= y^{\left(j-1\right)}\left(t\right) \\ &\vdots \\ u_{m-1} \left(t\right) &= y^{\left(m-2\right)}\left(t\right) \\ u_m \left(t\right) &= y^{\left(m-1\right)}\left(t\right) \end{align*}\]
Sehingga turunannya terhadap \(t\) adalah,
\[\begin{align*} \frac{du_1}{dt} &= y'\left(t\right) \\ \frac{du_2}{dt} &= y''\left(t\right) \\ &\vdots \\ \frac{du_j}{dt} &= y^{\left(j\right)}\left(t\right) \\ &\vdots \\ \frac{du_{m-1}}{dt} &= y^{\left(m-1\right)}\left(t\right) \\ \frac{du_m}{dt} &= y^{\left(m\right)}\left(t\right) \end{align*}\]
Ternyata, \(u_1'\left(t\right) = y'\left(t\right) = u_2\left(t\right)\), lalu \(u_2'\left(t\right) = y''\left(t\right) = u_3\left(t\right)\), dan seterusnya. Untuk yang terakhir, sebelumnya kita sudah menuliskan
\[y^{\left(m\right)}\left(t\right) = f\left(t, y, y', y'', \dots, y^{\left(m-1\right)}\right)\]
sedangkan \(\frac{du_m}{dt} = y^{\left(m\right)}\left(t\right)\).
Sehingga, bisa ditulis:
\[\begin{align*} \frac{du_1}{dt} &= u_2\left(t\right) \\ \frac{du_2}{dt} &= u_3\left(t\right) \\ &\vdots \\ \frac{du_j}{dt} &= u_{j+1}\left(t\right) \\ &\vdots \\ \frac{du_{m-1}}{dt} &= u_m\left(t\right) \\ \frac{du_m}{dt} &= f\left(t, y, y', y'', \dots, y^{\left(m-1\right)}\right) \\ \end{align*}\]
yaitu sistem PDB orde 1 dalam \(u_1 \left(t\right), u_2 \left(t\right), \dots, u_m \left(t\right)\).
Solusi \(y\left(t\right)\) bisa diperoleh dari \(u_1 \left(t\right)\). Apabila ditanya \(y'\left(t\right)\), maka bisa diperoleh dari \(u_2 \left(t\right)\). Apabila ditanya \(y''\left(t\right)\), maka bisa diperoleh dari \(u_3 \left(t\right)\), dan seterusnya.
Contoh: mengubah PDB orde 3 menjadi sistem PDB
Soal diambil dari Latihan Soal 5.9 nomor 3d dari buku Burden,
\[t^3 y''' - t^2 y'' + 3ty' - 4y = 5t^3 \ln{t} + 9t^3, \quad 1 \le t \le 2\]
\[y(1) = 0, \quad y'(1) = 1, \quad y''(1) = 3\]
dengan \(h=0.1\), dan diketahui solusi eksak
\[y(t) = -t^2 + t\cos{\left(\ln{t}\right)} + t\sin{\left(\ln{t}\right)} + t^3 \ln{t}\]
\[y'(t) = -2t + 2\cos{\left(\ln{t}\right)} + t^2 + 3t^2 \ln{t}\]
\[y''(t) = -2 - \frac{2}{t}\sin{\left(\ln{t}\right)} + 5t + 6t \ln{t}\]
Perhatikan bahwa turunan tertinggi adalah turunan ketiga, sehingga PDB yang diberikan adalah PDB orde 3, yaitu PDB orde \(m\) dengan \(m=3\).
Kita bisa melakukan pindah ruas agar memperoleh bentuk
\[y''' = \left[\text{sisanya}\right]\]
atau bisa ditulis
\[y''' = f\left(t, y, y', y''\right)\]
seperti berikut:
\[t^3 y''' - t^2 y'' + 3ty' - 4y = 5t^3 \ln{t} + 9t^3\]
\[t^3 y''' = t^2 y'' - 3ty' + 4y + 5t^3 \ln{t} + 9t^3\]
\[y''' = \frac{1}{t^3}\left(t^2 y'' - 3ty' + 4y + 5t^3 \ln{t} + 9t^3\right)\]
\[y''' = \frac{1}{t} y'' - \frac{3}{t^2}y' + \frac{4}{t^3}y + 5 \ln{t} + 9\]
Sehingga bisa ditulis
\[y''' = f\left(t, y, y', y''\right) = \frac{1}{t} y'' - \frac{3}{t^2}y' + \frac{4}{t^3}y + 5 \ln{t} + 9, \quad 1 \le t \le 2\]
\[y(1) = 0, \quad y'(1) = 1, \quad y''(1) = 3\]
PDB orde \(m=3\) bisa diubah menjadi sistem PDB orde 1 yang terdiri dari \(m=3\) persamaan, dengan permisalan
\[u_1(t) = y(t)\]
\[u_2(t) = y'(t)\]
\[u_3(t) = y''(t)\]
sehingga
\[\begin{align*} u_1'(t) &= y'(t) = u_2(t) \\ u_2'(t) &= y''(t) = u_3(t) \\ u_3'(t) &= y'''(t) = f\left(t, y, y', y''\right) = \frac{1}{t} y'' - \frac{3}{t^2}y' + \frac{4}{t^3}y + 5 \ln{t} + 9 \end{align*}\]
atau bisa ditulis
\[\begin{align*} u_1'(t) &= u_2(t) \\ u_2'(t) &= u_3(t) \\ u_3'(t) &= f\left(t, u_1, u_2, u_3\right) = \frac{1}{t} u_3(t) - \frac{3}{t^2}u_2(t) + \frac{4}{t^3}u_1(t) + 5 \ln{t} + 9 \end{align*}\]
Berdasarkan permisalan, nilai-nilai awal
\[y(1) = 0, \quad y'(1) = 1, \quad y''(1) = 3\]
menjadi
\[u_1(1) = 0, \quad u_2(1) = 1, \quad u_3(1) = 3\]
Sehingga, diperoleh sistem PDB orde 3 sebagai berikut:
\[\begin{align*} u_1' &= u_2, \quad u_1(1) = 0 \\ u_2' &= u_3, \quad u_2(1) = 1 \\ u_3' &= \frac{1}{t} u_3 - \frac{3}{t^2}u_2 + \frac{4}{t^3}u_1 + 5 \ln{t} + 9, \quad u_3(1) = 3 \end{align*}\]
Kita dapat memisalkan
\[\begin{align*} f_1\left(t, u_1, u_2, u_3\right) &= u_1' \\ f_2\left(t, u_1, u_2, u_3\right) &= u_2' \\ f_3\left(t, u_1, u_2, u_3\right) &= u_3' \end{align*}\]
yaitu
\[\begin{align*} f_1\left(t, u_1, u_2, u_3\right) &= u_2 \\ f_2\left(t, u_1, u_2, u_3\right) &= u_3 \\ f_3\left(t, u_1, u_2, u_3\right) &= \frac{1}{t} u_3 - \frac{3}{t^2}u_2 + \frac{4}{t^3}u_1 + 5 \ln{t} + 9 \end{align*}\]
agar sistem PDB orde 3 di atas bisa ditulis dalam bentuk umum sistem PDB orde 1, yaitu
\[\begin{align*} u_1' &= f_1\left(t, u_1, u_2, u_3\right) \\ u_2' &= f_2\left(t, u_1, u_2, u_3\right) \\ u_3' &= f_3\left(t, u_1, u_2, u_3\right) \end{align*}\]
masih dengan nilai-nilai awal
\[u_1(1) = 0, \quad u_2(1) = 1, \quad u_3(1) = 3\]
Setelah bentuknya diubah menjadi sistem PDB orde 1, kita dapat menyelesaikannya menggunakan algoritma-algoritma sistem PDB orde 1 seperti biasa. Berdasarkan permisalan yang telah dilakukan,
solusi \(u_1(t)\) akan menjadi solusi \(y(t)\), biasanya ini yang diminta
solusi \(u_2(t)\) akan menjadi solusi \(y'(t)\)
solusi \(u_3(t)\) akan menjadi solusi \(y''(t)\)
Walaupun mungkin kita hanya memerlukan solusi \(y(t)\), algoritma yang tersedia mengharuskan semua nilai dihitung di tiap iterasi. Tidak ada salahnya juga; siapa tahu, misalnya solusi \(y'(t)\) atau solusi \(y''(t)\) diperlukan nantinya.
(Apabila diperlukan, nilai \(y^{\left(m\right)}(t)\), yaitu nilai \(y'''(t)\), bisa dihitung menggunakan \(f\left(t, y, y', y'', \dots, y^{\left(m-1\right)}\right)\), yaitu menggunakan \(f\left(t, y, y', y''\right) = \frac{1}{t} y'' - \frac{3}{t^2}y' + \frac{4}{t^3}y + 5 \ln{t} + 9\).)
Contoh metode Runge-Kutta orde 4
Sistem kita adalah
\[\begin{align*} u_1' &= f_1\left(t, u_1, u_2, u_3\right) = u_2 \\ u_2' &= f_2\left(t, u_1, u_2, u_3\right) = u_3 \\ u_3' &= f_3\left(t, u_1, u_2, u_3\right) = \frac{1}{t} u_3 - \frac{3}{t^2}u_2 + \frac{4}{t^3}u_1 + 5 \ln{t} + 9 \end{align*}\]
\[1 \le t \le 2\]
\[u_1(1) = 0, \quad u_2(1) = 1, \quad u_3(1) = 3\]
dengan \(h=0.1\), dan diketahui solusi eksak
\[y(t) = -t^2 + t\cos{\left(\ln{t}\right)} + t\sin{\left(\ln{t}\right)} + t^3 \ln{t}\]
\[y'(t) = -2t + 2\cos{\left(\ln{t}\right)} + t^2 + 3t^2 \ln{t}\]
\[y''(t) = -2 - \frac{2}{t}\sin{\left(\ln{t}\right)} + 5t + 6t \ln{t}\]
(yang bisa dianggap solusi eksak untuk \(u_1\), \(u_2\), dan \(u_3\), sesuai permisalan)
Kita bisa menggunakan metode Runge-Kutta orde 4 untuk sistem, seperti berikut.
f1 = @(t, u) u(2);
f2 = @(t, u) u(3);
f3 = @(t, u) (1/t .* u(3) - 3/(t.^2) .* u(2) + 4/(t.^3) .* u(1) + 5*log(t) + 9);
a = 1;
b = 2;
h = 0.1;
N = (b - a) / h;
alpha1 = 0;
alpha2 = 1;
alpha3 = 3;
[t, w] = rko4_sysm({f1, f2, f3}, a, b, N, [alpha1, alpha2, alpha3]);
% solusi eksak
sln1 = @(t) (-t.^2 + t .* cos(log(t)) + t .* sin(log(t)) + t.^3 .* log(t));
sln2 = @(t) (-2*t + 2 * cos(log(t)) + t.^2 + 3 * t.^2 .* log(t));
sln3 = @(t) (-2 - 2./t .* sin(log(t)) + 5*t + 6 * t .* log(t));
u1_eksak = sln1(t);
u2_eksak = sln2(t);
u3_eksak = sln3(t);
% menghitung error
err_w1 = abs(w(1, :)' - u1_eksak);
err_w2 = abs(w(2, :)' - u2_eksak);
err_w3 = abs(w(3, :)' - u3_eksak);
err_w1_total = sum(err_w1); % norm L1 (taxicab/Manhattan)
err_w2_total = sum(err_w2); % norm L1 (taxicab/Manhattan)
err_w3_total = sum(err_w3); % norm L1 (taxicab/Manhattan)
% menampilkan tabel, termasuk error
format long;
disp("Tabel aproksimasi w1,i, solusi eksak u1(t), dan error:");
[t, w(1, :)', u1_eksak, err_w1]
disp("Tabel aproksimasi w2,i, solusi eksak u2(t), dan error:");
[t, w(2, :)', u2_eksak, err_w2]
disp("Tabel aproksimasi w3,i, solusi eksak u3(t), dan error:");
[t, w(3, :)', u3_eksak, err_w3]
disp("Error total (norm L1) untuk w1,i:");
disp(err_w1_total);
disp("Error total (norm L1) untuk w2,i:");
disp(err_w2_total);
disp("Error total (norm L1) untuk w3,i:");
disp(err_w3_total);
format;
figure;
hold on;
fplot(sln1, [a, b], 'r');
scatter(t, w(1, :), 'r'); % ambil baris pertama yaitu solusi u1
title("Solusi u1(t) atau y(t)");
legend("Solusi eksak", "w1,i (aproksimasi)");
legend('location', 'northwest');
figure;
hold on;
fplot(sln2, [a, b], 'g');
scatter(t, w(2, :), 'g'); % ambil baris kedua yaitu solusi u2
title("Solusi u2(t) atau y'(t)");
legend("Solusi eksak", "w2,i (aproksimasi)");
legend('location', 'northwest');
figure;
hold on;
fplot(sln3, [a, b], 'b');
scatter(t, w(3, :), 'b'); % ambil baris ketiga yaitu solusi u3
title("Solusi u3(t) atau y''(t)");
legend("Solusi eksak", "w3,i (aproksimasi)");
legend('location', 'northwest');Tabel aproksimasi w1,i, solusi eksak u1(t), dan error:
ans =
1.000000000000000 0 0 0
1.100000000000000 0.116547765077132 0.116547953377741 0.000000188300609
1.200000000000000 0.272737593417178 0.272737913137213 0.000000319720036
1.300000000000000 0.479101055922200 0.479101624357037 0.000000568434836
1.400000000000000 0.746997034090164 0.746998073629463 0.000001039539299
1.500000000000000 1.088490794798314 1.088492594095847 0.000001799297533
1.600000000000001 1.516261839314915 1.516264730431065 0.000002891116151
1.700000000000001 2.043532071845456 2.043536416215900 0.000004344370444
1.800000000000001 2.684008671952472 2.684014851438298 0.000006179485825
1.900000000000001 3.451837841224076 3.451846252199066 0.000008410974990
2.000000000000001 4.361566750517713 4.361577799834785 0.000011049317072
Tabel aproksimasi w2,i, solusi eksak u2(t), dan error:
ans =
1.000000000000000 1.000000000000000 1.000000000000000 0
1.100000000000000 1.346897244698541 1.346898796867440 0.000001552168898
1.200000000000000 1.794476400848503 1.794479954480695 0.000003553632192
1.300000000000000 2.351739790653634 2.351745763551004 0.000005972897370
1.400000000000000 3.026298521404629 3.026307271933378 0.000008750528749
1.500000000000000 3.824715727217527 3.824727552609112 0.000011825391586
1.600000000000001 4.752746018651163 4.752761161714929 0.000015143063766
1.700000000000001 5.815506875823461 5.815525533513762 0.000018657690301
1.800000000000001 7.017604163612482 7.017626495142349 0.000022331529867
1.900000000000001 8.363225949009005 8.363252082824820 0.000026133815815
2.000000000000001 9.856213929909213 9.856243969447302 0.000030039538089
Tabel aproksimasi w3,i, solusi eksak u3(t), dan error:
ans =
Columns 1 through 3:
1.000000000000000e+00 3.000000000000000e+00 3.000000000000000e+00
1.100000000000000e+00 3.956010469157951e+00 3.956018195368995e+00
1.200000000000000e+00 5.010512494112985e+00 5.010526645695958e+00
1.300000000000000e+00 6.147399365577646e+00 6.147418750933507e+00
1.400000000000000e+00 7.354687155068509e+00 7.354710775454516e+00
1.500000000000000e+00 8.623230661511867e+00 8.623257706687671e+00
1.600000000000001e+00 9.945893119295571e+00 9.945922939388453e+00
1.700000000000001e+00 1.131699337911594e+01 1.131702545393904e+01
1.800000000000001e+00 1.273192816711290e+01 1.273196207929798e+01
1.900000000000001e+00 1.418690793287085e+01 1.418694334605300e+01
2.000000000000001e+00 1.567876824876296e+01 1.567880489040572e+01
Column 4:
0
7.726211044278841e-06
1.415158297302099e-05
1.938535586099022e-05
2.362038600622896e-05
2.704517580376375e-05
2.982009288210463e-05
3.207482310685350e-05
3.391218507609040e-05
3.541318215205536e-05
3.664164275640758e-05
Error total (norm L1) untuk w1,i:
3.679055679502163e-05
Error total (norm L1) untuk w2,i:
1.439602566337683e-04
Error total (norm L1) untuk w3,i:
2.597906376617942e-04



Contoh metode Adams Predictor-Corrector orde 4
Kita bisa menggunakan kode di atas, tinggal menukar fungsi rko4_sysm dengan adams_pc_orde4_sysm
f1 = @(t, u) u(2);
f2 = @(t, u) u(3);
f3 = @(t, u) (1/t .* u(3) - 3/(t.^2) .* u(2) + 4/(t.^3) .* u(1) + 5*log(t) + 9);
a = 1;
b = 2;
h = 0.1;
N = (b - a) / h;
alpha1 = 0;
alpha2 = 1;
alpha3 = 3;
[t, w] = adams_pc_orde4_sysm({f1, f2, f3}, a, b, N, [alpha1, alpha2, alpha3]);
% solusi eksak
sln1 = @(t) (-t.^2 + t .* cos(log(t)) + t .* sin(log(t)) + t.^3 .* log(t));
sln2 = @(t) (-2*t + 2 * cos(log(t)) + t.^2 + 3 * t.^2 .* log(t));
sln3 = @(t) (-2 - 2./t .* sin(log(t)) + 5*t + 6 * t .* log(t));
u1_eksak = sln1(t);
u2_eksak = sln2(t);
u3_eksak = sln3(t);
% menghitung error
err_w1 = abs(w(1, :)' - u1_eksak);
err_w2 = abs(w(2, :)' - u2_eksak);
err_w3 = abs(w(3, :)' - u3_eksak);
err_w1_total = sum(err_w1); % norm L1 (taxicab/Manhattan)
err_w2_total = sum(err_w2); % norm L1 (taxicab/Manhattan)
err_w3_total = sum(err_w3); % norm L1 (taxicab/Manhattan)
% menampilkan tabel, termasuk error
format long;
disp("Tabel aproksimasi w1,i, solusi eksak u1(t), dan error:");
[t, w(1, :)', u1_eksak, err_w1]
disp("Tabel aproksimasi w2,i, solusi eksak u2(t), dan error:");
[t, w(2, :)', u2_eksak, err_w2]
disp("Tabel aproksimasi w3,i, solusi eksak u3(t), dan error:");
[t, w(3, :)', u3_eksak, err_w3]
disp("Error total (norm L1) untuk w1,i:");
disp(err_w1_total);
disp("Error total (norm L1) untuk w2,i:");
disp(err_w2_total);
disp("Error total (norm L1) untuk w3,i:");
disp(err_w3_total);
format;
figure;
hold on;
fplot(sln1, [a, b], 'r');
scatter(t, w(1, :), 'r'); % ambil baris pertama yaitu solusi u1
title("Solusi u1(t) atau y(t)");
legend("Solusi eksak", "w1,i (aproksimasi)");
legend('location', 'northwest');
figure;
hold on;
fplot(sln2, [a, b], 'g');
scatter(t, w(2, :), 'g'); % ambil baris kedua yaitu solusi u2
title("Solusi u2(t) atau y'(t)");
legend("Solusi eksak", "w2,i (aproksimasi)");
legend('location', 'northwest');
figure;
hold on;
fplot(sln3, [a, b], 'b');
scatter(t, w(3, :), 'b'); % ambil baris ketiga yaitu solusi u3
title("Solusi u3(t) atau y''(t)");
legend("Solusi eksak", "w3,i (aproksimasi)");
legend('location', 'northwest');Tabel aproksimasi w1,i, solusi eksak u1(t), dan error:
ans =
1.000000000000000 0 0 0
1.100000000000000 0.116547765077132 0.116547953377741 0.000000188300609
1.200000000000000 0.272737593417178 0.272737913137213 0.000000319720036
1.300000000000000 0.479101055922200 0.479101624357037 0.000000568434836
1.400000000000000 0.746988331768006 0.746998073629463 0.000009741861457
1.500000000000000 1.088479331032411 1.088492594095847 0.000013263063436
1.600000000000001 1.516250804091531 1.516264730431065 0.000013926339534
1.700000000000001 2.043523756922286 2.043536416215900 0.000012659293614
1.800000000000001 2.684004508018369 2.684014851438298 0.000010343419929
1.900000000000001 3.451838703918476 3.451846252199066 0.000007548280589
2.000000000000001 4.361573101909957 4.361577799834785 0.000004697924828
Tabel aproksimasi w2,i, solusi eksak u2(t), dan error:
ans =
1.000000000000000 1.000000000000000 1.000000000000000 0
1.100000000000000 1.346897244698541 1.346898796867440 0.000001552168898
1.200000000000000 1.794476400848503 1.794479954480695 0.000003553632192
1.300000000000000 2.351739790653634 2.351745763551004 0.000005972897370
1.400000000000000 3.026328879302920 3.026307271933378 0.000021607369542
1.500000000000000 3.824765611199535 3.824727552609112 0.000038058590423
1.600000000000001 4.752808495899515 4.752761161714929 0.000047334184586
1.700000000000001 5.815576770936465 5.815525533513762 0.000051237422703
1.800000000000001 7.017677812981450 7.017626495142349 0.000051317839101
1.900000000000001 8.363300595016490 8.363252082824820 0.000048512191670
2.000000000000001 9.856287435428921 9.856243969447302 0.000043465981619
Tabel aproksimasi w3,i, solusi eksak u3(t), dan error:
ans =
Columns 1 through 3:
1.000000000000000e+00 3.000000000000000e+00 3.000000000000000e+00
1.100000000000000e+00 3.956010469157951e+00 3.956018195368995e+00
1.200000000000000e+00 5.010512494112985e+00 5.010526645695958e+00
1.300000000000000e+00 6.147399365577646e+00 6.147418750933507e+00
1.400000000000000e+00 7.354687175512593e+00 7.354710775454516e+00
1.500000000000000e+00 8.623223151179934e+00 8.623257706687671e+00
1.600000000000001e+00 9.945876374658745e+00 9.945922939388453e+00
1.700000000000001e+00 1.131696670232371e+01 1.131702545393904e+01
1.800000000000001e+00 1.273189177401384e+01 1.273196207929798e+01
1.900000000000001e+00 1.418686238954817e+01 1.418694334605300e+01
2.000000000000001e+00 1.567871426475001e+01 1.567880489040572e+01
Column 4:
0
7.726211044278841e-06
1.415158297302099e-05
1.938535586099022e-05
2.359994192246972e-05
3.455550773701077e-05
4.656472970765435e-05
5.875161532742368e-05
7.030528413842774e-05
8.095650483497252e-05
9.062565571049674e-05
Error total (norm L1) untuk w1,i:
7.325663886766087e-05
Error total (norm L1) untuk w2,i:
3.126122781038632e-04
Error total (norm L1) untuk w3,i:
4.466223892567456e-04


