Anda di halaman 1dari 10

Penyelesaian Persamaan Diferensial Ordiner dengan MATLAB

Pada pemodelan kasus-kasus di teknik kimia seringkali dijumpai hasil persamaan matematikanya
berupa persamaan diferensial ordiner (PDO). Dalam Persamaan diferensial ordiner ini hanya
dijumpai satu variabel bebas. Terdapat dua jenis PDO yang sering dijumpai dalam pemodelan
matematis, yaitu:
1. PDO jenis initial value problem
Kondisi batas yang diketahui nilainya hanya pada satu titik.
2. PDO jenis boundary value problem
Kondisi batas yang diketahui nilainya pada lebih dari satu titik.

1. Persamaan Diferensial Ordiner Jenis Initial Value Problem (IVP)

1.1. Penyelesaian dengan integrasi numeris

Dalam beberapa kasus pemodelan, PDO yang diperoleh bisa langsung diselesaikan dengan
integrasi. Integrasi ini bisa dilakukan secara analitis maupun secara numeris. Jika integrasi
dilakukan secara numeris, dalam MATLAB bisa dipergunakan fungsi INTEGRAL.

Contoh 1. Dari pemodelan kasus 2 (Absorpsi gas dalam solven secara batch) diperoleh PDO
sebagai berikut:


= ( ) (co.1.1)

Dengan kondisi batas: t = 0; y = 0. Persamaan (1) di atas bisa diintegrasikan untuk mendapatkan
hubungan y sebagai fungsi t sebagai berikut:


0 =
0 ( )


= 0 ( )
(co.1.2)

Waktu (t) yang diperlukan sehingga kadar gas yang keluar menjadi sebesar yout dapat dihitung
dengan fungsi INTEGRAL dalam MATLAB.

Kode pemrograman dalam MATLAB


function contoh01PEMAT
% Kasus 02 Absorpsi gas dalam solven secara batch
% Penyelesaian dengan integrasi numeris
clc
clear
% Data untuk perhitungan
polutan = 'CO2';
m = 1000; % jumlah solven dalam tangki, mol
G = 1; % laju alir gas yang digelembungkan dalam tangki, mol/detik
H = 0.186; % Konstanta Henry gas CO2
yin = 0.5; % fraksi mol CO2 dalam gas masuk

% Menghitung waktu yang diperlukan supaya kadar gas keluar sistem menjadi
% 10% kadar masuknya
yout = 0.1*yin; % Kadar CO2 keluar sistem
% Perhitungan secara numeris dengan fungsi INTEGRAL
tnum = m*H/G*integral(@fungsi,0,yout);

%Perhitungan secara analitis


texact = m*H/G*log(yin/(yin-yout));

% Menampilkan hasil perhitungan


fprintf('Kasus 02 Absorpsi gas dalam solven secara batch.\n')
fprintf('------------------------------------------------\n')
fprintf('Gas %s berkadar %4.2f diserap dalam air.\n',polutan,yin)
fprintf('Kadar %s maksimum yang keluar adalah %4.2f.\n',polutan,yout)
fprintf('Waktu yang diperlukan:\n')
fprintf('\tPerhitungan secara numeris %4.2f detik. \n',tnum)
fprintf('\tPerhitungan secara analitis %4.2f detik.\n',texact)

function f = fungsi(y)
f = 1./(yin-y);
end
end

Hasil perhitungan:

Kasus 02 Absorpsi gas dalam solven secara batch.


------------------------------------------------
Gas CO2 berkadar 0.50 diserap dalam air.
Kadar CO2 maksimum yang keluar adalah 0.05.
Waktu yang diperlukan:
Perhitungan secara numeris 19.60 detik.
Perhitungan secara analitis 19.60 detik.

1.2. Penyelesaian dengan ODE solver

Jika hasil pemodelan matematis yang diperoleh berupa PDO, maka dapat diselesaikan dengan
fungsi ODE solver yang ada di MATLAB. Ada beberapa jenis ODE solver dalam MATLAB, yaitu:

Tabel 1. Berbagai fungsi ODE solver dalam MATLAB

Solver Solves These Kinds of Problems Method

ode45 Nonstiff differential equations Runge-Kutta


ode23 Nonstiff differential equations Runge-Kutta
Solver Solves These Kinds of Problems Method

ode113 Nonstiff differential equations Adams


ode15s Stiff differential equations and DAEs NDFs (BDFs)
ode23s Stiff differential equations Rosenbrock
ode23t Moderately stiff differential equations and DAEs Trapezoidal rule
ode23tb Stiff differential equations TR-BDF2
ode15i Fully implicit differential equations BDFs

Semuanya mempunyai syntax yang sama dalam pemakaiannya. Fungsi yang biasanya
dipergunakan adalah ODE45. Jika fungsi ODE45 terlalu lambat dalam menyelesaikan PDO atau
diketahui PDO mempunyai hasil penyelesaian yang berubah tajam (stiff) maka lebih baik
dipergunakan fungsi ODE15S.

