Berikut ini adalah contoh Simulasi Program Komputasi dengan Matlab untuk menghitung jumlah sisa Zat Radiokatif yang Meluruh.
A. Contoh Kasus Peluruhan Zat Radiokatif
Misalkan sebuah zat Radioaktif (X) melakukan peluruhan sehingga mengalami perubahan jumlah awal 1000 atom dengan waktu paruh 4,4 x 109 s. Buatlah sebuah program yang menunjukkan jumlah atom yang tersisa terhadap selang waktu!
Asumsi yang diterapkan pada Metode Eular adalah suku terakhir adalah turunan ke dua yang dapat diabaikan sehingga :
y_{i+1}=y_i+y'h
dimana y’ = f(xi,yi)
Nilai turunan dari y dengan metode Eular didapatkan dari mengekstrapolasi garis linier diinterval h, sehingga semakin banyak interval nilai h maka semakin besar error yang didapatkan.
A. Studi Kasus
Misalkan sebuah persamaaan diferensial orde I seperti berikut :
\frac{dy}{dx}=-2x^3+12x^2-20x +8,5
dimana x = 0 sampai x = 4 dengan lebar langkah 0.5 dengan syarat awal y(0) = 1.
Langkah 1. Hitung terlebih dahulu solusi analitik dari persamaan tersebut !
Langkah 2. Tentukan f(x) = -2x3+12x3-20x+8.5, kemudian subtitusi nilai x ke dalam persamaan tersebut!
Langkah 3. Hitung nilai y menggunakan persamaan : yi+1=yi+y’h
y
x
y’
y
0
8,5
1
0,5
…
…
1
…
…
…
…
…
4
…
…
Langkah 5. Buat Algoritma dengan Metode tersebut di Matlab.
Contoh Algortima dan Scriptnya di Matlab!
clear all
clc
format long
b = 4; % batas atas
a = 0; % batas bawah
h = 0.5; % semakin nilai semakin detail hasil yang ditunjukkan
N = (b-a)/h;
y0 = 1; % nilai y awal
x0 = 0; % nilai x awal
% inisialisasi array x dan y
x = zeros(1, N+1);
y = zeros(1, N+1);
w = zeros(1, N+1);
%perubahan t per step
for i = 1:N+1
x(i) = a + (i-1)*h;
end
%solusi y menggunakan metode Euler
y(1) = y0;
for i = 2:N+1
y(i) = y(i-1) + h*(-2*x(i-1)^3 + 12*x(i-1)^2 - 20*x(i-1) + 8.5);
end
%solusi analitik
for i = 1:N+1
w(i) = -0.5*x(i)^4 + 4*x(i)^3 - 10*x(i)^2 + 8.5*x(i) + 1;
end
% Plot hasil
plot(x, y, 'b', x, w, 'r');
xlabel('x');
ylabel('y');
legend('Numerik', 'Analitik');
title('Perbandingan Solusi Numerik dan Analitik');
Silahkan Run Script tersebut, disana akan terlihat perbedaan solusi antara Metode Euler dan Metode Analitik.
Tugas Latihan !
Gambarlah Grafik antara hasil Analitik dan Metode Euler untuk persamaan diberensial biasa berikut :
AhmadDahlan.NET – Metode Simpson adalah metode integral numerik yang digunakan untuk menghitung luas daerah yang dibatasi oleh persamaan garis f(x). Pendekatan yang dilakukan lebih detail dari Pendekatan Trapezoid dimana Daerah di bagi ke dalam dua bangun trapesium.
Solusi Integral Metode Simpson
Gambar pada sisi kiri menunjukkan metode integral analitik untuk menghitung luas wilayah yang dibatasi oleh garis f(x) yang mulai dari a sampai b. Pada gambar pada sisi kanan adalah metode Simpson yang digunakan untuk menghitung luas daerah yang diarsis menggunakan metode numerik Simpson.
Metode ini Simpson sama dengan metode Trapezoida namun luas wilayah di bagi ke dalam dua trapseium sehingga hasil perhitungan jauh lebih teliti dibandingkan dengan metode Simpson. Lebar trapesium di bagi menjadi dua bagian dengan lebar h.
Metode Simpson dibagi ke dalam dua kelompok yakni :
Metode simpson 1/3
Metode simson 3/8
A. Metode simpson 1/3
Metode ini mengaproksimasi integral dengan menggunakan polinomial kuadrat. Rumus integral Simpson 1/3 untuk fungsi f(x) pada interval [a,b] adalah sebagai berikut:
function integral = simpson_1_3(f, a, b, n)
if mod(n, 2) == 1
error('n harus genap');
end
h = (b - a) / n;
x = a:h:b;
fx = arrayfun(f, x);
result = fx(1) + fx(end);
result = result + 4 * sum(fx(2:2:n));
result = result + 2 * sum(fx(3:2:n-1));
integral = result * h / 3;
end
% Contoh penggunaan
f = @(x) sin(x);
a = 0;
b = pi;
n = 100; % harus genap
integral = simpson_1_3(f, a, b, n);
fprintf('Nilai integralnya adalah: %.6f\n', integral);
B. Metode Simpson 3/8
Metode ini mengaproksimasi integral dengan menggunakan polinomial kubik. Rumus integral Simpson 3/8 untuk fungsi f(x) pada interval [a,b] adalah sebagai berikut:
function integral = simpson_3_8(f, a, b, n)
if mod(n, 3) ~= 0
error('n harus kelipatan 3');
end
h = (b - a) / n;
x = a:h:b;
fx = arrayfun(f, x);
result = fx(1) + fx(end);
result = result + 3 * sum(fx(2:3:n));
result = result + 3 * sum(fx(3:3:n));
result = result + 2 * sum(fx(4:3:n-3));
integral = result * 3 * h / 8;
end
% Contoh penggunaan
f = @(x) sin(x);
a = 0;
b = pi;
n = 99; % harus kelipatan 3
integral = simpson_3_8(f, a, b, n);
fprintf('Nilai integralnya adalah: %.6f\n', integral);
E. Tugas
Buatlah sebuah solusi integral numerik metode trapzoida untuk fungsi berikut
∫_𝑎^𝑏(3𝑥3−5)𝑑𝑥
dan
∫^b_a(cos𝑥+2)𝑑𝑥
keterangan
ganti nilai b dengan tanggal lahir anda masing-masing dan nilai a dengan bulan lahir.
Kerjakan masing-masing soal dengan metode 1/3 dan 3/8.
dimana x0=a dan x1=b dan h = b – a. Pada umumnya turunan suku ke-2 f”, biasanya dapat diabaikan sehingga persamaan ini dapat disederhanakan menjadi :
\int^b_af(x)dx=\frac{h}{2}[f(x_0)+f(x_1)]
Pendekatan Trapezoida hanya bisa digunakan untuk persamaan yang turunan keduannya nol. Grafik dari pendekatan Trapezoida seperti berikut ini :
Grafik pada bagian kiri adalah grafik yang menunjukkan persamaan f(x). Metode Trapezodia digunakan untuk menghitung luas daerah yang menyerupai bentuk trapesium di bawah garid f(x) dengan batas dari a sampai b.
Perhatikan daerah antara garis f(x) dengan garis lurus antara f(x1) dan f(x0). Metode trapezodia tidak mempu menghitung luad daerah tersebut sehingga jika nilainya terlalu besar, Metode ini tidak menunjukkan hasil yang teliti.
A. Studi Kasus Solusi Integral
Misalkan ada sebuah persamaan f(x) = x2 dengan batas atas b = 6 dan a = 2. Bandingkan hasil keduanya dengan metode Trapezodia dengan Metode Analitik!
AhmadDahlan.NET – Misalkan ada sebuah fungsi x dengan bentuk y = axn. jika a dan n adalah sebuah konstanta maka turunan y terhadap x didapatkan sebagai berikut :
\frac{dy}{dx} =n(a)x^{n-1}
Contoh : Sebuah persamaan posisi sebuah partikel yt = 3t2-5t, tentukan persamaan kecepatan dari partikel tersebut!
v_t = y' = \frac{dy}{dt}= 2(3)t^{2-1}-1(5)t^{1-1}
v_t=6t-5
Persamaan ini dapat diselesaikan dengan dengan fungsi Matlab.
Turunan di Matlab dapat dilakukan dengan perintah syms. jadi misalkan persamaan yt = 3t2-5t ingin diturunkan terhadap variabel t maka perintah syms t.
Perintah diff yang digunakan untuk turunan fungsi yang bersifat numerik.
contoh perintahnya di Matlab dapat dilakukan dengan script
syms x
yt=3*t^2-5*t
vt = diff(yt);
Contoh Latihan di Matlab
Sebuah partikel bergerak dengan persamaan posisi y = 5t3 – 2t2 + 7. Tentukan
AhmadDahlan.NET – Gerak Parabola adalah gerak yang dihasilkan dari perpaduan gerak lurus beraturan (GLB) di sumbu horisontal dan gerak lurus berubah beraturan (GLBB) di sumbu vertikal. Gerak ini bisa terjadi jika resistansi dari hambatan udara sangat kecil sehingga tidak mengubah lintasan bola, kalaupun ada maka resitansi hanya pada sumbu-sumbu x dan y.
Contoh gerak ini paling sederhana adalah menendang bola dengan sudut elevasi tertentu.
A. Analisis Fisis Gerak Parabola
Gerak parabola terjadi pada sebuah benda yang bergerak dengan vektor kecepatan yang membentuk sudut elevasi θ yang lebih besar dari 0o dan lebih kecil dari 90o.
a. Komponen Vektor y
Pada komponen vektor y kecepatan :
V0y = V0 cos θ
t max
Karena bergerak melawan gravitasi maka benda akan mencapai ketinggian maksimum pada saat Vy = 0
AhmadDahlan.NET – Array dapat didefenisikan sebagai sekumpulan nilai atau variable yang tersusun pada baris dan kolom. Array adalah sintaks untuk menunjukkan Matriks dalam bahasa pemograman.
Dalam bahasa Pemograman Matlab, Semua nilai dari variable pada dasarnya disimpan dalam bentuk Array, misalnya
>> B = 5 ;
B =
5
angka 5 ini adalah matriks dengan dimensi 1 x 1. Array ini adalah array paling sederhana yang bisa disimpan dan dioperasikan di Matlab.
A. Mendefenisikan Array di Matlab
Misalkan kita memiliki sebuah vektor posisi dari sebuah partikel dengan persamaan x = 2 i + j – 7z
Vektor ini dapat ditulisakan dengan sintak
>> x = [ 2 1 -7]
x =
2 1 -7
Untuk membuat kolom, kita menggunakan pemisah ; seperti berikut
>> y = [3; x+7; 4]
y =
3
x+7
4
Array dengan dimensi 2 x 3 dapat ditulis dengan bentuk
>> y2 = [1 0 1; 2 0 u]
y2 =
1 0 1
2 0 u
Untuk membuat Array dengan deret tertentu juga bisa dilakukan dengan sintaks loop dari Matlab. Misalnya saya ingin membuat matriks deret yang dimulai dari 3 sampai 11 dengan interval 2.
>> z = [3 : 2 : 11]
z =
3 5 7 9 11
sintak lain jika deret kelipatan 1
>> p = [ -3 ; 5]
p =
-3 -2 -1 0 1 2 3 4 5
B. Adressing Array
Addressing Array adalah fasilitas yang digunakan untuk mendeklarasikan variable berdasarkan indek dari array yang ada. Misalkan saya memiliki Matriks 1 x 8 :
>>y = [2 4 6 7 4 5 0 1]
y =
2 4 6 7 4 5 0 1
kita bisa memangil dan mengoperasikan array pada posisi dan tertentu sesuai dengan kebutuhan. Proses pemanggilan dilakukan berdasarkan alamat elemen matriks yang ada :
Kita juga bisa menyusun array dari colon yang diinginkan mengunakan fasilitas “:”. Misalkan
>> a = [1 0 1; 2 3 4; b c d]
a =
1 0 1
2 3 4
b c d
>>a1 = a(;2)
a1 =
0
3
c
C. Operasi Matematis pada Array
Operasi matematis pada array mengadopsi prosedur operasi matematis pada vektor.
1. Pemjumlahan dan Pengurangan
Penjumlahan dan pengurangan pada vektor bisa dilakukan jika dimensi vektor sama.
\begin{bmatrix}a & b\\ c & d \end{bmatrix} - \begin{bmatrix}p & q\\ r & s \end{bmatrix} = \begin{bmatrix}a-p & b-q\\ c-r & d-s \end{bmatrix}
Misalkan
>> a = [1 -2; 3 4]; b = [2 3; 2 1];
>> a - b =
ans
-1 -5
1 3
2. Perkalian Skalar Pada Matriks.
Perkalian skalar adalah perkalian yang mengalikan elemen skalar dengan vektor pada matriks atau kelipatan skalar dari elemen-elemen yang ada di Matriks.
q\begin{bmatrix}a & b\\ c & d \end{bmatrix} = \begin{bmatrix}qa & qb\\ qc & qd \end{bmatrix}
>> a = 2; b = [1 0; 2 3];
>> a*b =
ans
2 0
4 6
3. Perkalian Vektor Pada Matrik
Operasi perkalian pada matriks dapat dilakukan jika jumlah kolom pada matriks sama dengan jumlah baris yang sama. Misalnya kita mengalikan matriks dimensi a × s dan matriks dimensi s × b, maka hasilnya adalah matrik a × b.
Milsalan kita mengalikan Matriks 1 x 3 dan 3 x 2 akan menghasilkan matriks 1 x 2
Seorang arsitek merancang sebuah bak penampung air dengan bentuk seperti di bawah !
Jika jari-jari bawah dari kerucut adalah 15 m dengan ketinggian asli kerucut adalah 7,5 m sebelum dipotong, maka buatlah program yang dapat digunakan untuk menghitung volume air berdasarkan ketinggian air dalam bak!
Solusi
1. h < 5
Kondisi pertama adalah menghitung Volume Air jika ketinggian kurang dari 5 meter. Jika ketinggian air kurang dari 5 meter maka yang dipenuhi dari penampuangan air hanya bagian dasar lantai sehingga dapat di asumsikan
Maka solusinya adalah ketinggian air dapat dihitung dengan rumus :
V_{1}=V_{KB}-V_{KK}
Dengan jari-jari kerucut kecil tidak lain adalah perbandingan antara Tinggi kerucut kecil dan kerucut besar yakni :
Jika h > 15 maka programnya akan menulis “Tinggi air maksimal 15 meter” dan jika h < 0 maka akan tertulis “Program eror”.
Solusi Umum dalam Bentuk program
h=input('Masukkan ketinggian air dalam meter: ');
if h>15
disp('ketinggian tidak boleh lebih 15 meter')
elseif h < 0
disp('ketinggian tidak boleh minus')
elseif h <= 5
v = (1/3*pi*(1687.5-4*h^3);
fprintf('Volume %7.3f meter kubik.\n',v)
else
v = pi*(1187.5/3+100*(h-5))
fprintf('Volume %7.3f meter kubik.\n',v)
end
AhmadDahlan.NET – Conditional Statement mungkin dapat diartikan harfiah sebagai “Pernyataan Bersyarat” artinya adalah sebuah pernyataan yang dapat dijadikan sebagai dasar atau syarat untuk mengeksekusi perintah lain. Jika syarat terpenuhi akan dilakukan perintah A jika salah maka dilakukan perintah B.
Misalnya ketika seseorang sedang pergi ke KFC membeli ayam, jika ayam ada maka orang tersebut membeli ayam. Jika ayam tidak ada maka biasanya akan ada dua kemungkinan, misalnya langsung pulang atu bisa juga disambungkan dengan kondisi lain seperti membeli Berger setelah itu baru pulang.
Dalam kasus ini Syarat yang dijadikan eksekusi adalah ketersediaan ayam untuk melakukan perintah membeli ayam. Sedangkan eksekuisnya bisa bercabang yakni pulang atau membeli produk lain, tapi dari setiap program harus ada ending instruksi yakni pulang. Namun syarat dalam kasus ini hanya ada satu conditional statement.
Conditional Statement menjadi lebih powerfull dalam Matlab jika digabungkan dengan operator relational. Adapun contoh dan bentuk conditional Statement seperti berikut ini :
if Fgs > w
if price >= 5000
if a == b
if F ~= 0
if (d<h)&(x>7)
if (x~=13)|(y<0)
Statement if secara umum digunakan dalam struktur pohon (three structures) seperti : (1) if – end, (2) if – else – end, (3) if-else-if-else-end dan seterusnya. Tingkat kerumitan dari struktur conditional statement bergatung dari programernya.
A. Struktur if-end (Sequence)
Struktur if-end ini adalah struktur conditional paling sederhana, dimana jika syarat terpenuhi (1) maka eksekusi akan dilakukan jika tidak (0) maka program berakhir. Tipenya lebih ke arah sequence seperti di bawah ini
Contoh masalah dan pemodelan kasus di Matlab :
Sebuah benda bermassa m terikat dengan seutas tali dengan gaya tegangan maksimum 20 N, jika benda dan meja licin maka buatlah mengukur percepatan benda!
Solusinya adalah memberikan input gaya ke dalam program dengan syarat jika F > 20 maka hitung percepatan dengan persamaan
a= \frac {F - 20}{m}
Contoh Programnya Seperti ini :
F=input ('masukkan gaya');
m=input ('masukkan massa');
if F>20
a = (F-20)/m
end
fprintf('Percepatan benda %5.2f',a)
B. Struktur if-else-end (Decision)
Struktur if-else-end adalah struktur algoritma dimana syarat yang dijadikan sebagai logikal statement mengarahkan ke dua pilihan, jika masukan bernilai 1 maka mengeksekusi perintah A, jika pilihan bernilai 0, maka akan mengeksekusi perintah B, setelah perintah dieksekusi maka program akan berhenti.
Bagan Struktur if-else-end sebagai berikut :
Struktur ini masih bisa digabungkan lagi dengan algoritma if-else-end. Umumnya struktur ini disebut dengan if-elseif-else-end. Strukturnya sebagai berikut :
Contoh program ini seperti pengimputan nilai mata kuliah dan IPK misalnya Jika skorenya Lebih besar dari 3,75 maka Nilai A, jika skornya lebih besar 3,25, maka nilai A-, jika tidak maka Nilainya B+, logika ini bisa diteruskan sesuai dengan kebutuhan.
Dalam struktur porgram diatas, program tidaklah power full dengan kata lain jika kita tidak memasukkan nilai yang terdapat dalam program maka program akan error.
Misalnya kita masukkan Skore = 2,0. Skore 2,0 tidak masuk karena program hanya mengenal angka paling kecil >2,75. Skore 2,75 pun akan membuat program error. Untuk membuat struktur lebih baik sebaiknya perintah terkahir hanya berisi perintah yang tidak memenuhi syarat pertama dan kedua seperti :
Skore=input ('masukkan skore');
if Skore > 3,75
disp ('A')
elseif Skore > 3,25
disp ('A-')
else
disp ('B+')
end
Dengan demikian program sudah mencakup seluruh kemungkinan angka yang bisa dimasukkan.
Latihan
Seorang arsitek merancang sebuah bak penampung air dengan bentuk seperti di bawah !
Jika jari-jari bawah dari kerucut adalah 15 m dengan ketinggian asli kerucut adalah 7,5 m sebelum dipotong, maka buatlah program yang dapat digunakan untuk menghitung volume air berdasarkan ketinggian air dalam bak!
AhmadDahlan.NET – Operasi relasional dan logika dalam bahasa pemograman adalah layanan yang digunakan untuk melakukan operasi matematis dalam Matlab. Operasi relasional dan logika ini dilakukan dengan bantuan operator matlab.
Matlab mengenai tiga jenis operator yakni :
Operator Aritmatika
Operator Relasional
Operator Logika
A. Operator Aritmatika
Operator Aritmatika digunakan dalam melakukan operasi numerik, adapaun list Operatir Aritmatika dalam Matlab adalah :
Simbol
Fungsi
=
Tanda sama dengan
+
Pemjulahan
–
Pengurangan
*
perkalian
/
Pembagian
\
pembagian sisi kiri
./
Pembagian array kakan
.\
pembagian array kiri
^
Pangkat
.^
Pangkat pada array
B. Operator Relasional
Operator relasional adalah operator yang digunakan untuk melakukan operasi membandingkan dua varibel dalam bahasa pemrograman. Operator ini dapat dijumpai dalam bahasa pemograman tingkat tinggi dan menengah seperti Matlab.
Adapaun list dan daftar dari Operator Matematis adalah :
Operator
Fungsi
>
Besar Dari
<
Kecil dari
>=
Sama dengan atau lebih besar dari
<=
Sama dengan atau kecil dari
==
sama dengan
~=
Tidak sama dengan
Ouput dari operator rasional ini ditampilkan dengan nilai 0 atau 1, 0 berarti pernyatan salah dan 1 berarti pernyataan benar.
Pada penggunaan operasi relasional dalam Array hanya bisa dilakukan pada Array dengan dimensi yang sama. Sistem kerjanya adalah membandingkan setiap elemen dari masing-masing array.
>> x = 2; y=3;
>> x > y
ans =
0
Hasil 0 ini menunjukkan jika pernytaan yang disusun salah. Dalam Operasi relasional, outputnya bisa digunakan untuk mentriger program lain dalam matlabm misalnya jika x lebih besar dari y, maka jumlahkan P + Q.
Contoh penggunaan operator relasional dalam pada Array
>> x = [1 2 3]; y = [4 5 6 7]
>> x == y
Matrix dimensions must agree.
Hasil eksekusi ini menunjukkan bahwa eksekusi opertor relasional tidak berjalan karena dimensi dari Matrix x dan y tidak sama. Jika dilakukan dengan cara yang sama.
>> a = [2 3; 1 4]; b = [3 2; 1 2];
>> a > b
ans =
0 1
1 0
C. Operator Logika
Operator logika adalah perintah yang berisi logika kondisional. Logika ini bisa dilanjutkan di program looping dalam Matlab untuk maslaah komputasi yang lebih komplek.
Adapun daftar operator logika
Operator
Simbol
Kesimpulan
AND
&
1 & 1 = 1 1 & 0 = 0 0 & 1 = 0 0 & 0 = 0
OR
|
1|1 = 1 1|0 = 1 0|1 = 1 0|0 = 0
NOT
~
~1 = 0 ~0 = 1
XOR*
xor
1 xor 1 = 0 1 xor 0 = 1 0 xor 1 = 1 0 xor 0 = 0
*built in function
Contoh penggunaan Operator Logika di Matlab
>> 2>3 & 3<2+4
ans
0
>> 2>3 | 3<2+4
ans
1
>> x = 2<3
x =
1
>> ~x
ans =
0
D. Urutan Operasi
Dalam pemgoraman praktis operasi matematis memiliki urutan yang akan dikerjakan. Misalnya 2 + 3 x 2 hasilnya sama dengan 8 karena perkalian lebih dahulu sebelum pemjulahan. Pada matlab urutan operasi matematis berdasarkan 8 urutan.
Urutan dari Tertinggi
Operator
1
Parentheses ( )
2
Exponensial
3
Logika NOT ( ~ )
4
Multiplication , Substarction
5
Addition , substarction
6
Relational operator
7
Logical AND ( & )
8
Logical OR ( | )
Latihan
Selesaikan permasalahan sederhana berikut dengan Matlab
Sebuah mobil bergerak dipercepat dari kecepatan 10 m/s dengan percepatan 2 m/s2. Tentukan kecepatan dan jarak mobil, 10 detik kemudian!
Sebuah benda jatuh bebas dan menyentuh permukaan tanah pada 10 detik setelah benda tersebut jatuh. Berapakah ketinggian awal benda?