Contoh 2. Pemodelan Kasus 1: Pencampuran dalam tangki.

PDO yang diperoleh:

= (co.2.1)


= ( ) (co.2.2)

Masa larutan dalam tangki dan kadar garamnya setiap saat dapat dihitung dengan fungsi ODE45
dalam MATLAB.

Kode pemrograman dalam MATLAB

function contoh02aPEMAT
%Kasus 1: Pencampuran dalam tangki
%Penyelesaian dengan ODE45
clc; clear

% Data
V0 = 100; % Massa air dalam tangki semula (kg)
x0 = 0; % Kadar garam dalam tangki semula (kg/L)
F = 15; % Debit larutan garam masuk ke tangki (kg/men)
L = 10; % Debit larutan garam keluar dari tangki (kg/men)
xF = 1; % Kadar garam dalam larutan masuk ke tangki (kg/L)

% Penyelesaian dengan fungsi ODE45


tf = 10; % Waktu final (men)
IC = [V0 x0];
[t Vx] = ode45(@ode_kasus01,[0 tf], IC);

V = Vx(:,1); % Massa larutan dalam tangki


x = Vx(:,2); % Kadar garam larutan

% Menampilkan hasil perhitungan dalam bentuk grafik


subplot(1,2,1)
plot(t,V)
title('V vs t')
xlabel('Waktu, men'); ylabel('Massa larutan dalam tangki, kg')
subplot(1,2,2)
plot(t,x)
title('x vs t')
xlabel('Waktu, men'); ylabel('kadar garam larutan dalam tangki, kg')

function dVxdt = ode_kasus01(tfun, Vxfun)


dVxdt = zeros(2,1);
Vfun = Vxfun(1);
xfun = Vxfun(2);
dVxdt(1) = F - L;
dVxdt(2) = F/Vfun * (xF - xfun);
end
end

Hasil perhitungan:

Contoh 3. Perbaikan pemrograman komputer untuk contoh 2.


Ada beberapa kondisi dalam contoh 2 yang harus diantisipasi dalam program komputer yang
dibuat supaya hasil perhitungan yang diperoleh sesuai dengan kondisi sebenarnya. Beberapa
kondisi tersebut adalah:

1. Jika L > F, suatu saat tangki akan kering (V = 0). Jika V = 0 maka = 0 dan = 0.


2. Jika L < F, suatu saat tangki akan meluap setelah V > Vmax. Jika V Vmax maka =0


dan tetap sesuai persamaan co.2.2.
Dengan kata lain, persamaan co.2.1. hanya berlaku jika 0 V Vmax dan co.2.2. hanya berlaku
jika V 0.

Kode permrogramannya dalam MATLAB:

function contoh03aPEMAT
%Kasus 1: Pencampuran dalam tangki
%Penyelesaian dengan ODE45
clc; clear

% Data
V0 = 100; % Massa air dalam tangki semula (kg)
x0 = 0; % Kadar garam dalam tangki semula (kg/L)
F = 15; % Debit larutan garam masuk ke tangki (kg/men)
L = 10; % Debit larutan garam keluar dari tangki (kg/men)
xF = 1; % Kadar garam dalam larutan masuk ke tangki (kg/L)
Vmax = 150; % Massa maksimum yang dapat ditampung tangki

% Penyelesaian dengan fungsi ODE45


tf = 50; % Waktu final (men)
IC = [V0 x0];
[t Vx] = ode45(@ode_kasus01,[0 tf], IC);

V = Vx(:,1); % Massa larutan dalam tangki


x = Vx(:,2); % Kadar garam larutan

% Menampilkan hasil perhitungan dalam bentuk grafik


subplot(1,2,1)
plot(t,V)
title('V vs t')
xlabel('Waktu, men'); ylabel('Massa larutan dalam tangki, kg')
subplot(1,2,2)
plot(t,x)
title('x vs t')
xlabel('Waktu, men'); ylabel('kadar garam larutan dalam tangki, kg')

function dVxdt = ode_kasus01(tfun, Vxfun)


dVxdt = zeros(2,1);
Vfun = Vxfun(1);
xfun = Vxfun(2);
if Vfun >= 0
dVxdt(1) = F - L;
dVxdt(2) = F/Vfun * (xF - xfun);
end
if Vfun >= Vmax
dVxdt(1) = 0;
end
end
end
Hasil perhitungan:

Dalam grafik di atas untuk V vs t ada masalah yaitu:


Di sini grafik V melebihi nilai
maksimum yang diijinkan (Vmax).
Juga terlihat grafiknya tidak mendatar
namun ada sedikit fluktuasi. Hal
tersebut tidak sesuai dengan kondisi
sebenarnya.

Kesalahan di atas dapat terjadi karena langkah perhitungan maksimum (maximum step size;
MAXSTEP) yang dipergunakan dalam ODE45 terlalu besar. Perlu dilakukan modifikasi dalam
perintah ODE45 sebagai berikut:

% Penyelesaian dengan fungsi ODE45


tf = 100; % Waktu final (men)
IC = [V0 x0];
pilihan = odeset('MaxStep',0.01);
[t Vx] = ode45(@ode_kasus01,[0 tf], IC, pilihan);

Kode pemrograman yang lain sama dengan dalam file contoh03aPEMAT di atas. Hasil
perhitungan menjadi:
Keterangan lebih detail dapat dibaca dalam HELP pada MATLAB.

2. Persamaan Diferensial Ordiner Jenis Boundary Value Problem (BVP)

PDO jenis BVP ini mempunyai lebih dari satu kondisi batas yang semuanya harus terpenuhi.
Dalam MATLAB dapat dipergunakan fungsi BVP4C atau BVP5C untuk penyelesaian PDO jenis BVP.

BVP4C dan BVP5C menyelesaikan PDO jenis BVP dalam bentuk:


0

= (, ) dengan kondisi batas [ ] = [0]

Contoh 4. Kasus 6. Distribusi Suhu pada Batang di Udara


PD yang diperoleh:
2 4
= ( ) (co.4.1.)
2
Kondisi batas:
a. Pada x = 0; T = Ts (co.4.2.)
b. Pada x = L ada 3 kemungkinan:
1. T = Tf (konstan) (co.4.3.1.)

2. = 0 (co.4.3.2.)

3. = ( ) (co.4.3.3.)

Penyelesaian:

PDO order 2 pada persamaan co.4.1. diubah menjadi PDO order 1 dengan cara sebagai berikut:
1
= 2 (co.4.4)

2 4
= (2 ) (co.4.5)

Kondisi batas menjadi:


a. Pada x = a; y2(a) = Ts (co.4.6.)
b. Pada x = b ada 3 kemungkinan:
1. y1(b) = Tf (konstan) (co.4.7.1.)
2. 2 () = 0 (co.4.7.2.)

3. 2 () = (1 ) (co.4.7.3.)

Contoh 4.1. Kode MATLAB jika kedua ujung batang bersuhu konstan (persamaan co.4.7.1.).

function contoh4aPEMAT
% Kasus 6. Distribusi Suhu pada Batang di Udara
% Contoh penyelesaian PDO BVP
clc; clear

% Data untuk perhitungan


k = 0.5; %konduktivitas panas (cal/det/cm/C)
h = 0.0007; %koefisien perpindahan panas batang-udara (cal/det/cm2/C)
L = 100; %panjang batang (cm)
d = 1; %diameter batang (cm)
Ts = 400; %Suhu permukaan luar pipa (C)
Tu = 30; %Suhu udara (C)
Tf = 100; % Suhu di ujung luar batang

% Menghitung distribusi suhu dalam batang dengan fungsi BVP4C


solinit = bvpinit(linspace(0,L,100),[Ts 0]); % Nilai tebakan y1 dan y2
sol = bvp4c(@odefun,@bcfun,solinit); % Penyelesaian untuk y1 dan y2

% Menampilkan nilai distribusi suhu (T)


x = linspace(0,L);
y = deval(sol,x);
T = y(1,:);

% membuat grafik hasil perhitungan


plot(x,T)
title({'Distribusi Suhu Dalam Batang';...
'jika kedua ujungnya bersuhu konstan'})
xlabel('Panjang batang, cm')
ylabel('Suhu \circC')

function dydx = odefun(x,y)


dydx = zeros(2,1);
dydx(1) = y(2);
dydx(2) = 4*h/k/d*(y(1) - Tu);
end

function bc = bcfun(ya,yb)
bc = zeros(2,1);
bc(1) = ya(1)-Ts;
bc(2) = yb(1)-Tf;
end
end

Hasil perhitungan:

Contoh 4.2. Kode MATLAB jika salah satu ujung batang diisolasi (persamaan co.4.7.2.).

Kodenya sama dengan kasus 1, hanya fungsi untuk kondisi batasnya diubah menjadi:
function bc = bcfun(ya,yb)
bc = zeros(2,1);
bc(1) = ya(1)-Ts;
bc(2) = yb(2);
end

Hasil perhitungannya:
Contoh 4.3. Kode MATLAB jika salah satu ujung batang dibiarkan tanpa isolasi (persamaan
co.4.7.3.).

Kodenya sama dengan kasus 1, hanya fungsi untuk kondisi batasnya diubah menjadi:
function bc = bcfun(ya,yb)
bc = zeros(2,1);
bc(1) = ya(1)-Ts;
bc(2) = yb(2)+h/k*(yb(1)-Tu);
end

Hasil perhitungannya: