Oleh:
Marthen Luther Doko
Gambar 1. Workspace Window yang menampilkan variabel-variabel dari suatu tertentu program
yang sudah dijalankan
Sekarang kita sudah siap untuk menyunting elemen-elemen dalam Array Editor Window. Variabel
dalam Workspace Window dapat dihapus dengan memilih variabel tersebut dan kemudian menekan
tombol delete dari keyboard ataupun memilih delete dari menu edit. Efek dari apa yang kita lakukan
itu adalah sama dengan menuliskan perintah cear nama_variabel dalam Command Window.
Ketiga, variabel didefinisikan dalam berkas script, tetapi nilainya dimasukkan dalam melalui
Command Window. Dalam kasus ini variabel dimasukkan melalui perintah input yang dituliskan pada
berkas script. Adapun bentuk perintah input dapat dinyatakan sebagai berikut
Name_Variabel = input(‘string dengan pesan yang ditulis di Command Window’)
Ketika perintah ini dieksekusi maka string yang menyatakan pesan akan meminta pengguna untuk
memasukkan nilai.
Perintah input juga dapat digunakan untuk memasukkan string dan bentuk perintah input menjadi
Name_Variabel = input(‘Pesan untuk memasukkan nilai’, ‘s’)
Dimana tanda ‘s’ dalam perintah mengidentifikasikan bahwa karakter yang dimasukkan akan berniai
string.
Gambar 2.
PERINTAH-PERINTAH OUTPUT
Ada dua perintah yang digunakan untuk menghasilkan keluaran di layar, yaitu disp dan fprintf atau
dapat juga untuk menyimpan keluaran kedalam suatu berkas tertentu. Perintah-perintah ini juga dapat
digunakan di Window Command, dalam berkas-berkas script, dan juga dalam berkas-berkas fungsi
(function files). Ketika kedua perintah ini digunakan dalam suatu berkas script, maka keluaran yang
dihasilkan ditampikan di Command Window.
Perintah disp. Perintah ini digunakan untuk menampilkan elemen dari suatu variabel tanpa
memperlihatkan nama variabel tersebut atau digunakan untuk memperlihatkan teks di layar. Format
dari perintah disp adalah sebagai beriktu
disp(nama variabel) atau disp(‘teks sebagai string’)
Ada dua hal yang perlu diketahui ketika kita menggunakan perintah ini, yaitu
Setiap kali perintah disp dieksekusi, tampilan akan muncul dalam baris baru
Hanya satu variabel yang dapat ditampilkan dengan perintah disp. Jika elemen dari dua
variabel perlu ditampilkan bersama, maka variabel baru yang mengandung elemen-elemen
yang harus didefinisikan terlebih dahulu dan kemudian baru bisa digunakan untuk
menampilkan elemen-elemen tersebut.
Dalam banyak situasi kita perlu menampilkan data dalam table dan ini dapat dilakukan dengan mula-
mula mendefinisikan suatu variabel di mana larik dengan bilangan yang hendak ditampikan. Setelah
itu dengan menggunakan perintah disp untuk menampilkannya.
Perintah fprintf. Perintah ini dapat digunakan untuk menampilkan keluaran dalam bentuk teks atau
data pada layar monitor atau juga disimpan dalam suatu berkas tertentu. Dengan perintah ini—tidak
seperti pada perintah disp—keluaran dapat diformat. Sebagai contoh teks dan nilai-nilai numeric dari
variabel-variabel dapat saling diintermix dan ditampilkan dalam baris yang sama. Demikian juga
dengan format dari bilangan dapat diatur. Dengan adanya banyak pilihan yang ada dalam perintah ini,
perintah ini dapat menjadi panjang sekali dan rumit.
Ada dua cara yang umum digunakan dalam penggunaan perintah fprintf.
Pertama, penggunaan perintah fprintf untuk menampilkan teks. Untuk itu dibutuhkan baris perintah
berikut.
fprintf(‘teks yang dituliskan dalam bentuk string’)
Dengan perintah fprintf memungkinkan pengguna untuk memulai suatu baris baru di tengah-tengah
string dan ini dapat dilakukan dengan menyisipkan \n di depan karakter yang akan dimulai pada baris
baru. Contoh berikut memperihatkan penggunaan pilihan ini.
Karakter \n disebut sebagai suatu escape character dan karakter ini digunakan untuk mengendalikan
penampilan data atau string dilayar monitor. Ada dua dua escape code yang sering digunakan bersama
program MATLAB, yaitu \b dan \t. Escape character \b untuk mewakili backspace sedangkan \t untuk
menyatakan horizontal tab.
Untuk memulai suatu baris baru dengan perintah fprintf, suatu escape character \n harus ditempatkan
di depan string yang akan ditampilkan.
Kedua, penggunaan perintah fprintf untuk menampilkan campuran teks dan data numeric dan untuk
itu perintah fprintf akan mengambil bentuk
fprintf(‘teks sebagai string %-5.2f teks tambahan’, nama_variabel)
Tanda persen (%) menyatakan tempat di mana bilangan disisipkan pada teks. Sedangkan elemen
pemformatan -5.2f dapat dijelaskan sebagai berikut. Tanda minus (-) dinyatakan sebagai flag dan
bersifat optional. 5.2 menyatakan lebar field dan presisi dan ini juga bersifat optional. Sedangkan f
merupakan notasi yang diberikan untuk fixed point. Ada beberapa notasi umum yang digunakan
untuk penempatan bilangan, yaitu
No Notasi Kegunaan
1 e Notasi pemangkatan (eksponensiasi) menggunakan huruf kecil (contoh 1.43569e+001)
2 E Notasi pemangkatan (eksponensiasi) menggunakan huruf besar (contoh 1.43569e+001)
3 f Notasi fixed point (contoh 123.4567890)
4 g Notasi e yang terpendek
5 G Notasi E atau f yang terpendek
6 i Integer
Informasi mengenai notasi tambahan tersedia dalam bantuan yang disediakan oleh MATLAB lewat
menu Help.
Operator Relasional. Operator relasional yang digunakan dalam lingkungan MATLAB adalah: <
(kurang dari), > (lebih besar dari), <= (lebih kecil atau sama dengan), >= (lebih besar atau sama
dengan), == (sama dengan), dan ~= (tidak sama dengan). Ada beberapa catatan yang dapat dibuat
tentang operator relasional.
Operator relasional digunakan sebagai operator arihmetik dalam suatu ekspresi matematika.
Hasilnya dapat digunakan dalam operasi-operasi matematika yang lain, dalam pengalamatan
array, bersama dengan perintah-perintah MATLAB yang lain, seperti if dan lain sebagainya
untuk mengontrol aliran program.
Ketika dua bilangan diperbandingkan, hasilnya adalah 1 (logical true) jika pembamdingan,
menurut operator realsional benar, dan 0 (logical false) jika hasil pembandingannya salah.
Jika dua scalar diperbandingkan, hasilnya adalah scalar dengan nilai 1 atau 0. Jika dua array
diperbandingkan (hanya array dengan ukuran yang sama yang dapat diperbandingkan),
pemabandingan dilakukan elemen demi elemen, dan hasil ahirnya adalah array logical dengan
ukuran yang sama dengan elemen-elemennya bernilai 1 atau nol, tergantung hasil
pembandingan.
Jika scalar diperbandingkan dengan array, scalar diperbandingkan dengan setiap elemen dari
array, dan hasilnya adalah suatu array logical dengan 1 dan 0 sebagai elemennya.
Untuk itu memperjelas konsep operator relasional dan operator logika, kita akan melihat beberapa
contoh berikut ini.
>>3>6
ans =
0
>>a=6<10
ans =
1
>>y=(5<10)+(7>8)+(5*5= = 100/4)
y=
2
Untuk contoh yang terakhir 5<10 itu benar jadi nilainya 1 , 7>8 itu salah jadi nilainya 0, sedangkan
5*5 == 100/4 benar jadi nilainya satu sehingga nilai totalnya adalah 1.
>>d=c>=b
d=
01 1 0
>>b==c
ans=
0 0 1 0 0 1 0
>>b~=c
ans=
1 1 0 1 1 0 1
>>f=b-c>0
f=
1 0 0 1 0 0 1
>>B=A<=2
B=
1 0 0
1 0 1
0 0 1
Hasil dari suatu operasi relasional dengan vector, yang mana vector-vektor dengan elemen-
elemen 0 dan 1 disebut sebagai vector logical dan dapat digunakan untuk pengalamatan
vector. Ketika suatu vector logical digunakan untuk pengalamatan vector lain, maka vector itu
akan mengekstrak dari elemen vector dalam posisi dimana vector logical mempunyai nilai-
nilai 1. Sebagai contoh
>>q=[8 12 9 4 23 19 10]
q=
8 12 9 4 23 19 10
>>w=q<=10
s=
1 0 1 1
>>v=q(w)
v=
8 9 4 10
>>z=q(q<=10)
z=
8 9 4 10
Vektor numerik dan array dengan elemen-elemennya yang bernilai 0 dan 1 tidaklah sama
dengan vector logical dan array logical dengan elemen-elemennya yang bernilai 0 dan 1.
Vektor numeric dan array tidak dapat digunakan untuk pengalamatan. Vector logical dan
array logical dapat digunakan untuk operasi marithmetik. Ketika vector logika dan array
logical diguanakan dalam operasi arithmetica akan berubah masing-masing menjadi vector
numerk dan array numeric
Urutan dalam operasi (order of precedence): Dalam ekspresi matematika yang melibatkan
operasi relasional dan operasi logika, operasi arithmetic (+, -, *,/,\) mempunyai urutan operasi
yang lebih tinggi dari operasi reasional. Operasi relasional sendiri mempunya urutan
precedence yang sama dan dievaluasi dari kiri ke kanan. Tanda kurung dapat digunakan untuk
merubah urutan precendence. Sebagai contoh.
>>2+3<11/2
ans=
1
>>2+(3<11)/2
ans=
2.50
Dari perintah yang terakhir ini (3<11) akan dievaluasi terlebih dahulu dan bernilai 1 baru kemudian
dibagi 2 dan ditambahkan kepada 2 sehingga hasilnya adalah 2.50.
Operator-operator Logical. Operator-operator logical yang ada dalam lingkungan MATLAB adalah
sebagai berikut. Pertama, operator & (AND). Operator & beroperasi pada dua operand (A dan B), jika
keduanya benar maka hasilnya adalah 1, jika yang lain yang terjadi maka hasilnya adalah 0. Sebagai
contoh A&B. Kedua, operator | (OR). Operator | beroperasi pada dua operand ( A dan B— sebagai
contoh A|B). Jika salah satunya atau kedua-duanya benar, maka hasilnya adalah benar atau right dan
nilainya adalah (1). Sedangkan bila kedua-duanya salah maka hasilnya adalah salah atau false dan
nilainya adalah 0 . Ketiga, operator ~ (NOT). Operator ~ ini hanya beroperasi pada satu operand (A)
dan akan menghasilkan lawan dari operand sebagai contoh ~A menghasilkan bukan A. Hasilnya
adalah benar (true) jika operandnya salah (false) dan benar jika operandnya benar (true). Ada
beberapa hal yang harus diperhatikan dalam menggunakan operator-operator logical.
Seperti pada operator relasional, operator logical dapat digunakan bersama-sama dengan
scalar dan array.
Juga seperti pada operator relasional digunakan sebagai operator arithmetik dalam ekspresi-
ekspresi matematik. Hasilnya dapat digunakan dalam operasi-operasi matematika lainnya,
dalam pengalamatan array, dan besama dengan perintah-perintah MATLAB yang lain seperti
if dan lain sebagainya untuk mengontrol aliran dari program.
Operator-operator logical mempunyai bilangan-bilangan sebagai operand. Bilangan yang
tidak nol adalah benar (true), dan bilangan nol adalah salah (false).
Operasi logical AND dan OR dapat mempunyai operand kedua-duanya skalar, kedua-duanya
array atau salah satunya scalar dan yang lainya adalah array. Jika kedua-duanya adalah scalar,
hasilnya adalah scalar 0 atau 1. Jika keduanya array, maka kedua-duanya harus mempunyai
ukuran yang sama dan operasi dilaksanakan elemen demi elemen. Hasilnya adalah array
dengan ukuran yang sama yang elemen-elemennya merupakan bilangan 1 dan nol sesuai
dengan hasil dari operasi yang dilakukan. Jika salah satu operandnya adalah scalar dan yang
lainnya adalah array, operasi logical dilaksanakan antara scalar dan masing-masing elemen
dalam array dan hasilnya adalah array dengan ukuran yang sama dan dengan elemen-
elemennya bernilai 0 dan 1.
Operasi logical NOT hanya mempunyai satu operand. Jika digunakan dengan scalar akan
memberikan hasil scalar juga dengan nilai 0 atau 1. Bila digunakan dengan array maka
keluarannya adalah array dengan ukuran yang sama dan 1 untuk elemen-elemen matriks asal
merupakan bilangan yang bukan nol, sedangkan 0 untuk elemen-elemen matriks asal adalah
nol.
Untuk memperjelas konsep ini mari kita perhatikan contoh-contoh berikut ini.
>>4&7
ans =
1
>>a=4 | 0
ans =
1
>>~32
ans =
0
Untuk contoh pertama, 4 dan 7 kedua-duanya bukan bilangan nol sehingga hasilnya adalah benar
(true) dan nilainya 1. Untuk contoh kedua, 5 atau 0 dimasukkan ke variable a dan dengan
demikian 1 dimasukkan ke a karena paling tidak salah satu bilangan itu benar (tidak nol).
Sedangkan untuk contoh ketiga NOT 25 (bukan 25) akan menghasilkan 0 karena 25 adalah benar
(true) karena 25 bukanlah bilangan 0. Sekarang kita lanjutkan dengan empat contoh berikut.
>>x=20*((11&0)+(~0)+(0|9)
x=40
Contoh ini menghasilkan sebab hasil dari 11&0 adalah satu, ~0 adalah 0, dan 0|9 adalah 1
sehingga jumalahnya adalah 1+0+1=2. Jadi hasilnya adalah 20x2 = 40.
>>v&w
ans=
1 0 0 1
Contoh ini menghasilkan vector baris dengan elemen-elemennya adalah 1 0 0 1, karena untuk
setiap elemen tidak nol dalam v dan w akan memberikan nilai 1 sedangkan untuk setiap nilai 0
dalam v dan w akan memberikan 0, atau sebaliknya.
>>y=v|w
z=
1 1 1 1
Contoh ini , keluarannya adalah satu vector dengan elemen-elemennya adalah bilangan 1 karena x dan
y benar (true) untuk elemen bukan nol dan 0 jika keadaan sebaliknya yang terjadi
>>~(v+w)
ans =
0 0 0 1
Dalam contoh ini, outcome adalah suatu vector dengan 0 dalam setiap posisi (v+w) bila benar (true),
yaitu dimana elemen-elemennya tidak nol dan 1 dalam setiap posisi (v+w) bila salah (false), yaitu
dimana elemen-elemennya nol.
Fungsi logical bawaan dari MATLAB. Seperi program-program lainnya, MATLAB mempunyai
fungsi-fungsi bawaan (built-in functions) dan fungsi-fungsi logical bawaan juga ada seperti:
Selain itu masih ada beberapa fungsi logical bawaan yang didaftarkan dalam Tabel berikut ini
Tabel
No Fungsi Deskripsi Contoh
1 xor(a,b) Exclusive or. Akan menghasilkan true (benar) >>xor(3,0)
yaitu 1 jika salah satu operandnya true dan yang ans =
lainnya false 1
>>xor(3,-5)
ans =
0
2 all(V) Menghasilkan 1 jika benar (true) apabila semua >>V=[5 3 14 8 6 10];
elemen dalam vector V adalah benar (true),
>>all(V)
yaitu jika elemen-elemenya tidak nol.
Akan menghasilkan 0 (salah—false) jika satu ans =
atau lebih elemennya salah (false). 1
Jika V adalah matriks, perlakukanlah kolom-
kolomnya sebagai vector, akan menghasilkan >>W=[5 3 14 8 0 10];
vector-vektor dengan elemen-elemen 1 atau 0 >>all(W)
ans =
0
3 any(V) Menghasilkan 1 (true) jika setiap elemen dalam >>V=[5 0 14 0 0 10];
suatu vector V adalah benar (true), yaitu
elemen-elemen itu tidak nol.
>>any(V)
Menghasilkan 0 (false) apabila semua adalah
false (bilangan 0). ans =
Jika V adalah matriks, perlakukan kolom-kolom 1
dari V diperlakukan sebagai vector dan
menghasilkan vector dengan elemen-elemen 0 >>W=[0 0 0 0 0 0];
dan 1
>>any(W)
ans =
0
4 find(V) Jika V adalah vector, akan menghasilkan indeks >>V=[0 8 5 6 0 0 1 8];
dari elemen-elemen yang tidak nol >>find(V)
ans =
2 3 4 5 8 9
find(V>d) Jika V adalah vector akan menghasilkan alamat >>find(V>4)
dari elemen-elemen yang lebih besar dari d ans =
(setiap operator relasional dapat digunakan) 2 3 4 9
Operasi dari empat operator logical dapat diringkaskan dalam Tabel berikut ini.
Tabel
Input Output
No A B AND OR XOR NOT NOT
A&B A|B (A,B) ~A ~B
1 false false false false False true true
2 false true false true True true false
3 true false false true True false true
4 true true true true False false false
Tabel
No Urutan Operasi No Urutan Operasi
Kepentingan Kepentingan
(Precedence) (Precedence)
1 1 (paling tinggi) Tanda kurung (jika ada 5 5 Penambahan,
struktur sarang, maka yang pengurangan
terdalam yang paling tinggi
2 2 Pemangkatan 6 6 Operator relasional:
>, <, >=, <=, >==,
<==
3 3 Logika NOT (~) 7 7 Logika AND (&)
4 4 Perkalian, pembagian 8 8 (paling rendah) Logika OR (|)
Pernyataan Kondisional.
Dalam lingkungan pemrogramaan script MATLAB, pernyataan kondisional adalah perintah yang
memungkinkan MATLAB untuk membuat keputusan apakah harus mengeksekusi sekelompok
perintah-perintah tertentu yang mengikuti pernyataaan kondisional atau harus melewati (skip)
perintah-perintah ini. Dalam suatu pernyataan kondisional, ekspresi kondisional harus ditulis. Jika
ekspresi ini benar, maka kelompok perintah yang mengikuti ekspresi kondisional itu akan dieksekusi,
jika tidak, yaitu jika ekspresi itu tidak benar (false), maka MATLAB akan melompati atau melewati
kelompok perintah-perintah tersebut. Bentuk dasar dari suatu pernyataan kondisional adalah sebagai
berikut.
if ekspresi kondisional yang terdiri atas operator-operator relational dan atau operator logika
Untuk pernyataan kondisional, ada dua hal yang harus diperhatikan, yaitu:
Pernyataan-pernyataan kondisional dapat merupakan suatu bagian dari suatu program yang
ditulis dalam bentuk berkas script atau berkas fungsi dalam MATLAB.
Bahwa untuk setiap pernyataan if selalu ada pernyataan end
Yang perlu kita camkan bahwa dalam lingkungan pemrograman script MATLAB, pernyataan if pada
umumnya digunakan dalam tiga struktur, yakni if-end, if-else-end dan if – elseif – else –end. Dan kita
akan mulai dengan yang pertama.
Struktur if – end. Struktur ini dapat digambarkan secara skematis seperti yang diperlihatkan dalam
Gambar. Dalam gambar ini diperlihatkan pseudo-code umum yang mnyatakan bagaimana struktur ini
dituliskan dalam suatu program dan juga suatu flow-chart yang menunjukkan aliran informasi dalam
struktur if-end dalam pseudo-code tersebut.
Perintah-1
Perintah-2
:
:
Perintah-m Pernyataan
if ekspresi kondisional if false
perintah-a
perintah-a true
…..
…..
perintah-k Kelompok Perintah
end
Perintah-11
Perintah-12
: end
:
Perintah-1n
Gambar
Pada saat program dieksekusi, program akan melaksanakan perintah-perintah yang tersusun secara
sekuensial dan ketika sampai pada pernyataan if maka ekspresi kondisional akan dievaluasi. Jika
pernyataan ini benar (true—bernilai 1) maka program langsung mengerjakan kelompok perintah di
bawah pernyataan if dan menuju end kemudian melanjutkan ke perintah-perintah setelah struktur if-
end. Jika hasil evaluasi terhadap ekspresi kondisional dan ternyata salah (false—nilai 0), maka
program akan melewati semua perintah (kelompok perintah) setelah if dan langsung menuju end.
Untuk mengilustrasikan hal ini, perhatikanlah contoh program untuk menghitung upah lembur. Upah
lembur akan dihitung jika jam kerja mingguan, yaitu 40 jam dilewati. Misalkan gaji mingguan dari
seorang pekerja adalah upah_mingguan maka upah_harian yang diterima adalah upah_mingguan/5.
Pernyataan if akan benar (true) jika jam > 40 dan upah_perjam =upah_harian/8. Program sederhana
ini diperlihatkan dalam script berikut ini.
Struktur if-else-end. Struktur ini diperlihatkan dalam bentuk skematik dalam bentuk diagram alir dan
pseudo-code seperti yang diperlihatkan dalam Gambar. Pada struktur ini, ketika pernyataan if
ditemukan maka ekspresi kondisional akan dievaluasi. Jika pernyataan ini benar (true—bernilai 1),
maka computer akan langsung mengerjakan kelompok perintah yang berada di bawah perintah if
hingga dan jika telah selesai maka control akan membawa ke pernyaan end. Tetapi apabila evaluasi
ekspresi kondisional tidak benar (false—bernilai 0) maka computer akan segera mengerjakan semua
perintah (Kelompok perintah II) yang berada di bawah perintah else dan setelah itu langsung menuju
perintah end.
Perintah-1
Perintah-2
:
:
Perintah-m Pernyataan
if ekspresi kondisional if false
perintah-11
perintah-12 true
…..
…..
perintah-1k Kelompok Perintah I Kelompok Perintah II
else
Perintah-21
Perintah-22
: end
:
Perintah-2n
end
Gambar
Contoh berikut mengilustrasikan penggunaan struktur if-else-end dalam program script MATLAB.
Dalam contoh hendak dihitung volume air yang ditampung dalam suatu menara air yang mempunyai
geometri seperti yang diperlihatkan dalam Gambar berikut ini.
Diameter atas (DTop) = 50 m Menara air ini terdiri atas dua bagaian, yaitu
DTop bagian atas yang berbentuk kerucut terpancung
yang terbalik sedangkan bagian bawah adalah
sebua selinder. Tepat pada garis tengah dari
16 m DH menara ditempatkan suatu pelampung sebagai
indicator untuk menyatakan ketinggian air dalam
menara air. Dari gambar di sebelah kiri ini, kita
dapat mengatakan bahwa untuk ketinggian air
dalam menara dari 0 hingga 24 m adalah 225Π
m3. Sedangkan untuk bagian kerucut terpancung
24 m 30 m H yang terbalik tinggi airnya adalah H-24. Dengan
demikian kita akan memberpoleh DH dengan
persamaan: 30 + (20/16)(H – 16). Sehingga
volume kerucut terpancung 1/3Π (h-24) (152+
15(15+1.25(H-16)+(15+1.25(H-16)2), atau
Gambar volume keseluruhan menara air adalah:
Hal ini mengindikasikan bahwa ketika H <= 24 maka Vol(H) = 225ΠH sedangkan untuk H > 24,
maka
function v =vol_menara_air(H)
%Fungsi untuk menghitung volume menara air hingga ketinggian H yang tertentu
%program ini melibatkan pernyataan if-else-end
%Fungsi ini dipanggil dari Command Window dengan mengetikkan vol_menara_air(H)
%kemdian diikuti oleh penekanan tombol enter
%clear;
clc;
%menghitung volume menara
if H<=24
v=225*pi*H;
else
v=225*pi*H +pi*(H-24)*[15+1.25*(H-16)+ (15+1.25*(H-16))^2]/3;
end
Untuk menggunakan Command window kita dapat memanggil fungsi ini hanya dengan menuliskan
vol_menara_air(H) untuk H yang tertentu, misalnya
>> vol_menara_air(H)
Ans =
>>VolumeMenaraAir= vol_menara_air(H)
VolumeMenaraAir=
Struktur if-elseif-else-end. Struktur ini diperlihatkan secara skematik dalam Gambar. Dalam Gambar
ini terdapat flow chart yang menyatakan aliran informasi logis dari suatu program ketika
menggunakan struktur control ini dan pseudo-code berbasis MATLAB yang dapat ditulis berdasarkan
struktur ini. Salam struktur ini, ketika ekpresi kondisional-1 dievaluasi dan benar (true), maka
computer langsung mengerjakan kelompok perintah I yang berada langsung di bawah pernyataan if
setelah itu langsung menuju pernyataan end. Bila pada evaluasi ekspresi kondisional-1 memberikan
hasil salah (false), maka computer mengevaluasi ekspresi kondisional-2 yang mengikuti perintah
elseif. Jika hasil evaluasi terhadap ekspresi kondisional-2 ternyata benar (true), maka computer akan
langsung mengerjakan kelompok perintah II yang berada tepat di bawah perintah elseif dan setelah itu
langsung ke pernyataan end. Tetapi jika hasilnya adalah salah (false), maka compute akan
mengerjakan kelompok perintak III yang berada langsung di bawah pernyataa else dan setelah itu
langsung menuju ke pernyataan end.
Yang perlu kita catat disini juga adalah bahwa beberapa perintah elseif dapat digunakan dalam suatu
program script MATLAB tergantung dari kebutuhannya. Demikian juga seperti yang diberikan dalam
Gambar maka kelompok perintah untuk setiap elseif harus dituliskan tepat di bawah dari elseif yang
terkait. Hal ini mengandung arti bahwa lebih banyak kondisi dapat dilibatkan dengan menggunakan
banyak elseif. Dan juga pernyataan else hanyalah optional. Dengan menlibatkan banyak pernyataan
elseif, maka kita tidak memerlukan else. Jika setiap dari pernyataan kondisional benar (true), maka
kelompok perintah yang sesuai akan dieksekusi, tetapi jika sebaliknya maka kelompok perintah yang
sesuai tidak dieksekusi.
Perintah-1
Perintah-2
:
:
Perintah-m Pernyataan false
if ekspresi kondisional-1 if
perintah-a
perintah-a true
….. Pernyataan false
….. elseif
perintah-k Kelompok Perintah I
elseif ekspresi kondisional-2 true
Perintah-21
Perintah-22
: Kelompok Perintah II
:
Perintah-2l
Else Kelompok Perintah III
Perintah-31
Perintah-32
: end
:
Perintah-3n
End
Gambar
Contoh berikut adalah contoh struktur ini. Dalam contoh ini, dihitung nilai perolehan seorang
mahasiswa untuk mata kuliah tertentu sejak ujian dan program script MATLABnya adalah sebagai
berikut.
% ---------------------------------------
% Program untuk melihat kegunaan struktur
% if .... else if...else if....end
% ---------------------------------------
clear all;
clc;
disp('------------------------------------------------------');
disp('Program Latihan sederhana untuk menghitung Nilai Ujian');
disp('------------------------------------------------------');
Pernyataan switch-case. Ada metoda lain yang digunakan mempengaruhi aliran progrman.
Pernyataan ini menyediakan cara untuk memilih salah satu dari kelompok perintah dari beberapa
kelompok perintah. Struktur dari pernyataan switch-case dan pseudo-codenya diberikan dalam
Gambar. Jika nilai-1 dari case pertama dievaluasi dan nilainya benar (true), maka computer akan
melaksanakan kelompok perintah I dan setelah itu langsung ke pernyataan end. Tetapi apabila
evaluasi dari case pertama ternyata salah (false), maka computer langsung akan mengevaluasi case
yang kedua yaitu mengeevaluasi apakah kasus nilai-2 ini benar atau tidak. Jika nilai-2 ini benar (true),
maka computer akan langsung mengerjakan keleompok perintah II yang berada tepat di bawah case
yang kedua setelah itu langsung menuju ke pernyataan end. Akan tetapi jika hasil evaluasi ternyata
salah (false) maka computer akan mengevaluasi pilihan dalam case ketiga. Jika pilihan pada case
ketiga ini, yaitu nilai-3 benar, maka computer langsung mengerjakan kelompok perintah III dan
setelah itu pergi ke pernyataan end. Jika pilihan tidak sesuai dengan maka computer langsung memilih
pilihan keempat dan melaksanakan kelompok perintah IV, setelah itu lalu ke pernyataan end. Struktur
switch case ini dapat lebih dari 4. Contoh berikutnya memperlihatkan suatu program script dengan
struktur switch … case … otherwise… end yang mempunyai case hingga 8.
Ekspresi switch dapat merupakan scalar atau string. Biasanya ekspresi switch merupakan varibel yang
mempunyai nilai yang dimasukkan berupa scalar atau string. Namun demikian, ekspresi matematika
yang melibatkan nilai yang perlu dimasukkan dan dapat dievaluasi. Beberapa hal yang perlu menjadi
catatan adalah:
Yang mengikuti perintah switch adalah satu atau lebih perintah case. Setiap perintah case
mempunyai nilainya sendiri-sendiri yang bisa saja merupakan scalar atau string dan diikuti oleh
kelompok perintah yang sesuai.
Setelah perintah case yang terakhir dan kelompok perintah yang terkait dengannya maka harus
ada satu perintah otherwise yang diikuti oleh kelompok perintah yang terkait dengan perintah
otherwise.
Ada satu perintah end yang menutup struktur ini.
Nilai daripada ekspresi switch dalam perintah switch diperbandingkan dengan nilai-nilai yang dekat
dengan pernyatataan-pe3rnyataan case. Jika ada yang cocok ditemui, maka kelompok perintah yang
mengikuti pernyataan case yang dieksekusi. Hanya satu kelompok perintah yang diekselusi, yaitu di
anara case yang cocok dan case berikutnya setelah case yang cocok, atau otherwise jika itu adalah
case yang terakhir sebelum otherwise. Setelah itu perintah yang dieksekusi terakhir adalah perintah
end. Ada beberapa hal juga yang harus diperhatikan agar struktur switch-case dapat bekerja dengan
baik, yaitu
Jika terdapat lebih dari satu atau banyak nilai yang cocok, maka nilai pertama yang cocok
yang dikerjakan.
Jika tidak ada lagi nilai yang cocok yang ditemukan dan pernyataan otherwise ada
(otherwise hanyalah pernyataan yang berupa pilihan—optional saja) maka kelompok
perintah antara perintah other wise dan end yang akan dieksekusi.
Jika tidak adalagi pilihan yang cocok dan tidak ada perintah otherwise, maka tidak ada lagi
kelompok perintah yang harus dieksekusi.
Suatu pernyataan case dapat memiliki lebih dari satu nilai. Hal ini dilakukan dengan
mengetikkan nilai-nilai itu dalam bentuk: {nilai1, nilai2, nilai3,…}. Bentuk seperti ini tidak
dibahas dalam buku ini dan disebut sebagai cell array. Pernyataan case ini akan dikerjakan,
jika salah satu dari nilai-nilai itu cocok.
Perintah-1
Perintah-2
:
:
Perintah-m case nilai-1 false
switch ekspresi switch
case nilai-1
perintah-11 true
perintah-12
…..
perintah-1k Kelompok Perintah I case nilai-2
case nillai-2
perintah-21
perintah-22 true false
:
perintah-2l
case nilai-3
perintah-21 Kelompok Perintah II
perintah-22
:
: case nilai -3
perintah-2m
otherwise nilai-4
perintah-21
perintah-22
:
otherwise
: Kelompok Perintah III nilai-4
perintah-2m
end
... end Kelompok PerintahIV
...
Gambar
Contoh berikut ini digunakan untuk menghitung isi dari beberapa wadah dengan bentuk geometris
tertentu.
% --------------------------------------------------------
% Program latihan Sederhana untuk struktur switch ... case
% Matlab Programming..
% --------------------------------------------------------
clear all;
clc;
disp('-------------------------------------------------------------');
disp('Program Latihan Sederhana untuk menghitung Luas dan isi benda');
disp('-------------------------------------------------------------');
disp('Pilih Luas dan Isi Bangun Geometri yang akan Anda Hitung!');
disp('1. Perhitungan Luas Selubung kotak');
disp('2. Perhitungan Isi kotak');
disp('3. Perhitungan Luas Permukaan Silinder');
disp('4. Perhitungan Isi Silinder');
disp('5. Perhitungan Luas permukaan Bola');
disp('6. Perhitungan Isi Bola');
disp('7. Perhitungan Luas Selubung Kerucut');
disp('8. Perhitungan Isi Kerucut');
disp(' ');
pilih=input('Masukkan pilihan anda (antar 1 hingga 8): ');
switch pilih
case 1
disp('Hitung Luas permukaan Kotak');
disp('---------------------------');
panjang=input('Masukkan panjang kotak = ');
lebar=input('Masukkan Lebar kotak = ');
tinggi=input('Masukkan Tinggi kotak = ');
luas_kotak=2*(panjang*lebar)+2*(panjang*tinggi);
disp(['luas kotak = ' num2str(luas_kotak)]);
case 2
disp('Hitung Isi Kotak');
disp('----------------');
panjang=input('Masukkan Panjang kotak = ');
lebar=input('MasukkanLebar kotak = ');
tinggi=input('Masukkan Tinggi kotak = ');
isi_kotak=panjang*lebar*tinggi;
disp(['Isi kotak = ' num2str(isi_kotak)]);
case 3
disp('Hitung Luas Selubung Silinder');
disp('-----------------------------');
jari_jari_selinder=input('Ukuran jari-jari silinder = ');
tinggi_silinder=input('Tinggi silinder = ');
luas_selubung_silinder=(2*pi*jari_jari_selinder*tinggi_silinder) + 2*(pi*jari_jari_selinder^2);
disp(['Luas selubung silinder =' num2str(luas_selubung_silinder)]);
case 4
disp('Hitung Isi Silinder');
disp('-------------------');
jari_jari_selinder =input('jari-jari silinder = ');
tinggi_silinder =input('tinggi silinder = ');
volume_silinder=pi* jari_jari_selinder ^2*tinggi_silinder;
disp(['Isi silinder = ' num2str(volume_silinder)]);
case 5
disp('Hitung Luas selimut Bola');
disp('------------------------');
jari_jari_bola =input('jari-jari Bola = ');
luas_selimut_bola=4*pi* jari_jari_bola ^2;
disp(['Luas selimut bola = ' num2str(luas_selimut_bola)]);
case 6
disp('Hitung Isi Bola');
disp('---------------');
jari_jari_bola =input('jari-jari Bola = ');
isi_bola=4*pi* jari_jari_bola ^3/3;
disp(['Isi Bola adalah: ' num2str(isi_bola)]);
case 7
disp('Hitung Luas selimut Kerucut');
disp('---------------------------');
jari_jari_alas_kerucut =input('Jari-jari Alas Kerucut = ');
tinggi_kerucut =input('Tinggi Kerucut = ');
luas_kulit_kerucut=(pi* jari_jari_alas_kerucut*(tinggi_kerucut^2+tinggi_kerucut^2)^0.5);
disp(['Luas Kulit Kerucut = ' num2str(luas_kulit_kerucut)]);
case 8
disp('Hitung Isi Kerucut');
disp('------------------');
tinggi_kerucut=input('Masukkan tinggi kerucut: ')
jari_jari_alas_kerucut =input('jari-jari Alas Kerucut = ');
isi_kerucut=(pi* jari_jari_alas_kerucut ^2*tinggi_kerucut)/3;
disp(['Isi Kerucut adalah: ' num2str(isi_kerucut)]);
otherwise
disp('Elo ngawuur banget pilihan harus 1 s/d 8!!!')
end
LOOP
Metoda loop dalam setiap bahasa pemrograman merupakan metoda lain untuk mengubah aliran dari
suatu program. Dalam suatu loop, eksekusi dari suatu perintah atau kelompok perintah diulang
beberapa kali sesuai dengan pengulangan yang diinginkan. Setiap putaran eksekusi disebut sebagai
pass. Jika pengulangannya lima kali maka ada lima pass dalam looping yang dilakukan. Ada dua
perintah loop yang digunakan dalam MATLAB, yaitu loop for-end dan loop while-end. Kita akan
mulai dengan yang pertama.
Loop for-end. Untuk struktur loop for-end, eksekusi dari satu perintah tertentu atau satu kelompok
perintah tertentu dilakukan berulang dengan jumlah pengulangan yang telah ditentukan di awal loop.
Struktur dari loop for-end ini diperlihatkan dalam Gambar. Dalam gambar ini diperlihatkan pseudo-
code di bagian kiri dan flowchart yang terkait di sebelah kanan. Dalam struktur ini, a adalah counter
awal yang diberikan b adalah beda di antara nilai counter sedangkan l adalah nilai counter terakhir.
Atau lebih sering digunakan istilah untuk a adalah pass pertama (first pass).
Dalam struktur looping for-end, eksekusi dari perintah atau sekelompok perintah dilakukan secara
berulang dengan jumlah pengulangan yang sudah ditentukan sebelumnya. Hal ini dilakukan dengan
cara menambahkan putarannya dengan beda yang diberikan di awal. Dari loop yang diberikan dalam
Gambar, kita mencatat beberapa hal.
Indeks dari loop dapat saja berupa nama variabel apa saja dan ini biasa dengan menggunakan i, j,
k, m dan n. Tapi yang perlu diperhatikan adalah untuk penggunaan i dan j. Sebaik penggunaan
dari kedua variabel i dan j dihindari karena dalam MATLAB, i dan j telah digunakan untuk
mendefinisikan bilangan imajiner.
Dalam pass pertama k = a dan computer mengeksekusi perintah-perintah atau kelompok perintah
antara perintah for dan end kemudian computer kembali untuk for pada pass kedua. Sekarang k
mendapat nilai yang baru yaitu k + b, dan kelompok perintah di antara for dan end dieksekusi
berdasarkan nilai k yang baru. Proses ini berjalan terus hingga kepada pass terakhir l. Dan
program tidak akan kembali ke perintah for. Sebagai contoh, jika k = 1:3:10, ada 4 loop dan nilai
k pada setiap loop adalah 1, 4, 7 dan 10.
Kenaikan b dapat saja negatif sebagai contoh k = 24:-3:3 akan memberikan delapan pass, yaitu
24, 21, 18, 15, 12, 9, 6, 3
for k = a:b:l i = a;
perintah-1
perintah-2 perintah-1
. . . perintah-2
. . . . . .
. . . . . . i=i+b
perintah-m perintah-m
end
Tidak
i=l ?
Ya
end
Gambar
y = y + (-1)^k*xrad^2*k/factorial(2*k)
Dengan demikian script dari program sederhana yang dibuat akan terlihat sebagai berikut
function y=cosinusTaylor(x,n)
%cosinusTaylor digunakan untuk menghitung cos dengan menggunakan
%deret Taylor, dengan argumen input masing-masing adalah:
%x sebagai sudut dalam derajat dan n adalah jumlah suku dalam
%deret Taylor
format long g
xrad=x*pi/180;
sigma = 0;
for k=0:n-1
sigma = sigma +(-1)^k*xrad^(2*k)/factorial(2*k);
end
y = sigma;
Dan hasilnya untuk ans =
0.707106781186546
>> cosinusTaylor(45,10)
ans =
beberapa n adalah
>> cosinusTaylor(45,8)
0.707106781186547
>> cosinusTaylor(45,12)
ans =
0.707106781186547
>> cosinusTaylor(45,15)
ans =
0.707106781186547
>> cosinusTaylor(45,20)
ans =
0.707106781186547
Dari hasil ini kita melihat bahwa mulai n = 10 nilai sinus sudah tetap untuk ketelitian 15 angka
dibelakang koma. Ini berarti dengan mengambil n yang lebih besar dari 10 hanya akan memperbesar
waktu komputasi.
Contoh 2. Diminta untuk membentuk matriks dengan dimensi mulai tertentu di mana elemen-elemen
matrik dihitung dari a(k,l)=k^1.25+(1.5*l)dengan nilai l dihitung mulai dari 1 hingga dimensi sedankan l
dimulai dari dimensi hingga 1 dengan beda -1. Juga pada akhir program dihitung determinan, invers dan eigen
dari matriks yang paling akhir dibentuk. Program tersebut ditunjukkan berikut ini.
% ---------------------------------------
% Program latihan sederhana dengan MATLAB
% Matlab Programming untuk proses looping
% ---------------------------------------
clear all;
clc;
disp('--------------------------------------------------------');
disp('Program Latihan sederhana untuk menghitung harga-harga' );
disp('dari elemen suatu matriks dengan a(k,l)=k^1.25+(1.5*l),');
disp('nilai determinannya, nilai inversnya, dan nilai eigennya');
disp('--------------------------------------------------------');
dimensi=input('dimensi matriks = ');
for k= 1:dimensi
for l=dimensi:-1:1
a(k,l)=k^1.25+(1.5*l)
end;
end;
determinan=det(a)
inversi=inv(a)
nilaieigen=eig(a)
Ketika program ini dijalankan maka kita dapat melihat hasilnya sebagai berikut, maka matriks
terakhir yang diperoleh akan nonsingular jika dimensi matriks adalah dua, tetapi jika dimensi matriks
adalah tiga maka matriks yang dihasilkan adalah matriks yang singular.
Loop while-end. Struktur while-end digunakan dalam keadaan dimana looping atau pengulangan
tidak diketahui di awal proses dan ini biasanya terjadi untuk perhitungan yang menggunakan nilai
coba-coba dan kondisi yang tercapai bila galatnya cukup kecil. Struktur ini dinyatakan dalam pseudo-
code dan flow chart di dalam Gambar. Evaluasi dilakukan di awal dan bila ekspresi kondisi
memenuhi, maka computer mengerjakan perintah-perntah di antara while dan end. Jika tidak
memenuhi, maka computer menghentikan looping dan menuju ke pernyataan end.
EksKon
While ekspresi kondisional
perintah-1
perintah-2 perintah-1
. . . perintah-2
. . . . . .
. . . . . .
perintah-m perintah-m
end
end
Gambar
Agar suatu struktur while - - - end dapat dieksekusi dengan sepatutnya, maka ada beberapa hal yang
perlu diperhatikan.
Ekspresi kondisional dalam perintah while harus paling tidak satu variabel.
Variabel dalam ekspresi kondisional harus diberi nilai ketika MATLAB mengeksekusi perintah
while pada pertama kalinya
Paling tidak satu dari variabel dalam ekspresi kondisional harus dimasukkan nilai baru dalam
perintah-perintah yang berada di antara perintah while dan end. Kalau tidak, ketika looping mulai
berjalan ia tidak akan berhenti karena ekspresi kondisional tetap benar (true).
Untuk memperjelas konsep ini kita akan membahas beberapa problema yang ketika diprogramkan
dengan script harus menggunakan looping dari jenis ini.
Contoh 1. Dalam contoh pertama ini kita akan menghitung berapa jumlah ember yang dibutuhkan
untuk mengosongkan suatu bak air berbentuk kotak dengan panjang, lebar dan tinggi yang tertentu
dan dengan ember dengan volume tertentu. Dalam program sederhana ini, inputnya adalah panjang,
lebar dan tinggi dari bak (dalam meter), dan volume dari ember yang digunakan (dalam liter).
Sedangkan proses pertamanya adalah menghitung volume bak air. Karena panjang, lebar, dan tinngi
bak air dalam meter, maka volumenya perlu dikonversikan ke lite dengan mengalikannya dengan
1000. Proses kedua adalah menghitung jumlah ember yang dibutuhkan untuk mengosongkan bak ini
dilakukan dengan menggunakan perintah dalam struktur while - - - end seperti yang ditunjukkan
dalam program berikut ini.
% ---------------------------------------
% Program latihan sederhana untuk looping
% Script Programming dari MATLAB
% --------------------------------------
clear all;
clc;
disp('--------------------------------------------------------');
disp('Program Latihan sederhana untuk menghitung jumlah ember ');
disp('dibutuhkan untuk mengisi atau mengosongkan suatu bak air');
disp('(volume bak dan volume ember yang diketahui!');
disp('--------------------------------------------------------');
tinggi_bak=input('Tinggi bak air adalah (m) = ');
pangjang_bak=input('Panjang bak air adalah (m)= ');
lebar_bak=input('lebar bak air adalah (m) = ');
Bak_Air= pangjang_bak*lebar_bak*tinggi_bak*1000;
vember=input('Volume ember(ltr) adalah = ');
nember=1;
while Bak_Air > 0
Bak_Air=Bak_Air-vember;
nember=nember+1;
%Bak_Air
%nember
end
disp(['Jumlah ember air, agar bak penuh/kosong adalah : ' num2str(nember-2)]);
Contoh 2. Sekarang kita memodifikasi program untuk menghitung cos x dengan menggunakan
struktur while - - - end. Dengan struktur ini kita akan menyetop iterasi ketika nilai suku deret Taylor
itu sudah cukup kecil, yaitu 0.00000001. Hal ini berarti bahwa kita akan mengambil nilai suku deret
Taylor yang menyebabkan
Dengan mengambil analisis yang sederhana untuk rangkaian ini, dioda dianggap ideal dan kapasitor
dianggap tidak mempunyai muatan listrik pada awalnya—pada t = 0. Ketika dioda on, tegangan listrik
dan arus pada beban R, masing-masing adalah
V 0 sin ( ωt )
V R=V 0 sin ( ωt ) dan I R =
R
i C =ωCV 0 cos ( ωt )
− t−t ¿
( )
V R=V 0 sin ( ω t ) e
( ( ) )
RC
¿
Ketika dioda mati (switches off), maka tIn,tE dan seterusnya dihitung dari kondisi iR = -iC. Dioda akan
hidup lagi ketika tegangan sumber Vs mencapai nilai sebesar nilai dari teganan pada beban VR (waktu
tB dalam Gambar.
Dengan kenyataan ini, kita dapat menyusun script program MATLAB untuk menggambarkan profil
tegangan pada beban VR dan tegangan sumber sebagai fungsi dari waktu t dalam domain 0 ≤ t ≤ 60 (t
dalam milidetik). Untuk itu kita menyusun program script sebagai berikut.
%program sederhana untuk melihat profil tegangan beban dan tegangan sumber
%dalam suatu rangkaian rectifier sederhana vs adalah tegangan sumber, vR adalah
%tegangan beban, f=60 adalah frequensi, C kapasitas kapasitor, R adalah tahanan beban
%v0 adalah tegangan sumber, iR adalah arus yang melalui beban, dan iC adalah arus
%yang melalui kapasitor
v0=input('Masukkan nilai tegangan sumber (volt) : ');
C=input('Masukkan nilai kapasitas kapasitor (mikro farad) : ');
RL=input('Masukkan nilai tahanan beban (ohm) : ');
tf=60e-3; f=60;
w=2*pi*f;
clear t vR vs
t=[0:0.04e-3:tf];
n=length(t);
keadaan= 'on';
for ii=1:n
vs(ii)=v0*sin(w*t(ii));
switch keadaan
case 'on'
vR(ii)=vs(ii);
iR=vs(ii)/RL;
iC=w*C*v0*cos(w*t(ii));
iTot = iR+iC;
if iTot <= 0
keadaan ='off';
tIn = t(ii);
end
case 'off'
vR(ii)=v0*sin(w*tIn)*exp(-(t(ii)-tIn)/(RL*C));
if vs(ii) >= vR(ii)
keadaan='on';
end
end
end
plot(t,vs,'--',t,vR,'k','linewidth',2)
xlabel('Waktu (detik)');
ylabel('Tegangan (Volt)')
Kalau program script ini dieksekusi untuk V0 =12 volt, Beban RL = 1800 ohm dan kapasitas kapitor
adalah C= 45 mikro farad, seperti yang terlihat berikut ini.
>> penyearah_arus
Masukkan nilai tegangan sumber (volt) : 12
Masukkan nilai kapasitas kapasitor (mikro farad) : 45e-6
Masukkan nilai tahanan beban (ohm) : 1800
>>
Untuk input yang diberikan, maka profil tegangan vs waktu akan diberikan dalam Gambar. Tetapi bila
script ini V0 =12 volt, Beban RL = 1800 ohm dan kapasitas kapitor adalah C= 5 mikro farad, seperti
yang terlihat berikut ini.
Gambar
>> penyearah_arus
Masukkan nilai tegangan sumber (volt) : 12
Masukkan nilai kapasitas kapasitor (mikro farad) : 5e-6
Masukkan nilai tahanan beban (ohm) : 1800
>>
Untuk input yang diberikan, maka profil tegangan vs waktu akan diberikan dalam Gambar.
Gambar
Loop-loop yang menyarang dan pernyataan kondisional yang menyarang Loop dan pernyataan
kondisional dapat dibuat menyarang (nested) satu di dalam lainnya. Hal ini berarti bahwa satu loop
dan atau satu pernyataan kondisional akan berada di dalam loop dan/atau pernyataan kondisional
lainnya. Tidak ada batasan hingga berapa loop dan pernyataan dapat dibuat menyarang. Tetapi suatu
hal yang perlu diingat bahwa setiap if, case, for, dan while harus mempunyai satu end yang sesuai.
Dalam Gambar diperlihatkan struktur for - - - end yang menyarang.
for k1=1:n1
for k2:n2
for k3:n3
for k4:n4
perintah-1
perintah-2 loop terluar
. . . .
. . . . loop-loop yang menyarang
perintah-n
end
end
end
end
Gambar
Gambar ini memperlihatkan bahwa struktur ini terdiri atas satu loop terluar dan ada tiga loop yang
menyarang di dalamnya. Urutan operasi dari struktur ini adalah ketika struktur ini dieksekusi, maka
indeks for pertama mendapat nilai satu dan langsung masuk ke for kedua dan indeks for kedua ini
mendapat nilai 1 juga. Operasi masuk ke for ketiga dan mendapat indeks 1 setelah itu ke for keempat
dan indeks for keempat mendapat nilai 1 dan langsung mengerjakan perintah-1, kemudian perintah
ke-2 hingga ke-n setelah itu indeks loop terdalam naik 1 point hingga indeksnya menjadi 2 dan
mengerjakan perintah-1, perintah-2, hingga perintah-n begitu seterusnya hingga loop terdalam
dilakukan sebanyak n4 kemudian computer akan mencek kembali loop ke-3 dan ternyata indeksnya
baru 1 dan indeks ini naik satu point dan proses memasuki kembali loop paling dalam dan melakukan
proses selama n4 kali lalu computer menaikkan indeks menjadi 2 dan kembali ke loop terdalam dan
melakukan proses sebanyak n4, yaitu melaksanakan perintah-1 hingga perintah-n kemudian kembali
ke loop ketiga begitu seterusnya sehingga loop ke-3 dikerjakan sebanyak n3 kali. Sekarang computer
menuju ke loop ke dua dan indeknya bertambah 1 point dan masuk kembali ke loop kedua dan indeks
mulai dari 1 dan masuk ke loop terdalam dan melakukan looping sebanyak n4 kali dan keluar ke loop
3 dan indeks loop ketiga naik satu point dan kembali ke loop terdalam begitu seterusnya hingga
indeks loop 3 menjadi n3. Komputer sekarang kembali ke loop di atasnya dan melakukan hal yang
sama hingga n2 kali dan seterusnya hingga keluar ke loop terluar dan loop terluar kemudian indeksnya
naik menjadi 2 demikan seterusnya hingga loop terluar berulang sebanyak n 1 kali.
Ada dua contoh yang akan dibahas yang menyangkut loop-loop yang menyarang ini. Yang pertama,
kita akan menghitung matrik C sebagai hasil kali dari dua matriks A dan B. Syarat dari perkalian
matriks ini adalah jumlah kolom matriks A harus sama dengan jumlah baris dari matriks B. Kalau
matriks A berukuran n x m, dan baris B berukuran m x l, maka hasil perkalian antara A dan B adalah
matriks C dengan ukuran n x l. Dengan demikian kita akan menemukan persamaan umum yang
menyatakan elemen ke(i,j) dari matriks C, yaitu
m
C ( i , j )=∑ aik b kj
k=1
Untuk semua i = 1, 2, …,n dan semua j =1, 2, …, l.
Dengan demikian dapat disusun script untuk problema ini sebagai berikut.
C=
25 16 16 19
21 14 17 22
26 20 21 18
Kata cadang (reserved word) function harus ditulis dalam huruf kecil (ingat bahwa semua kata
cadang dan perintah-perintah bawaan di lingkungan MATLAB harus ditulis dalam huruf kecil).
Daftar argument-argumen output harus diletakkan dalam kurung siku. Jika argumen output lebih dari
satu maka argument-argumen tersebut harus dipisahkan oleh tanda koma (,). nama_fungsi dapat
berupa huruf, angka, dan karakter underscore. Aturan penamaan sama dengan aturan yang diterapkan
pada nama variabel seperti yang telah dibahas di Bab 2. Daftar argumen input bisa berisi satu atau
lebih argument. Argumen-argumen, entah untuk input maupun output bisa berupa scalar atau array
(vector atau matriks).
Argumen-argumen Input dan Output Argumen-argumen input dan output masing-masing
digunakan untuk mentransfer data masuk ke dalam dan keluar dari file fungsi. Suatu file fungsi bisa
saja tidak mempunyai argumen output dan fungsi-fungsi seperti ini adalah fungsi untuk memplot
grafik atau menuliskan data pada suatu file database.
Baris-baris H1 dan Teks Bantuan (H1 line and help text lines) Baris-baris ini adalah baris
komentar yang didahului oleh tanda %. H1 adalah baris pertama setelah baris definisi fungsi. Baris ini
biasanya berisi nama dan definisi singkat dari file fungsi. Baris-baris help text adalah baris-baris yang
mengikuti baris H1. Baris-baris text help ini berisi setiap instruksi yang terkait dengan input dan
output.
Badan File Fungsi Badan dari suatu file fungsi mengandung code (program) yang pada kenyataannya
melakukan tugas komputasi tertentu. Code yang membentuk suatu fungsi dapat menggunakan semua
fitur yang ada untuk pemrograman dalam lingkungan MATLAB, yang meliputi perhitungan-
perhitungan, pemasukan nilai, fungsi-fungsi bawaan atau file fungsi buatan, struktur control dan lain
sebagainya.
VARIABEL-VARIABEL LOKAL DAN GLOBAL. Semua variabel yang berada dalam file fungsi
adalah variabel-variabel local (argument-argumen input dan output, dan setiap variabel yang
dimasukkan dalam file fungsi). Ini berarti bahwa variabel-variabel yang didefinisikan hanya dikenal
dalam file fungsi. Ketika suatu file fungsi dieksekusi, MATLAB menggunakan suatu area dari
memori yang terpisah dari workspace (ruang memory dari Command Window dan file-file script).
Dalam suatu file fungsi variabel input dimasukkan nilai setiap kali fungsi itu dipanggil. Variabel-
variabel ini lalu digunakan untuk untuk melakukuan komputasi di dalam fungsi sebagai mana
peruntukkan fungsi itu. Ketika komputasi selesai dilakukan oleh fungsi, nilai-nilai argument output
ditransfer ke dalam variabel-variabel yang digunakan ketika fungsi tersebut dipanggil. Dengan semua
ini diartikan bahwa suatu file fungsi dapat mempunyai nama seperti variabel-variabel dalam
Command Window atau file script. Fungsi tidak mengenal variabel-variabel dengan nama yang sama
yang telah diberikan nilai diluar fungsi tersebut. Nilai-nilai yang diberikan kepada variabel-variabel
ini di dalam file fungsi tidak akan merubah peruntukkannya.
Setiap file fungsi mempunyai variabel lokalnya sendiri-sendiri yang tidak akan berbagi di dalam file
fungsi yang lain atau dengan workspace dari Command Window dan file-file script. Karena itu adalah
mungkin untuk membuat beberapa variabel yang ada dalam suatu file fungsi tertentu menjadi variabel
yang umum—yang dapat dikenal oleh beberapa file fungsi lainya, dan mungkin juga oleh workspace.
Dan dalam lingkungan MATLAB, hal ini dapat dilakukan dengan mendeklarasikan variabel global
dengan menggunakan perintah global yang mempunyai bentuk
global nama_variabel
Lebih dari satu variabel yang dapat dideklarasikan sebagai variabel global dengan menyusun mereka
secara beruurutan dengan memberikan spasi di antara dua variabel global yang berdekatan. Sebagai
contoh
global KONSTANTA_REAKSI TEMPERTUR TEKANAN Kapasitas_Panas
Ada beberapa hal penting yang perlu diperhatikan agar mempermudah pengguna menggunakan
variabel-variabel global dalam merancang file-file function untuk maksud-maksud tertentu sesuai
dengan peruntukkannya, yaitu
Variabel-variabel yang dipilih sebagai variabel global adalah variabel-variabel yang memang
harus digunakan dalam file-file fungsi yang lain dan script utamanya dan variabel-variabel ini
harus dideklarasikan dengan menggunakan perintah global
Perintah global harus ditulis dalam huruf kecil dan harus muncul didepan variabel-variabel yang
digunakan sebagai variabel global. Sangat dianjurkan agar variabel global ditempatkan di atas
dari file
Perintah global harus dimasukkan dalam Command Window dan atau dalam file script untuk
semua variabel yang harus dikenal di workspace.
Nilai variabel dapat dimasukkan atau dimasukkan kembali nilai-nilai tertentu dalam setiap lokasi
yang dideklarasikan global
Sangat dianjurkan untuk menggunakan nama deskriptif yang panjang (dengan menggunakan
huruf besar semuanya) untuk variabel global agar dapat dibedakan dengan variabel-variabel
yang lain—variabel-variabel regular
MENYIMPAN FILE FUNGSI. Sebelum suatu file fungsi dapat digunakan, file itu harus disimpan
terlebih dahulu. Hal ini dapat dilakukan dengan cara yang sama dengan file script seperti yang telah
dijelaskan di Bab 2. Dengan memilih Save As… dari menu File kemudian memilih lokasi tempat
penyimpanan, dan memberikan nama dan kemudian mengklik ok untuk menyimpannya. Hal yang
perlu selalu diingat adalah bahwa file function harus berada dalam direktori yang sama dengan file
script atau file fungsi lainnya yang memanggil file fungsi tersebut. Dan direktori tempat
penyimpanan itu harus merupakan direktori kerja ketika hendak menggunakan file-file yang
dimaksud.
MENGGUNAKAN FILE FUNGSI. Suatu file yang didefinisikan sendiri oleh penggunannya dapat
digunakan seperti pengguna menggunakan fungsi-fungsi bawaan dalam lingkungan MATLAB
seperti yang telah dijelaskan dalam BAB 2. Fungsi yang disusun oleh pengguna dapat dipanggil dari
Command Window, dari file script (program) ataupun dapat dipanggil dari fungsi buatan yang lain.
Yang harus diperhatikan bahwa file fungsi buatan harus disimpan dalam directori kerja (current
directory).
Suatu fungsi buatan dapat digunakan dengan memasukkan output ke dalam variable atau beberapa
variabel (tergantung pada kebutuhan), sebagai bagian dari ekspresi matematika, sebagai argument
bagi fungsi buatan yang lain, atau hanya dengan mengetikkan nama fungsi buatan tersebut dari
Command Window. Dalam semua kasus yang disebutkan, pengguna harus mengetahui dengan tepat
dan pasti apakah dan dari jenis apakah argumen-argumen input maupun output. Argumen input dapat
saja berupa suatu bilangan, suatu ekspresi yang dapat dihitung, atau dapat merupakan suatu variabel
yang mempunyai nilai-nilai yang dimasukkan (assignment values). Argumen-argumen diisi sesuai
dengan posisinya dalam daftar argument input dan hal yang sama juga berlaku untuk argument-
argumen output dalam baris definisi. Ada tiga contoh yang akan dibahas disini.
Yang pertama adalah fungsi, Yang kedua adalah fungsi yang dinyatakan oleh persamaan
f ( x )=x 3.5
√( 2∗x+ 4 )
( x2 +2 )
Untuk contoh pertama ini juga akan kita juga akan melihat bagaimana seharusnya fungsi ini
didefinisikan agar kita bisa menghitung f(x) jika x adalah sederetan nilai yang bisa digunakan untuk
menghasilkan plot f(x) vs x.
Contoh kedua adalah fungsi yang digunakan untuk menghitung akar dari fx dengan metoda Newton-
Raphson dalam fungsi ini terdapat dua output, yakni fungsi itu sendiri, yaitu fx dan turunannya, dfdf.
Contoh ketiga adalah contoh sederhana untuk menghitung kenaikan entalpi bahan jika alat ukur
temperatur yang ada adalah untuk mengukur skala temperatur dalam derajat Fahrenheit dan data
kapasitas yang ada adalah dalam satuan KKal per (kg 0C).
Contoh terakhir akan kita tinjau fungsi dengan dua variabel dalam bentuk tunggal dan dalam bentuk
bila inputnya merupakan array. Fungsi itu adalah
2 2
Kalau kita tuliskan fungsi ini dalam Command Window untuk beberapa nilai x, maka kita akan
menemukan hasil-hasil sebagai berikut
>> a=5
a=
>> b=fungsiX(a)
y=
38.7343
b=
38.7343
Kalau fungsiX(x) akan bisa diakses oleh array, maka fungsi ini perlu dirubah menjadi
function y=funcX(x)
y=x.^3.5.*sqrt(2*x+4)./(x.^2+2)
return
Ketika fungsi ini eksekusi di Command Window dengan argument tertentu memberikan hasil sebagai
berikut.
>> b=[0:3:15]
b=
0 3 6 9 12 15
>> y=funcX(b)
y=
y=
Columns 1 through 14
Columns 15 through 21
>> f=[-5:1:5]
f=
-5 -4 -3 -2 -1 0 1 2 3 4 5
>> y=funcX(f)
y=
Columns 1 through 7
Columns 8 through 11
>>
Untuk contoh yang kedua, kita mempunyai fungsi buatan, yaitu fungsi yang dipakai untuk
menghitung akar dari persamaan polinom berderajat empat, yaitu y = 4x4 – 4x3 + 4x2 -8x -32 =0.
Karena yang digunakan adalah metoda Newton-Raphson, maka kita perlu mendefinisikan suatu file
fungsi dengan dua keluaran, yakni f(x) yang dinyatakan oleh fx dan turunannya yang dinyatakan oleh
dfdx. Dengan demikian file fungsi dapat dibuat sebagai berikut dan disimpan dengan nama
fungsi_nr.m, seperti berikut ini.
Jika fungsi ini dieksekusi dari Command Window untuk beberapa nilai x, maka kita akan melihat
hasil-hasilnya berikut ini.
>> fungsi_nr(5)
ans =
153
>> [a b]=fungsi_nr(5)
a=
153
b=
232
>> x=5;
>> [a b]=fungsi_nr(x);
>> y=[a b]
y=
153 232
function derajatC=FahrenheitToCelcius(F)
%FahrenheitToCelcius adalah fungsi yang digunakan untuk mengkonversi derajat Fahrenheit ke
%derajat Celcius dan disimpan dengan nama yang sama
derajatC=5*(F-32)./9;
Kalau kita mengeksekusi fungsi FahrenheitToCelcius dari Command Window untuk beberapa temperatur
Fahrenheit, maka hasilnya akan ditunjukkan di bawah ini.
>> TF1=120
TF1 =
120
>> TF2=180
TF2 =
180
>> deltaTC=FahrenheitToCelcius(TF2)-FahrenheitToCelcius(TF1)
deltaTC =
33.3333
Sedangkan untuk script entalpi, bila dieksekusi untuk kenaikan temperature dari 120 0F ke 1800F diperlihatkan
berikut ini
>> entalpi
Masukkan suhu awal yang diukur (derajat Fahrenheit): 120
Masukkan suhu akhir yang diukur (derajat Fahrenheit): 180
Masukkan Cp bahan (KKal/der C Kg): 2.5
Jumlah bahan yang dikur perubahan entalpinya (kg) : 100
Perubahan entalpi bahan sebanyak 100 kg untuk kenaikan 33.33 der C adalah : 8333.3333 KKal.
Sekarang kita akan melihat contoh yang terakhir. Jika fungsinya ditulis sebagai fungsi scalar, maka
akan didapatkan fungsi berikut ini
function z=f(x,y)
z=1.50^(-1.50*sqrt(x^2+y^2))*cos(0.25*y)*sin(0.75y)
return
Bila fungsi ini (z.m) dieksekusi dari Command Window untuk nilai x dan y tertentu, misalnya x= dan
y= , maka hasilnya seperti terlihat di bawah ini.
>> u=5
u=
>> v=-2
v=
-2
>> p=z(u,v)
z=
-0.0331
p=
-0.0331
Bila fungsi ini dirubah dalam bentuk array (vector), maka fungsi itu ditulis sebagai
function zarray=f(x,y)
zarray=1.50.^(-1.50*sqrt(x.^2+y.^2)).*cos(0.25*y).*sin(0.75y)
return
Sekarang kalau fungsi ini dieksekusi untuk nilai x dan y tertentu, misalnya x = dan y = , maka
hasilnya dapat dilihat berikut ini.
>> u=[-6:1:6]
u=
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
>> v=[-7:1:5]
v=
-7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5
>> w=zarray(u,v)
w=
-0.0006 0.0006 0.0037 -0.0036 -0.0635 -0.2247 -0.3595 0 0.1695 0.0977 0.0272
0.0016 -0.0016
Bila kita ingin menggambarkan fungsi ini dalam ruang 3 dimensi, maka kita harus mendefinisikan
dahulu vector u yang menyatakan domain dari x dan vector v yang menyatakan domain y setelah itu
kita menentukan mesh grid dalam bidang xy. Kemudian kita juga perlu menghitung nilai z untuk
setiap titik di mesh grid. Baru setelah itu kita dapat menggunakan perintah surf(x,yz). Dan ini
semuanya dilakukan di Command Window. Hasilnya untuk nilai u dan v tertentu diperlihatkan di
bawah ini dan gambar dari fungsi ini di ruang tiga dimensi diberikan dalam Gambar.
>> u=[-6:1:6]
u=
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
>> v=[-7:1:5]
v=
-7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5
>> [x,y]=meshgrid(u,v)
x=
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
y=
-7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7
-6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6
-5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5
-4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4
-3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3
-2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5 5 5 5 5
>> z=zarray(x,y)
z=
-0.0006 -0.0008 -0.0011 -0.0015 -0.0018 -0.0021 -0.0022 -0.0021 -0.0018 -0.0015
-0.0011 -0.0008 -0.0006
0.0004 0.0006 0.0009 0.0012 0.0015 0.0017 0.0018 0.0017 0.0015 0.0012
0.0009 0.0006 0.0004
0.0016 0.0024 0.0037 0.0052 0.0068 0.0081 0.0086 0.0081 0.0068 0.0052
0.0037 0.0024 0.0016
-0.0009 -0.0016 -0.0024 -0.0036 -0.0050 -0.0062 -0.0067 -0.0062 -0.0050 -0.0036
-0.0024 -0.0016 -0.0009
-0.0096 -0.0164 -0.0272 -0.0431 -0.0635 -0.0832 -0.0918 -0.0832 -0.0635 -0.0431
-0.0272 -0.0164 -0.0096
-0.0187 -0.0331 -0.0577 -0.0977 -0.1567 -0.2247 -0.2594 -0.2247 -0.1567 -0.0977
-0.0577 -0.0331 -0.0187
-0.0163 -0.0297 -0.0538 -0.0965 -0.1695 -0.2794 -0.3595 -0.2794 -0.1695 -0.0965
-0.0538 -0.0297 -0.0163
0 0 0 0 0 0 0 0 0 0 0 0 0
0.0163 0.0297 0.0538 0.0965 0.1695 0.2794 0.3595 0.2794 0.1695 0.0965
0.0538 0.0297 0.0163
0.0187 0.0331 0.0577 0.0977 0.1567 0.2247 0.2594 0.2247 0.1567 0.0977
0.0577 0.0331 0.0187
0.0096 0.0164 0.0272 0.0431 0.0635 0.0832 0.0918 0.0832 0.0635 0.0431
0.0272 0.0164 0.0096
0.0009 0.0016 0.0024 0.0036 0.0050 0.0062 0.0067 0.0062 0.0050 0.0036
0.0024 0.0016 0.0009
-0.0016 -0.0024 -0.0037 -0.0052 -0.0068 -0.0081 -0.0086 -0.0081 -0.0068 -0.0052
-0.0037 -0.0024 -0.0016
>> surf(x,y,z)
>> xlabel('x')
>> ylabel('y')
>> zlabel('z')
Gambar
FUNGSI ANONIM DAN FUNGSI INLINE. Fungsi yang didefinsikan sendiri oleh pengguna
(fungsi buatan) dapat digunakan untuk menggunakan fungsi yang sederhana dan ini bisa dilakukan
dengan fungsi anonym atau fungsi inline. Hal ini disebabkan karena kecenderungan makin rumitnya
file script atau file buatan yang dibuat. Jadi dalam kasus ketika nilai dari ekspresi yang relatif
sederhana perlu ditentukan berkali-kali dalam suatu program atau suatu file fungsi buatan, MATLAB
menyediakan pilihan untuk menggunakan fungsi anonym. Fungsi anonym adalah sejenis fungsi yang
didefinsikan sendiri oleh pengguna yang didefinisikan dan langsung ditulis di dalam program
computer (code). Jadi fungsi anonym ini tidak terpisah dalam suatu file fungsi buatan tersendiri dan
dengan demikian fungsi ini langsung dapat digunakan dalam program. Fungsi-fungsi anonym dapat
didefinisikan disemua bagian dari MATLAB, seperti dalam Command Window, dalam file-file script,
dan di dalam fungsi-fungsi buatan yang regular.
Fungsi-fungsi ini mulai diperkenalkan dalam MATLAB 7 dan sekaligus fungsi-fungsi ini
menggantikan fungsi-fungsi inline yang telah digunakan untuk maksud yang sama dalam versi-versi
MATLAB sebelumnya. Tetapi kedua fungsi ini masih bisa digunakan dalam MATLAB dengan versi
yang lebih baru. Namun demikian fungsi-fungsi anonym, namampaknya mempunyai kelebihan dari
pada fungsi-fungsi inline dan dapat kita katakan bahwa fungsi-fungsi inline akan berangsur-angsur
akan keluar dari penggunaannya. Kita akan membicarakan fungsi anonym terlebih dahulu dan baru
kemudian diikuti oleh pembahasan fungsi-fungsi inline.
Fungsi-fungsi Anonim Suatu fungsi anonym adalah suatu fungsi sederhana yang hanya memakan
satu baris saja dalam script dan ini berarti fungsi ini dapat didefinisikan tanpa membuat file-M yanga
baru. Fungsi-fungsi anonym dapat dibentuk dalam Command Window, dalam file script, atau di
dalam fungsi-fungsi buatan yang regular.
Fungsi anonym dibuat dengan mengetikkan perintah berikut ini
Ada beberapa hal yang perlu diperhatikan dalam mengelola fungsi anonym.
Perintah menciptakan fungsi anonym, dan memberikan suatu nilai handle bagi fungsi untuk nama
variabel yang berada di sebelah kiri tanda samadengan (=). Handle dari fungsi menyediakan cara
penggunaan fungsi dan melewatkanya ke fungsi yang lain—hal ini akan kita bahas lebih ditil
nanti
ekspresi terdiri atas suatu ekpresi matematis MATLAB yang valid
Ekspresi matematis bisa saja merupakan ekpresi matematis dengan beberapa variabel bebas.
Variabel-variabel bebas ini didaftarkan dalam daftar_argumen (argument list). Jika ada lebih dari
satu variabel, maka dua variabel terdekat dipisahkan oleh tanda koma(,). Sebagai contoh fungsi
berikut untuk menyatakan lingkaran. Lingkaran=@ (x,y) 25*x^2 + 16*y^2
Expresi matematika dapat mengikutkan setiap fungsi bawaan yang ada dalam lingkungan
MATLAB maupun fungsi buatan yang regular.
Ekspresi harus ditulis sesuai dengan dimensi dari argument karena dalam perhitungan dilibatkan
perhitungan elemen-demi-elemen.
Ekspresi dapat mengikutkan variabel-variabel yang telah terdefinisi terlebih dahulu (predefined
variables) ketika fungsi anonil di definisikan. Sebagai contoh, jika ada tiga variabel p, q dan r
yang didefinisikan (variabel-variabel ini telah diberi nilai tertentu), maka variabel-variabel ini
dapat digunakan dalam suatu fungsi anonym sebagai contoh parabola=@(x) p*x^2+q*x+r.
Hal penting yang perlu dicatat di sini, bahwa MATLAB menangkap nilai-nilai dari variabel-
variabel yang telah terlebih dahulu didefinisikan (predefined variables) ketila fungsi anonym
didefinisikan. Hal ini berarti bahwa jika secara terurut nilai-nilai dimasukkan dalam variabel
yang telah didefinisikan terlebeh dahulu (predefined variables), fungsi anonym tidak berubah.
Fungsi anonym harus diredefinisikan agar supaya nilai-nilai yang baru dari predefined variables
dapat digunakan dalam ekspresi.
Bagaimana menggunakan fungsi anonym Ada dua hal yang dapat dicatat mengenai bagaimana
menggunakan fungsi anonym.
Ketika suatu fungsi anonym didefinisikan, maka fungsi itu dapat digunakan dengan mengetikkan
namanya dan suatu nilai untuk argument (atau argument-argumen) dalam tanda kurung untuk itu
bisa menyimak contoh yang akan disajikan di bawah ini
Fungsi anonym bisa juga digunakan sebagai argument-argumen dalam fungsi-fungsi lain.
Berikut ini akan diberikan bagaimana menbuat fungsi anonym dan memberikan nilai kepada
argument-argumen inputnya
Perhatikan contoh beriku. Fungsinya adalah fungsi yang telah diberikan dalam contoh yang telah
diberikan di sub-bagian yang membahas tentang file fungsi, yaitu
f ( x )=x 3.5
√( 2∗x+ 4 )
( x2 +2 )
Fungsi ini dapat ditulis sebagai fungsiX = @ (x) x^3.5*sqrt(2*x+4)/(x^2+2). Jika fungsi ini di
tuliskan di Command Window dan kemudian dieksekusi, maka kita akan dapat melihat bahwa
fungsiX =
@(x)x^3.5*sqrt(2*x+4)/(x^2+2)
>> A=fungsiX(10)
A=
151.8817
Kalau fungsiX(x) akan bisa diakses oleh array, maka fungsi ini perlu dirubah menjadi
fungsiX =
@(x)x.^3.5.*sqrt(2*x+4)./(x.^2+2)
>> x=[1 2 3 4 5]
x=
1 2 3 4 5
>> y=fungsiX(x)
y=
0.8165 5.3333 13.4441 24.6336 38.7343
Kita juga bisa membuat plot ini dengan memberikan harga-harga x sebagai vector dan kemudian
menghitung y=fungsiX(x) dan kemudian membuat plot y vs x dengan cara
>> x=[0:0.01:5];
>> y=fungsiX(x);
>> plot(x,y)
>> xlabel('Sumbu - x')
>> ylabel('Sumbu - y')
>>
Gambar
fungsiZ =
@(x,y)2.3.^(-1.25*sqrt(x.^2+y.^2)).*cos(0.5*y).*sin(0.8*x)
>> x=[0:2:16]
x=
0 2 4 6 8 10 12 14 16
>> y=[1:9]
y=
1 2 3 4 5 6 7 8 9
>> z=fungsiZ(x,y)
z=
Ada beberapa hal yang perlu diperhatikan terkait dengan fungsi-fungsi inline.
Ekspresi matematika dapat saja mengandung lebih dari satu variabel independent
Setiap huruf apa saja dapat digunakan untuk memberikan nama kepada variabel-variabel yang
ada dalam ekspresi matematika kecuali huruf I dan j karena sudah didefinisikan sebagai bilangan
imajiner oleh MATLAB
Ekspresi matematik yang digunakan bisa mengandung fungsi-fungsi bawaan dari MATLAB
termasuk fungsi-fungsi buatan yang didefinisikan sendiri oleh pengguna
Ekspresi harus ditulis sesuai dengan dimensi dari argument—operasi elemen-demi-elemen atau
perhitungan-perhitungan yang mengikuti aturan aljabar linear
Ekspresi tidak dapat variabel-variabel yang telah terisi nilai terlebih dahulu (preassignment)
Ketika fungsi telah didefinisikan, maka fungsi itu langsung dapat digunakan dengan cara
menuliskan namanya di Command Window lalu menekan tombol enter
Fungsi inline dapat juga digunakan sebagai argument dari fungsi-fungsi yang lain (fungsi-fungsi
bawaan MATLAB maupun fungsi-fungsi yang didefinisikan sendiri oleh pengguna
Perhatikan contoh beriku. Fungsinya adalah fungsi yang telah diberikan dalam contoh yang telah
diberikan di sub-bagian yang membahas tentang file fungsi dan fungsi anonim, yaitu
f ( x )=x 3.5
√( 2∗x+ 4 )
( x2 +2 )
Fungsi ini dapat didefinisikan sebagai fungsi inline dalam Command Window sebagai berikut
FInline =
Inline function:
FInline(x,y) = 2.3.^(-1.25*sqrt(x.^2+y.^2)).*cos(0.5*y).*sin(0.8*x)
>> FInline(10,10)
ans =
1.1315e-007
>> u=[1:2:12]
u=
1 3 5 7 9 11
>> v=[0:1.5:7.5]
v=
0 1.5000 3.0000 4.5000 6.0000 7.5000
>> FInline(u,v)
ans =
function z=Fungsi2var(x,y);
z=1.75.^(-1.25*sqrt(x.^2+y.^2)).*cos(0.6*y).*sin(x);
Jika PlotFungsi dieksekusi dengan mengetikkan PlotFungsi(@Fungsi2var,-8,12,-8,15) dari Command
Window, akan memberikan Matriks A dan Plot seperti yang diberikan dalam Gambar.
>> PlotFungsi(@Fungsi2var,-8,12,-8,15)
A=
Gambar
Melewatkan suatu fungsi anonym ke dalam suatu fungsi function: Untuk bisa menggunakan
fungsi anonym, fungsi f(x,y)=1.75.^(-1.25*sqrt(x.^2+y.^2)).*cos(0.6*y).*sin(x) harus ditulis dulu
dalam bentuk fungsi anonym dan kemudian dilewatkan ke fungsi bawaan PlotFungsi. Karena kalau
kita mendefinisikan fungsi sebagai fungsi anonym dengan fungsi yang sama, akan dihasilkan output
yang sama, maka dengan demikian, fungsi f(x,y) ditulis dengan format anonym dan kemudian
dilewatkan ke dalam fungsi buatan PlotFungsi dengan menggunakan Command Window akan
memberikan hasil seperti berikut ini
fungsi =
@(x,y)1.75.^(-1.25*sqrt(x.^2+y.^2)).*cos(0.6*y).*sin(x)
>> PlotFungsi(fungsi,-8,12,-8,15)
A=
Gambar yang dihasilkan juga persis sama seperti yang diberikan dalam Gambar.
Menggunakan suatu nama Fungsi untuk melewatkan Fungsi ke dalam Fungsi Function Metoda
kedua yang digunakan juga dalam melewatkan suatu fungsi ke dalan fungsi function adalah dengan
mengetikkan nama dari fungsi yang hendak diimport sebagai string dalam argument input fungsi
function. Cara ini dapat digunakan untuk mengimport fungsi-fungsi buatan. Fungsi ini telah
digunakan sebelum metoda handel fungsi diperkenalkan. Seperti yang telah disebutkan bahwa metoda
yang menggunakan handle fungsi lebih mudah dan lebih efisien dan dianjurkan untuk dipilih sebagai
metoda yang akan digunakan.
Ketika fungsi buatan diimport dengan menggunakan namanya, nilai dari fungsi yang diimport di
dalam fungsi function harus dihitung dengan menggunakan perintah feval.
Perintah feval: Perintah feval (yang berarti function evaluate) mengevaluasi nilai dari fungsi untuk
suatu nilai yang diberikan berdasarkan argumen fungsi tersebut. Format dari perintah ini adalah
sebagai berikut.
Nilai yang ditentukan oleh feval dapat dimasukkan pada suatu variabel, atau kalau perintah ini tidak
tanpa suatu assignment, MATLAB menampilkan ans= dan nilai dari fungsi. Ada beberapa hal yang
perlu diperhatikan.
Nama fungsi ditulis sebagai string
Fungsi dapat berupa fungsi buatan atau fungsi bawaan.
Jika ada lebih dari satu argument input, argument dipisahkan satu sama lainnya dengan
menggunakan tanda koma.
Jika lebih dari satu argument, variabel-variabel di sebelah kiri dari tanda sama dengan
(assignment operator) ditulis dalam kurung siku dan dipisahkan oleh tanda koma.
Sebagai contoh, bila kita mengambil nilai dari akar kuadrat 81 maka kita harus menulis
feval(‘sqrt’,81) dan jika kita ingin memperoleh nilai dari sinus pi/6, maka kita harus menulis
feval(‘sin’,pi/6). Jika kedua perintah ini dieksekusi dalam Command Window akan memberikan hasil
sebagai berikut.
Dua contoh sederhana telah menggunakan fungsi bawaan dari MATLAB, yaitu sqrt dan sin. Kita juga
dapat menggunakan perintah feval untuk fungsi-fungsi buatan.
SUBFUNGSI
Suatu file fungsi dapat mengandug lebih dari satu fungsi buatan. Fungsi-fungsi ini diketikkan satu
mendahului yang lainnya. Setiap fungsi selalu dimulai dengan baris fungsi. Fungsi pertama disebut
sebagai fungsi primer dan fungsi-fungsi berikutnya disebut sebagai subfungsi-subfungsi. Subfungsi-
subfungsi ini dapat ditulis satu di dalam yang lain. Nama dari fungsi yang mengandung satu atau lebih
subfungsi atau fungsi primer disimpan sebagai nama fungsi yang akan dipanggil. Di luar fungsi yag
mengandung subfungsi, yaitu di dalam script program, maka yang dipanggil adalah fungsi primer.
Untuk mempertajam konsep pemrograman subfungsi ini kita akan melihat contoh sederhana berikut.
Pengguna diminta untuk membuat suatu fungsi buatan yang digunakan untuk menghitung standard
deviasi dari data-data yang diberikan, persamaan yang digunakan adalah
n
σ=
√ ∑ ( x i−x av )
i=1
n−1
Sedangkan xav dihitung dari
x av =x x2 +¿ x ¿
3+ …+x
1+¿ n
¿
n
Untuk ini kita membuat dua fungsi sebagai subfungsi masing-masing untuk menghitung xav dan
standard deviasi σ dengan nama rataan dan stddev . Kemudian kita membuat fungsi primer yang
bernama simpangan_baku. Dalam penyusunan fungsi rataan telah digunakan struktur while --- end.
Karena struktur ini berulang maka digunakan suatu variabel boneka sigma yang mewakili hasil
penjumlahan setiap putaran. Sigma pada putaran yang terakhir dpakai sebagai jumlah dari nilai-nilai
data yang ada dalam vector x.
function [rata smpbaku]=simpangan_baku(x);
%fungsi yang memberi keluaran rataan dan standard deviasi dari sejumlah n
%data yang disusun dalam vektor x
%fungsi ini pertama-tama akan memanggil fungsi rataan untuk menghitung
%rataa dan setelah itu akan memanggil fungsi sttdev untuk menghitung
%simpangan baku berdasarkan rataan yang dihitung dalam pemanggilan
%sebelumnya
%Anggapan bahwa x dimasukkan dalam bentuk vector maka untuk mengetahui
%jumlah data maka kita harus menghitung panjang vektor x dimana panjang
%vektor x menyatakan jumlah elemen yang terdapat dalam vektor x
function simpbaku=stddev(x,rataX,bil);
%fungsi untuk menghitung simpangan baku dari sejumlah n data yang disusun
%dalam vektor x
beda = x-rataX;
kuadratbeda=beda.^2;
simpbaku=sqrt(sum(kuadratbeda)/(bil-1));
nilai =
80 75 95 60 72 76 78 89 65 80 95 50 81 85 71 83 63 53 55 82 73 98 97
rata =
76.3478
ratanilai =
76.3478
stddeviasi =
13.9532
FUNGSI-FUNGSI MENYARANG (NESTED FUNCTIONS)
Suatu fungsi disebut nested function adalah suatu fungsi yang ditulis sendiri oleh pengguna yang
dituliskan atau ditempatkan dalam fungsi buatan (ditulis juga oleh pengguna) lain. Bagian dalam code
script yang sesuai dengan nested function diawali dengan baris definisi fungsi dan diakhiri dengan
pernyataan end. Suatu statement end harus ditaruh di akhir fungsi yang di dalamnya terdapat nested
function.
Untuk fungsi yang menyarang hanya satu, maka strukturnya adalah sebagai berikut.
function x=fungsi_A(a1,a2);
----------
----------
function y=fungsi_B(b1,b2);
----------
----------
end
----------
----------
end
Untuk struktur ini, ada tiga hal yang patut diperhatikan
Pernyataan-pernyataan end harus ditempatkan pada akhir fungsi_A dan fungsi_B
Fungsi yang disarangkan—fungsi_B dapat mengakses workspace MATLAB untuk fungsi
primer fungsi_A, dan fungsi primer fungsi_A dapat mengakses workspace MATLAB untuk
fungsi_B yang menyarang di fungsi_A. Hal ini mempunyai arti bahwa suatu variable yang
didefinisikan dalam fungsi primer fungsi_A dapat dibaca dan diredefinisikan dalam fungsi_B
yang menyarang pada fungsi primer
fungsi_A dapat memanggil fungsi_B, dan sebaliknya fungsi_B dapat memanggil fungsi_A
Jika ada dua atau lebih dari fungsi yang menyarang dalam level yang sama, maka strukturnya ditulis
sebagai berikut.
function x=fungsi_A(a1,a2);
----------
----------
function y=fungsi_B(b1,b2);
----------
----------
end
----------
----------
function y=fungsii_C(c1,c2);
----------
----------
end
----------
----------
end
Untuk struktur fungsi seperti ini, ada dua hal yang dapat diamati. Pertama, tiga fungsi dapat saling
mengakses workspace dari satu sama lainnya. Kedua, ketiga fungsi ini dapat saling memanggil satu
sama lainnya.
Kita akan mengambil contoh sederhana untuk mempertajam pemahaman kita tentang konsep ini, yaitu
contoh sebelumnya dengan sedikit modifikasi.
Akar-Akar Persamaan
Tidak linear
Dalam aplikasi sains dan rekayasa, metoda pencarian akar dari persamaan tidak linear sangat
dibutuhkan. Contoh pertama yang paling sederhana adalah dalam industri proses kimia, seperti
mencari volume molar dari gas tidak ideal menggunakan persamaan-persamaan gas seperti van der
Waals, Redlich-Kwong, Peng Robinson, Soave-Redlich-Kwong dan lain-lain. Persamaan-persamaan
keadaan gas seperti ini adalah persamaan-persamaan kubik dengan koefisien yang bukan bilangan
bulat yang sederhana yang tidak mungkin dihitung secara manual. Contoh, yang lain adalah mencari
temperatur untuk reaksi-reaksi kimia dalam keadaan setimbang seperti pada reaksi yang terjadi dalam
reformer.
Contoh kedua yang akan kita ambil adalah menghitung suku bunga yang dibutuhkan agar suatu
proyek mencapai titik impasnya. Dengan mengetahui nilai tingkat sukubunga ini seseorang dapat
menyimpulkan apakah proyek yang dievaluasinya layak secara ekonomi. Akar-akar yang dibutuhkan
dari persamaan-persamaan ini adalah akar-akar yang real. Karena itu kita bisa menggunakan metoda
untuk mencari akar persamaan tidak linear yang real, yaitu metoda yang pertama dalam menghitung
akar-akar persamaan tidak linear. Selain itu juga kita akan membahas juga metoda-metoda yang
digunakan untuk menemukan semua akar dari fungsi tidak linear, seperti metoda Horner, dan metoda
Bairstow. Kita akan segera memulai dengan membahas metoda-metoda yang terkait dengan metoda
pencarian akar real dari suatu fungsi yang tidak linear.
Metoda terbuka.
Untuk metoda tertutup ini, yang akan kita tinjau pertama sekali adalah metoda iterasi titik tetap (fixed
point iteration). Kemudian disusul oleh metoda Newton-Raphson dan terakhir kita akan
membicarakan metoda Secant. Sekarang kita akan mulai dengan yang pertama.
Metoda iterasi titik tetap. Secara sederhana, dalam metoda ini kita akan merubah fungsi f(x) = 0
menjadi f(x) = x – F(x) = 0 atau kita dapat menuliskan x = F(x) dengan mengambil suatu nilai xi, kita
dapat mengevaluasi nilai fungsi F(x), yaitu F(xi) dan nilai ini kita sebut xi+1, dengan demikian kita
bisa menuliskan xi+1 = F(xi). Kita akan mengevaluasi apakah nilai x penelusuran ke i + 1 sudah
mendekati nilai x pada penelesuran sebelumnya, yaitu nilai absolut dari (F(xi+1) – F(xi)) cukup kecil
dari eps, misalnya eps = 0.000001 berarti xi+1 adalah akar dari f(x) yang dicari. Itu berarti kita dapat
menuliskan proses iterasi dari metoda ini adalah
x i+1 = F(xi) (1)
Teorema berikut memberikan kondisi cukup untuk eksistensi dan keunikan dari suatu titik tetap (fixed
point).
Teorema. Jika F(x) kontinu dalam interval [a, b] dan F(x)ϵ [a ,b ], maka F mempunyai suatu titik tetap
di dalam [a, b]. Lebih lagi F’(x) ada dalam (a, b) dan
|F’(x)| ≤ μ < 1 untuk semua x ϵ (a , b) (2)
dan p adalah titik tetap yang unik dalam [a, b], di mana p adalah nilai x pada saat F(p) = p.
Bukti: Jika F(a) = a atau F(b) = b, eksistensi dari titik tetap jelas. Anggaplah bahwa tidak demikian
adanya, maka sudah seharusnya benar bahwa F(a) > a dan F(b) < b. Sekarang, kita mendefinisikan
h(x) = F(x) – x; h kontinu pada [a, b], dan lebih lagi,
h(a) = F(a) – a > 0, h(b) = F(b) – b < 0
Teorema nilai antara memberikan arti bahwa ada p ϵ ( a ,b) untuk mana h(p) = 0, jadi F(p) – p = 0 dan
p adalah titik tetap dari F.
Sebagai tambahan anggaplah bahwa bahwa ketidak persamaan (2) berlaku dan bahwa p dan q kedua-
duannya adalah titik tetap dalam [a, b] dengan p ≠ q. Dengan teorema nilai rata-rata (mean value
theorem), ada suatu bilangan ξ di antara p dan q , dan karena itu berada dalam [a, b] dengan
Yang mana merupakan suatu kontradiksi. Kontradiksi ini harus datang dari satu-satunya supposisi,
p≠q. Dan karena itu p = q dan karena itu titik tetapa di dalam [a, b] adalah unik.
Untuk menghampiri titik tetap dari suatu fungsi F(x), kita mengambil suatu hampiran awal p0 dan
∞
kemudian kita menghasilkan barisan { pi }i=0 dengan mengambil pi+1 = F(pi) untuk setiap i ≥ 1. Jika
barisan konvergen menuju p dan F kontinu, maka berdasarkan teorema kontinuitas suatu fungsi dan
barisan, kita dapat menuliskan
p=lim pi+1 =¿ lim F ( pi ) =F lim pi =F ( p ) ¿
i →∞ i →∞ ( i→∞ )
Dan dengan demikian, solusi dari x = F(x) diperoleh dan teknik ini disebut sebagai teknik iterasi titik
tetap.
Dari persamaan (1) kita dapat membuat algoritma untuk menghitung akar real dari suatu persamaan
tidak linear seperti yang ditunjukkan oleh Algoritma 1 berikut ini.
Secara geometris, teknik ini dapat diterangkan berdasarkan Gambar berikut ini.
(a) (b)
Gambar
Sebagai contoh, kita akan menggunakan algoritma ini untuk menghitung volume molar gas tidak ideal
yang mengikuti persamaan keadaan van der Waals. Untuk itu mari kita lihat bentuk umum dari
persamaan keadaan van der Waals sebagai berikut ini.
a
( P+
V2 )
(V −b )=RT (3)
Persamaan (3) ini perlu dibuat menjadi persamaan diubah ke dalam bentuk f(V) = 0, yaitu
P V 3−( bP+ RT ) V 2 +aV −ab=0
Langkah berikutnya adalah mengubah persamaan f(V) = V – F(V) dan dengan demikian kita akan
memperoleh
1
( bP+ RT ) V 2−aV +ab
V= [ P ] 3
(4)
Dengan
27 R 2 T 2C
a= (6)
64 PC
Dan
RTC
b= (7)
8 PC
Karena a dan b sudah ada nilainya sebelum digunakan dalam persamaan (5), maka sudah harus
dihitung dalam Step 1. Nilai coba-coba awal yang diambil adalah
RT
V (0)= (8)
P
Persamaan (6) hingga (8) harus diset di Step 1. Demikian juga dengan P, R dan T harus di inputkan di
Step 1. Dengan demikian, kita dapat menyusun Algoritma untuk menghitung volume molar gas tidak
ideal dengan menggunakan persamaan keadaan van der Waals seperti berkut ini.
Dari algoritma ini kemudian kita dapat membuat script Matlab dan script ini disimpan dengan nama
vanderwaals1.m
Metoda Newton Raphson. Metoda ini biasanya disebut metoda Newton (tanpa Raphson)
dibelakangnnya. Metoda ini paling banyak digunakan karena metoda ini sangat berdaya guna
(powerfull). Ada tiga cara yang paling umum untuk memperkenalkan Metoda Newton ini. Cara yang
paling umum digunakan adalah cara grafis seperti yang ditunjukkan dalam Gambar. Kemungkinan
yang lain adalah Metoda ini diturunkan dari daret Taylor dengan memotongnya hingga suku yang
linear saja. Sekarang kita akan memulai dengan deret Taylor di sekitar x = a, yaitu:
Karena untuk menghitung akar persamaan maka kita mengambil f(x) = 0 dan dengan memasukkan
galat yang dibuat karena pemenggalan kita dapat menuliskan kembali (10) sebagai
f ' ' (ξ )
f ( x )=f ( a ) + f ' ( a )( x−a )+ ( x−a )2 (11)
2!
Di mana ξ berada di antara x dan a. karena f(t) = 0, maka persamaan (11), dengan x = t akan
memberikan
f ' ' (ξ )
0=f ( a )+ f ' ( a ) ( t−a ) +
( t−a )2 (12)
2!
Metoda Newton diturunkan berdasarkan assumsi bahwa suku ( t−a )2 diabaikan sehingga
f ( a)
t ≈ a− (14)
f ' ( a)
Jika kita menggantikan a dengan xi dan t dengan xi+1, maka kita akan menemukan persamaan utama
proses iterative Newton, yaitu
f ( xi )
x i+1=x i− ' (15)
f ( xi )
Seperti yang sudah diutarakan di atas metoda yang paling umum yang digunakan untuk menurunkan
(15) adalah metoda Grafis seperti yang diberikan oleh Gambar. Dalam Gambar ini diperlihatkan garis
singgung yang berurutan yang digunakan untuk menurunkan metoda ini
x
xi+1 xi+1 xi xi-1
Gambar
Dengan menyusun kembali persamaaan (16), kita dapat menemukan persamaan utama proses iteratif
metoda Newton-Raphson seperti yang diperlihatkan dalam persamaan (15).
Kriteria penghentian iterasi ini didasarkan atas nilai konvergensi yang dihitung dari kenyataan sebagai
berikut. Hasilkanlah nilai-nilai x1, x2, …, xN-1, xN berdasarkan persamaan (15)dan pilihlah suatu nilai
toleransi tertentu sedemikian sehingga
Agoritma . (Newton-Raphson)
Algoritma ini membutuhkan f(x) dan f’(x), serta input i = 0, nilai coba-coba awal x0 dan nilai toleransi
eps = 0.000001
Step 1. Set eps = 0.000001; Set i = 0; Set x(i) = x0 (x0 adalah nilai coba-coba)
f ( xi )
Step 2. Hitung x i+1=x i−
f ' ( xi )
Hitung Galat = abs(xi – xi - 1)
Step 3. Apakah Galat ≤ eps? Jika tidak, naikkan counter iterasi i satu poin, yaitu i=i +1 dan kembali
ke Step 2.
Jika ya, x* = xi+1, proses komputasi selesai. STOP.
Dalam program script Matlab dengan nama newton.m adalah representasi dari metoda ini dan kode
scriptnya diberikan seperti berikut ini.
Penurunan metoda Newton dari deret Taylor menyatakan pentingnya suatu hampiran awal yang
akurat. Asumsi krusial datangnya dari peralihan persamaan (12) ke persamaan (13), yaitu bahwa
persamaan asal yang melibatkan ( t−a )2 dapat dihilangkan. Jelaslah bahwa ini adalah asumsi yang
salah terkecuali a adalah hampiran yang terbaik dari t. Pada khususnya, jika x0 tidak begitu dekat
dengan, mungkin saja metoda ini tidak akan konvergen ke arah akar yang diinginkan. Namun
demikinan inilah bukannya kasus yang selalu terjadi.
Dalam Teorema 2 berikut ini, yaitu teorema tentang konvergensi untuk metoda Newton
memperlihatkan pentingnya pemilihan nilai hampiran awal x0.
Teorema 2. Katakanlah bahwa f(x) kontinu hingga turunan kedua dalam [a, b] sedemikian sehingga
f’(t) ≠ 0, maka ada suatu δ > 0 sedemikian sehingga metoda Newton-Raphson akan menghasilkan
barisan {t i }∞i=1 konvergen ke t untuk setiap hampiran awal t 0 ϵ [ t−δ , t+δ ] .
Bukti: Bukti yang diberikan disini akan berbasis pada analisis metoda Newton sebagai suatu skema
iterasi fungsional dari ti = F(ti - 1) untuk i ≥ 1, dengan
Metoda Secant. Metoda Newton adaah metoda yang sangat berdaya guna, tetapi mempunyai
kelemahan, yaitu kita memerlukan nilai turunan pada setiap penghampiran nilai akar yang dilakukan.
Sering sekali f’(x) sulit ditemukan dan memerlukan lebih banyak operasi arithmetic untuk
menghitungnya ketimbang untuk menghitung f(x) khususnya fungsi yang melibatkan fungsi-fungsi
trigonometric dan fungsi pangkat dalam satu fungsi. Turunan-turunan untuk fungsi-fungsi yang
demikian ini rumit dan memerlukan banyak operasi aritmetik untuk menghitungnya.
Untuk mengatasi hal ini, turunan dalam metoda Newton di rubah menjadi:
f ( x )−f ( t i )
f ' ( t i ) = lim (19)
x →t i−1 x−t i
Dengan mengambil x =ti-1, kita dapat menuliskan
'
f ( t i−1 )−f ( t i) f ( t i ) −f ( t i−1 )
f (t i ) ≈ = (20)
t i−1−t i t i −t i−1
Dengan memasukkan nilai hampiran ini ke dalam metoda Newton, kita akan menemukan
f ( t i ) [ t i−t i−1 ]
t i+1=t i− (21)
f ( t i )−f ( t i−1)
Dengan menggantikan t dengan x, maka kita dapat menuliskan kembali persamaan (21) sebagai:
f ( x i ) [ x i−x i−1 ]
x i+1=x i− (22)
f ( x i )−f ( x i−1 )
Proses yang dinyatakan oleh persamaan (22) ini dapat dilukiskan dalam Gambar 3.
xi-1 xi+1
x
xi
Gambar 3
Dari persamaan proses iterasi yang diberikan dalam persamaan (22) disebut sebagai metoda Secant
dan berdasarkan persamaan ini, kita dapat menyusun Algoritma Secant seperti yang diberikan dalam
Algoritma berikut ini.
Dalam program script Matlab dengan nama secant.m adalah representasi dari metoda ini dan kode
scriptnya diberikan seperti berikut ini.
Metoda Tertutup
Metoda ini mengisolasi akar yang akan dicari dalam satu interval tertentu. Dengan dasar ini kita dapat
mencari akar yang diisolasi dengan menggunakan dua cara yaitu dengan metoda membagi dua
interval dan metoda regula falsi (false position method). Kita akan mulai dengan metoda yang
pertama.
Metoda Membagi Dua Akar. Dalam metoda ini, pertama sekali interval yang diketahui di awal
komputasi dibagi menjadi dua. Jika titik tengah memberikan nilai fungsi yang lebih kecil dari nol
maka nilai tengah ini menjadi batas kiri interval, jika titik tengah memberikan nilai fungsi yang
positif, maka titik tengah menjadi ujung interval kanan yang baru. Interval baru ini kemudian dibagi
dua untuk mendapat titik tengah dan kita mengevaluasi fungsi di titik ini seperti dalam langkah
sebelumnya. Hal ini dilakukan terus sehingga diperoleh nilai-nilai fungsi dikedua ujung interval
memberikan selisih yang sangat kecil. Metoda ini dapat di jelaskan dengan Gambar 3 berikut ini.
Gambar 3
Dari Gambar 3 ini, kita dapat melihat bahwa ada dua kemungkinan bagi titik tengah yang dihitung.
Titik-titik tengah itu bisa menjadi titik ujung kanan interval baru, misalnya xkn(1) = xc(1) atau titik
ujung kiri interval yang baru. Dengan demikian sekarang kita dapat menyusun algoritma untuk
menghitung akar persamaan tidak linear dengan metoda bagi dua interval seperti yang diberikan
dalam Algoritma Bagi Dua Interval seperti yang ditunjukkan oleh Algoritma berikut ini
Script dari proram Matlab yang dibuat berdasarkan algoritma ini adalan bisection.m yang listingnya
diberikan berikut ini.
Metoda Regula Falsi. Metoda ini disebut juga sebagai metoda “false position” adalah metoda yang di
dasarkan atas interpolasi linear. Sama seperti pada metoda sebelumnya, hal yang paling pertama
dilakukan adalah mengurung akar yang hendak dicari dalam suatu interval tertentu, yaitu [p, q][x2, x1],
sedemikian sehingga f(q) > 0 dan f(p) < 0 f(x1) > 0 dan f(x2) < 0. Untuk menjelaskan hal ini, perhatikan
Gambar 4.
xkr
c x
xkn
Gambar 4
Pertama, kita akan mencari persamaan garis yang melalui titik (xkr, f(xkr)) dan (xkn, f(xkn)). Persamaan
garis ini adalah
y ( x ) =ax +b (23)
Dengan a adalah slope garis y(x), yang dihitung dengan persamaan
f ( x kn ) −f ( x kr )
a= (24)
x kn −x kr
Sedangkan b dihitung dengan persamaan berikut ini.
x kn f ( x kr ) −x kr f ( x kn )
b= (25)
x kn −x kr
c adalah titik potong dari garis yang diberikan oleh persamaan (23) dengan sumbu x, atau kita
mendapatkan y(c) = 0 = ac + b, atau c = -b/a tetapi c ini menjadi xkr yang baru sehingga kita dapat
menuliskan persamaan proses iterative metoda regula falsi sebagai berikut.
f ( x kn ) (x kn−x kr )
x kr =x kn− (26)
f ( x kn ) −f ( x kr )
Dengan demikian kita dapat menyusun algoritma untuk menemukan akar persamaan persamaan tidak
linear f(x) dengan menggunakan proses iteratif metoda regula falsi dengan Algoritma berikut ini.
Algoritma
Step 1. Tentukan konvergensi yang akan dicapai eps = 0.000001
Tentukan xkn sedemikian sehingga f(xkn) > 0
Tentukan xkr sedemikian sehingga f(xkr) < 0
Set iterMax = 100;
Set i = 1 (counter iterasi awal)
Step 2. Hitung xkr yang baru dengan menggunakan persamaan (26), yaitu
f ( x kn ) ( x kn−x kr )
x kr =x kn−
f ( x kn ) −f ( x kr )
Hitung Galat = abs(xkn - xkr)
Step 3. Apakah Galat ≤ eps?
Jika tidak, naikkan counter iterasi satu poin, yaitu i = i + 1 dan kembali ke Step 2.
Jika ya, nilai akar dari f(x) adalah x* = xkn. Proses komputasi. STOP
Jika i > iterMax lanjut ke Step 4.
Step 4. “Proses komputasi gagal karena jumlah iterasi maksimum dilewati”. STOP
Script dari proram Matlab yang dibuat berdasarkan algoritma ini adalan regulafalsi.m yang listingnya
diberikan berikut ini.
|ei+ 1|
lim =λ dan 0 < λ < 1 (27)
i → ∞ |e i|
∞
Sekarang kita akan menyelidiki suatu barisan baru { t^ i }i=0 yang konvergen lebih cepat ketimbang t.
Untuk memulainya, anggaplah bahwa i cukup besar sehingga rasio dapat digunakan untuk
menghampiri limit. Jika kita juga menganggap bahwa setiap ei mempunyai tanda yang sama, maka
e i+1 ≈ λ e i dan e i+2 ≈ λ e i+1
Dengan demikian kita akan memperoleh
t i+2 ≈ ei +2+ t ≈ λ e i+1 +t , atau
t i+2 ≈ λ(t i+1−t )+t (28)
Dengan menggantikan (i + 1) dengan i dalam persamaan (28), maka kita akan memperoleh
t i+1 ≈ λ(t i−t)+t (29)
Dan dengan menyelesaikan persamaan (28) dan (29) untuk mendapatkan t sambil mengeleminasi λ
setelah beberapa operasi aljabar, maka diperoleh bentuk akhir
2
( t i+1 −ti ) (30)
t=t i−
t i +2−2 t i+1 +t i
∞
Metoda Δ2 Aitken didasarkan atas asumsi bahwa {t^ i }i=0, yang didefinisikan oleh
2
( t i+1−t i ) (31)
t^ i=t i−
t i+ 2−2t i+1 +t i
∞
yang konvergen dengan cepat menuju t, ketimbang barisan asal { t i }i=0.
Δ Aitken yang terkait dengan metoda ini asalnya dinyatakan oleh definisi berikut ini.
∞
Definisi. Diberikan barisan { t i }i=0, definisikan beda hingga maju Δti oleh
di mana setiap ai menyatakan koefisien dari f dan yang merupakan konstan dan an ≠ 0. Dalam hal ini,
f disebut sebagai polinom berderajat n. Fungsi f yang nol, yaitu f(x) = 0 mengisyaratkan bahwa kita
dapat menemukan akar-akar dari fungsi polinom ini. Teorema berikut merupakan teorema
fundamental untuk aljabar yang pembuktiannya ada dalam buku-buku teks yang terkait dengan
aljabar.
Teorema. (Teorema Fundamental dari Aljabar). Jika f adalah suatu polinom berderajat n dimana n≥1,
maka f(x) = 0, mempunyai paling sedikit satu akar (yang mungkin kompleks).
Walupun Teorema ini merupakan teorema dasar untuk setiap studi yang terkait dengan fungsi-fungsi
elementer, biasanya membutuhkan teknik-teknik pembuktian dari study yang terkait dengan teori
fungsi kompleks, untuk itu para pembaca yang ingin membuktikan teorema ini perlu berkonsultasi
dengan buku-buku mengenai fungsi kompleks. Akibat yang penting yang diberikan oleh teorema ini
adalah Akibat 1 dan Akibat .
Akibat 1. Jika f(x) = a0 + a1x + a2x2 + a3x3 + . . . + anxn adalah suatu polinom berderajat n ≥ 1, maka
ada konstanta-konstanta unik x1, x2, …, xk, yang mungkin saja di antaranya ada yang kompleks, dan
k
bilangan-bilangan positif m1, m2, …, mk sedemikian sehingga ∑ mi =n dan
i=1
Akibat 1 dari teorema ini menyatakan kepada kita bahwa akar-akar dari polinom adalah unik, dan
bahwa setiap akar xi dihitung sebanyak multiplisitasnya, yaitu mi, maka polinom berderajat n secara
tepat mempunyai n buah akar.
Akibat 2. Katakanlah bahwa f dan g masing-masing adalah polinom yang berderajat paling besar n.
Jika x1, x2, …, xk, k > n, adalah bilangan-bilangan yang berbeda dengan f(xi) = g(xi) untuk i = 1, 2, …,
k, maka f(x) = g(x) untuk semua harga dari x.
Metoda Horner. Penggunaan dari metoda Newton-Raphson untuk mencari nilai dari akar suatu
persamaan tidak linear, kita memerlukan turunan dari fungsi yang hendak dievaluasi akarnya. Metoda
berikut adalah metoda Horner yang digunakan untuk menghitung akar dari suatu persamaan tidak
linear. Teorema berikut akan mengantarkan kita kepada Metoda ini.
Berdasarkan Teorema ini kita dapat menyusun Algoritma Horner seperti yang diperlihatkan dalam
Agoritma berikut ini.
Problema lain yang terkait penerapan metoda Newton bagi polinom menyangkut kemungkinan dari
polinom untuk mempunyai akar-akar yang kompleks, sekalipun semua koefisien dari polinom adalah
bilangan real. Jika hampiran awal menggunakan metoda Newton merupakan bilangan real, semua
hampiran berikutnya akan berupa bilangan real.
Salah satu cara untuk mengatasi kesulitan ini adalah memulai dengan hampiran awal yang tidak real
dan lakukan semua komputasi dengan menggunakan aritmetik kompleks. Alternatif ini berbasiskan
Teorema berikut ini.
Teorema. Jika w = p + qi adalah akar kompleks dengan multisiplitas m dari polinom f, maka
ẃ= p−qi adalah juga akar dengan multisiplitas m dari polinom f dan (x2 -2ax + a2 + b2)m adalah suatu
factor dari f.
Metoda Müller.
Suatu pembagian sintetis yang melibatkan polinom kuadratik dapat disiapkan untuk menghampiri
polinom dengan pemfaktoran sehingga satu suku akan menjadi polinom kuadratik yang memiliki akar
kompleks yang merupakan hampiran dari akar polinom asli.
Sekarang kita akan melihat pada metoda yang pertama kalinya diberikan oleh D.E. Muller di tahun
1956. Metoda yang diusulkan ini dapat digunakan untuk setiap problema pencarian akar, tapi
khususnya bermanfaat untuk pencarian akar dari polinom.
Metoda Muller merupakan generalisasi dari metoda Secant. Metoda Secant bermula dengan dua nilai
penghampiran, yaitu x0 dan x1 dan menentukan hampiran berikutnya sebagai perpotongan antara garis
yang melalui (x0, f(x0)) dan (x1, f(x1)) dengan sumbu-x, perhatikan Gambar 5. Metoda Muller
menggunakan tiga hampiran awal yakni x0, x1, dan x2 dan kemudian menentukan hampiran berikut x3
dengan mempertimbangkan perpotongan antara sumbu-x dengan parabola melalui tiga titik hampiran,
yakni (x0, f(x0)), (x1, f(x1)) dan (x2, f(x2)) perhatikan Gambar 5 (b).
f(x0)
f(x1)
x0 x1 x0 x1 x2 x3
(a) (b)
Gambar 5
Penurunan metoda Muller ini dimulai dengan mempertimbangkan polinom kuadratik berikut ini:
f(x) = a(x – x2)2 + b(x – x2) + c
Polinom kuadratik ini melewati titik-titik (x0, f(x0)), (x1, f(x1)) dan (x2, f(x2)). Konstanta a, b, dan c
dapat ditentukan dari kondisi-kondisi
f(x0) = a(x0 – x2)2 + b(x0 – x2) + c
Hal lain yang perlu kita catat di sini, bahwa metoda Muller ini tidak seefisien seperti metoda Newton.
Orde konvergensinya sekitar 1.84 sedangkan metoda Newton 2.0. Tapi yang jelas metoda ini lebih
baik ketimbang metoda Secant dimana orde konvergensinya 1.62.
Secara umum deflasi biasanya digunakan bersama-sama metoda Muller ketika suatu akar hampiran
diperoleh. Setelah penghampiran terhadap akar dari persamaan yang telah dideflasi diperoleh,
gunakan entah metoda Muller atau metoda Newton dengan akar ini sebagai hampiran awal. Ini akan
menjamin bahwa akar yang dihampiri merupakan solusi dari persamaan yang sesungguhnya, bukan
bagi persamaan yang dideflasi.
Metoda berorde tinggi yang lainnya juga tersedia untuk menentukan akar dari polinom. Ada metoda
lain seperti metoda Bairstow dan metoda Laguerre.
Metoda Bairstow.
Perhatikan yang diberikan di persamaan (35) di atas. Karena persamaan ini adalah suatu persamaan
polinom berorde n, maka berdasarkan Teorema kita memastikan bahwa persamaan ini mempunyai n
akar. Metoda umum yang dipakai untuk melokalisir akar-akar dari polinom adalah dengan
menemukan semua factor kuadratiknya. Faktor-faktor kuadratik itu akan mempunyai bentuk
g(x) = x2 + αx + β (42)
Katakanlah kita mempunyai suatu persamaan lain yaitu h(x) dan R(x), yaitu
h(x) = b2 + b3x + b4x2 + … + bn-1xn-3 + bnxn-2 (43)
dan
R(x) = b0 + b1x (44)
Sehingga polinom f(x) di persamaan (35) dapat dinyatakan dalam bentuk perbanyakan dari persamaan
(42) dan (43) yang kemudian ditambahkan dengan persamaan (44), yakni
f(x) = g(x)h(x) + R(x) (45)
Yang memberikan
f(x) = (x2 + αx + β)( b2 + b3x + b4x2 + … + bn-1xn-3 + bnxn-2) + b0 + b1x (46)
Dengan menyamakan koefisien yang sesuai untuk x dan pangkatnya, maka kita akan memperoleh
sistem persamaan berikut ini.
an = bn
an-1 = bn-1 + αbn
an-2 = bn-2 + αbn-1 + βbn
an-3 = bn-3 + αbn-2 + βbn-1
. . . . . .
. . . . . . (47)
. . . . . .
a3 = b3 + αb4 + βb5
a2 = b2 + αb3 + βb4
a1 = b1 + αb2 + βb3
a0 = βb2
Persamaan (47) ini bisa diselesaikan untuk mendapatkan koefisien-koefisien bn, bn-1, bn-2, …, b2, b1, b0
sebagai berikut:
bn = an
bn-1 = an-1 - αbn
bn-2 = an-2 - αbn-1 - βbn
bn-3 = an-3 - αbn-2 - βbn-1
. . . . . .
. . . . . . (48)
. . . . . .
b3 = a3 - αb4 - βb5
b2 = a2 - αb3 - βb4
b1 = a1 - αb2 - βb3
b0 = a0 - βb2
Yang kita butuhkan adalah g(x) sebagai faktor kuadratik eksak dari f(x), dengan demikian sisa R(x)
seperti yang diberikan dalam persamaan (44) adalah nol. Dan ini mengisyaratkan
b0 = 0 dan b1 = 0 (49)
Dapat kita lihat dari persamaan (48), bahwa b0 dan b1 adalah fungsi dari α dan β. Kalau sekarang kita
katakan bahwa α^ dan ^β masing-masing menyatakan nilai yang benar dari α dan β, persamaan (49)
akan memberikan
b0(α^ , ^β ) = 0 dan b1(α^ , ^β ) = 0 (50)
Jika kita mengambil α dan β sebagai hampiran awal dari α^ dan ^β , kita akan mencari harga-harga yang
diperbaiki yaitu α + dα dan β + dβ, yang mendorong persamaan (50) mendekati nol. Dengan
mengekspansikan b0 dan b1 dalam deret Taylor di sekitar α dan β, kita akan mendapatkan
b 0 ( α +dα , β +dβ )=b 0 ( α , β ) + Δ α ( ∂∂bα )+ Δ β ( ∂∂bβ )
0 0
(51)
dan
di mana turunan parsial dievaluasi pada α dan β, dan Δα dan Δβ yang diberikan oleh:
Δ α= α^ −α dan Δ β = ^β−β (53)
Dengan membuat persamaan (51) dan (52) menjadi nol, yaitu dengan mengambil anggapan bahwa
α +dα ≈ α^ dan β +dβ ≈ β^ , kita akan memperolah
dan
Dapat dilihat bahwa evaluasi turunan parsial dari b0 dan b1dalam persamaan-persamaan (54) dan (55)
menghendaki perhitungan rekursif turunan-turunan parsil dari semua bi, untuk i = n, n-1, …, 2, 1, 0
dalam persamaan (48), yaitu
∂ bn
=0
∂α
∂ bn
=0
∂β
∂ bn−1 ∂ bn
=−b n−α =−b n
∂α ∂α
∂ bn−1 ∂ bn
=α =0
∂β ∂β
∂ bn−2 ∂ bn−1 ∂ bn
=−b n−1 −α −β =−b n−1+ α bn
∂α ∂α ∂α
∂ bn−2 ∂ bn−1 ∂ bn
=−α −b n−β =−bn
∂β ∂β ∂β
. . . . . .
. . . . . . (56)
. . . . . .
∂ b2 ∂ b3 ∂ b4
=−b3 −α −β
∂α ∂α ∂α
∂ b2 ∂ b3 ∂ b4
=−α −b 4−β
∂β ∂β ∂β
∂ b1 ∂ b2 ∂ b3
=−b2 −α −β
∂α ∂α ∂α
∂ b1 ∂ b2 ∂ b3
=−α −b 3−β
∂β ∂β ∂β
∂ b0 ∂ b2
=−β
∂α ∂α
∂ b0 ∂ b2
=−b 2−α
∂β ∂β
Disini semua turunan parsil dievaluasi di (α, β). Sekali turnan-turunan parsil dari b0 dan b1 terhadap α
dan β dievaluasi, persamaan (57) dapat diselesaikan untuk Δα dan Δβ dan kita akan memperoleh
∆ α=
b1 ( ∂∂bβ )−b ( ∂∂bβ )
0
0
1
(57)
∂ b 0 ∂b 1 ∂ b 1 ∂ b 0
( −
∂α ∂ β ∂α ∂ β )
∆ β=
b0 ( ∂∂bα )−b ( ∂∂bα )
1
1
0
(58)
∂b 1 ∂b 0 ∂ b 0 ∂b 1
( −
∂ β ∂α ∂ β ∂α )
Sekali Δα dan Δβ diketahui, penghampiran baru untuk mengoreksi harga-harga dari α^ dan ^β masing-
masing dihitung sebagai α + Δα dan β + Δβ.
Faktor kuadratik dari polinom, yaitu x2 + αx + β dan akar-akarnya dihitung secara iterative dengan
menggunakan algoritma yang disusun berdasarkan metoda yang telah diturunkan di atas yang
diberikan oleh Algoritma Bairstow.
Algoritma . Bairstow.
Step 1. Pilihlah nilai hampiran untuk α dan β, masing-masing untuk α^ dan ^β . Set i = 1
Step 2. Hitunglah koefisien-koefisien b1 dan b0 dengan menggunakan persamaan (48)
Step 3. Hitung turunan-turunan parsial dari b1 dan b0 masing-masing terhadap α dan β dengan
menggunakan persamaan (56)
Step 4. Selesaikan persamaan (57) dan (58) untuk Δα dan Δβ.
Step 5. Hitung penghampiran baru untuk α^ dan ^β sebagai α + Δα dan β + Δβ.
Step 6. Apakah Δα dan Δβ sudah cukup kecil (lebih atau sama dengan batas toleransi eps)?
Jika belum, naikkan counter itersi satu poin, yaitu i = i + 1, dan kembali ke Step 2.
Jika sudah, lanjut ke Step 7.
Step 7. Gunakan nilai-nilai α dan β yang telah konvergen ke α^ dan ^β untuk menghitung akar
persamaan f(x) dari faktor kuadratik x2 + α^ x + ^β = 0 dengan menggunakan rumus abc.
Carilah polinom baru yang mempunyai derajat n – 2, dan kemudian cari faktor kuadratik yang
baru dan ulangi kembali dari Step 1.
Metoda Bairstow ini dapat digunakan untuk menentukan akar-akar real, kompleks atau yang berulang
dari fungsi polinom. Namun demikian seringkali kita terkendala dengan pemilihan hampiran awal.
Kelemahan lainnya, bahwa akar yang dihitung tidak terlalu akurat.
MATRIKS DAN SISTEM
PERSAMAAN-PERSAMAAN LINEAR
PENDAHULUAN
Penggunaan dari matriks sangat luas dalam sains dan rekayasa. Dalam Bab ini hanya akan dibicarakan
beberapa contoh saja. Dalam industri proses, misalnya, dalam industri proses kmia, sebagai contoh
adalah industri semen. Dalam industri semen, dengan bahan baku seperti batu kapur, tanah liat, tanah
pasir, pasir besi dan material korektif seperti sandy clay. Mineral-mineral dalam terak semen (clinker)
terdiri atas C3S (tricalciumsilicate) C2S (diciumsilicate), C3A (tricalciumaluminate) dan C4AF. Untuk
ini, C menyatakan CaO, S menyatakan SiO 2, A menyatakan Al2O3 dan F menyatakan Fe2O3. Semen
dengan tipe harus terbuat dari terak (clinker) dengan kandungan C 3S, C2S, C3A, dan C4AF tertentu.
Sebagai contoh untuk penggunaan khusus seperti oil well cement, kandungan C 3S, C2S, C3A, dan
C4AF, masing-masing adalah: Untuk menyederhanakan masalah, kita membuat proses pembuatan
clinker untuk oilwell cement sebagai kotak hitam. Kita hanya akan meninjau suatu kotak dimana
semua proses terjadi dan hanya ada input empat bahan baku dan satu keluaran yang diketahui yang
dipecah berdasarkan CaO, SiO2, Fe2O3, Al2O3 dan MgO sebagai pengganggu. Untuk itu perhatikan
Gambar 1. Aliran masuk terbagi atas empat dengan informasi kandungan CaO, SiO 2, Fe2O3 dan Al2O3.
Bila laju massa batu kapur F1, laju massa pasir F2, laju massa kaolin F3, laju massa pasir besi F4,
dan laju massa bahan korektif F5, semuanya dalam ton per jam. Sedangkan kompisi-komposisi CaO
dari bahan pertama a11, bahan kedua a12, bahan ke tiga a13, bahan keempat a14 dan bahan kelima adalah
a15. Kompoisisi-komposisi SiO2 dari bahan pertama a12, bahan kedua a22, bahan ke tiga a32, bahan
keempat a42 dan bahan kelima adalah a52. Komposis-komposisi Al2O3 dari bahan pertama a13, bahan
kedua a23, bahan ke tiga a33, bahan keempat a43 dan bahan kelima adalah a53. Komposis-komposisi
Fe2O3 dari bahan pertama a14, bahan kedua a24, bahan ke tiga a34, bahan keempat a44 dan bahan kelima
adalah a54. Komposis-komposisi MgO dari bahan pertama a15, bahan kedua a25, bahan ke tiga a35,
bahan keempat a45 dan bahan kelima adalah a55.
F2
F4
F5
Karena semua besaran yang menyangkut komposisi diketahui dan laju produksi clinker diketahui,
maka kita akan mempunyai lima persamaan linear dengan lima anu yang akan dihitung, yaitu F1, F2,
F3, F4, dan F5. Sistem persamaan linear itu adalah:
atau dalam bentuk matriks dan vektor persamaan ini dapat dituliskan kembali sebagai:
Ax = b
Dimana
a 11 a 12 a13 a 14 a15 x1 b1
[
a21
A= a31
a41
a51
a 22
a 32
a 42
a 52
a23
a33
a43
a53
a 24
a 34
a 44
a 54
a25
a35
a 45
a55
] () ()
,
x2
x= x3
x4
x5
dan
b2
b= b3
b4
b5
Contoh berikutnya adalah rangkaian listrik sederhana seperti yang ditunjukan oleh Gambar 2 berikut
ini.
R1
+
V1 i1
-
R2 R3
i2
+
R4 V2
-
i3 R6
R5
-
V3
R7 i4 +
R8
Dengan menggunakan Hukum Kirchhof kedua yang mengatakan bahwa jumlah voltase (tegangan
listrik) dalam suatu sirkit tertutup adalah nol, maka diperoleh bahwa:
Karena sumber listrik DC diketahui tegangannya, yaitu V1, V2 dan V3, maka kita dapat menyusun
system persamaan dalam bentuk matriks dan vektor sebagai berikut
−( R1 + R 2 + R3 ) R2 R3 0 i1
[ ]( ) (
−V 1
R2
R3
0
− ( R 2 + R4 + R5 + R 7 )
R4
R7
R4
−( R3 + R 4 + R6 )
R6
R7
R6
− ( R6 + R 7 + R 8 )
i2
i3
i4
= 0
V2
−V 3
)
Contoh berikutnya adalah lima reactor kimia yang disusun secara seri dengan pengembalian seperti
yang diperlihatkan dalam Gambar 3. Reaktor-reaktor ini dioperasikan dalam keadaan tunak (steady
state). Reaksi yang terjadi dalam setiap reactor adalah reaksi kimia A Produk dengan laju
reaksi berorde satu terhadap reaktan A, yaitu r = kCA. Informasi dari volume setiap reactor, konstanta
laju reaksi di setiap reactor dan informasi lain diberikan dalam Tabel 1. Sedangkan asumsi yang
diambil adalah bahwa pengadukan sempurna.
V1, CA1 V1, CA2 V1, CA3 V1, CA4 V1, CA5
Gambar 3. Lima buah Reaktor Kimia yang disusun secara seri dengan pengembalian pada reactor
Reakto Volume (m3) Ki, jam-1 Karena pengadukan diasumsikan sempurna maka konsentrasi
r A yang berada di dalam reaktor akan sama dan ini berarti
konsentrasi A dalam keluaran reaktor akan sama dengan
1 800 0.10 konsentrasi A dalam reaktor. Laju umpan yang masuk adalah
2 1200 0.20 1000 l perjam, laju umpan yang dikembalikan kesetiap reactor
4, 3, dan 2 adalah 150 liter perjam Untuk setiap reaktor dalam
3 200 0.35 sistem ini berlaku neraca massa, yaitu:
4 600 0.40
Tetapi karena asumsi operasi adalah steady state, maka laju akumulasi adalah nol, sehingga
Dari data-data ini kita dapat menurunkan sistem persamaan linear untuk sistem reaktor ini.
Penggunaan yang lain dari penyelesaian sistem persamaan linear adalah dalam bidang struktur,
sebagai contoh perhatikan Gambar 4.
Berdasarkan informasi yang diberikan oleh Gambar 1 dan matriks yang dihasilkan, dan Gambar 3
dengan matriks yang dihasilkan memberikan kesimpulan bahwa hasil pemodelan steady-state
flowsheet dari suatu system proses kimia untuk kepentingan perancangan pabrik kimia. Dalam adalah
dalam penyelesaian masalah numerik sendiri sistem persamaan linear digunakan, misalnya dalam
penyelesaian persamaan diferensial biasa dengan nilai batas dengan menggunakan metoda beda
hingga dan elemen hingga akan mendapatkan model penyelesaian yang berbentuk
Penambahan dan Pengurangan Matriks. Penambahan dari dua matriks A dan B (dengan ketentuan
ukuran dari kedua matriks ini harus sama!) akan menghasilkan matriks C dengan ukuran yang sama
dan elemen-elemennya sama dengan penjumlahan elemen-elemen dengan indeks yang sama dari
matriks A dan B. Sedangkan pengurangan dari dua matriks A dan B akan menghasilkan matriks C
dengan ukuran yang sama dan elemen-elemennya sama dengan pengurangan elemen-elemen dengan
indeks yang sama dari matriks A terhadap B. Kita dapat menuliskan kedua operasi ini sebagai berikut:
c11 c 12 . .. c 1n a11 a 12 . .. a1 n b11 b12 ... b1 n
( )( )( )
c21 c 22 . .. c 2n a21 a 22 . .. a2 n b21 b22 ... b 2n
C=A±B= . . . .. . =. . . .. . ±. . ... .
. . . .. . . . . .. . . . ... .
. . . .. . . . . .. . . . ... .
cm 1 cm 2 . .. c mn am 1 am 2 . .. amn bm 1 bm 2 ... b mn
( )
a 21±b21 a 22±b22 .. . a 2n ±b2 n
=. . .. . .
. . .. . .
. . .. . .
a m 1±bm 1 a m 2±bm 2 .. . a mn±b mn
(1)
Kita dapat membuat prosedur komputasi untuk mendapatkan matriks C sebagai hasil penambahan
atau pengurangan dari matriks A dengan matriks B, sebagai berikut.
Step 1. Set i =1
Step 2. Set j =1
Step 4. Apakah j = n?
Jika tidak, naikkan counter j satu poin, yakni j = j + 1 dan kembali ke Step 3
Step 5. Apakah i = m?
Jika tidak, naikkan counter i satu poin, yakni i = i + 1 dan kembali ke Step 2
Transpos dari suatu Matriks.Transpos dari suatu matriks A adalah suatu matriks B yang baru
sebagai hasil memutar matriks A pada diagonalnya sebagai sumbu. Secara matematis, B adalah hasil
transpose dari matriks A, jika
B = A T.
Atau jika
a 11 a12 .. . a 1n
( )
a21 a22 .. . a 2n
A= . . .. . .
. . .. . .
. . .. . .
am 1 am 2 .. . amn
Maka,
( )
a 12 a22 ... am 2
B= AT = . . ... .
. . ... .
. . ... .
a1n a2 n ... amn
Kita dapat membuat prosedur komputasi untuk mendapatkan matriks B sebagai hasil transpose dari
matriks A, sebagai berikut.
Prosedur komputasi untuk mendapatkan matriks B sebagai hasil transpose dari matriks A.
Step 1. Set i =1
Step 2. Set j =1
Step 4. Apakah j = n?
Jika tidak, naikkan counter j satu poin, yakni j = j + 1 dan kembali ke Step 3
Step 5. Apakah i = m?
Jika tidak, naikkan counter i satu poin, yakni i = i + 1 dan kembali ke Step 2
Perkalian Matrik. Perkalian antara suatu matrik A dengan suatu matrik B akan menghasilkan suatu
matrik baru dengan elemen-elemennya adalah hasil dari perkalian baris tertentu matrik A dan kolom
tertentu dari matrik B. Hal ini mengatakan kepada kita bahwa syarat yang harus dipenuhi agar
perkalian A dan B terjadi adalah dimensi kolom dari matrik A harus sama dengan dimensi baris dari
matrik B.
Mengacu kepada konsep vektor, yaitu perkalian skalar dari dua buah vektor akan memberikan hasil
skalar, maka matrik baris dikali dengan matrik kolom akan menghasilkan suatu skalar. Sebagai contoh
katakanlah matrik A berukuran 1 n (vektor baris) dan matrik B berukuran n 1(vektor kolom),
yaitu
b1
()
b2
.
.
.
bn
a = ( a1 a2 . . . an ) dan b =
Konsep inilah yang mendasari pendefinisian daripada perkalian matrik. Kalau kita tinjau matrik
sebagai suatu himpunan, maka matrik adalah himpunan vektor-vektor kolom
Sekarang, katakanlah bahwa B*1, B*2, …, B*n menyatakan kolom-kolom dari B. Dengan demikian kita
dapat menuliskan B = [B*1 B*2 … B*n], sehingga kita dapat mendefinisikan AB sebagai berikut.
Hal ini memberikan isyarat kepada kita bahwa kolom ke-i dari matrik AB merupakan product dari A
dengan kolom ke-i dari matrik B. Komputasi dari kolom ke-i dari matrik AB hanya bergantung
kepada pengetahuan dari A dan kolom ke-i dari B. Dengan demikian setiap product dari AB*k dapat
dihitung secara independentdan karena itu dapat dihitung secara simultan pada suatu komputer paralel
yang mempunyai n arithmetic units. Persamaan di atas, jumlah kolom dari matrik A harus sama
dengan jumlah baris dari B. Jika matrik A berukuran m n, maka ukuran matrik B haruslah n p.
Jadi dengan demikian, matrik AB mempunyai ukuran mp. Untuk matrik-matrik yang demikian ini
dikatakan bahwa A dan B adalah conformable bagi product AB. Dalam product dari AB, A disebut
sebagai premultiplier dan B disebut postmultiplier.
Sekarang anggaplah bahwa C=AB dan cij adalah entri pada posisi (i,j) dari C. Kita dapat mengatakan
bahwa cij berada dalam baris ke-i dan baris ke-j dari matrik AB. Juga baris ke-i dari A dan kita beri
simbol Ai*. Dengan demikian, kita dapat menarik kesimpulan bahwa:
cij = Ai* B*j
Dengan B*j adalah kolom ke-j dari matrik B. Atau kalau ditulis dalam bentuk yang diperluas,
¿ ¿ ¿ . .. ¿ ¿ ¿ . .. b j1 ¿
. .. ¿
( )( )
¿ ¿ ¿
¿ ¿ . .. b j2 ¿
. . . . .. .
. . . .. . ¿ ¿ . .. b j3 ¿
ai 1 ai 2 a i3 . . a in . . . .. . .
. . . . .. . . . .. .
. . . . .. ¿ . . . .. . .
. . . . .. . . . .. . .
¿ ¿ ¿ . .. ¿ ¿ ¿ ¿ b jn ¿
AB =
n
c ij= ∑ aik b kj
k=1
Contoh. Diketahui matrik Am×n dan Bn×2. Jika matrik C adalah hasil perkalian dari A dan B, carilah
entri (2,1) dari matrik C.
Jawab. Hasil perkalian matrik Am×n dengan Bn×2 menghasilkan matrik Cm×2. Secara umum kita dapat
menghitung cij = Ai٭.B٭j. Sehingga entri ke (2,1) dari C adalah c21 = A2٭.B1٭, yaitu
¿ ¿ . .. ¿ ¿ ¿ .. . ¿ b11 ¿ . .. ¿
( )( )( )
c 21 ¿ . .. ¿ a21 a22 .. . a2n b21 ¿ . .. ¿
. . . .. . =. . .. . . . . .. .
. . . .. . . . .. . . . . .. .
. . . .. . . . .. . . . . .. .
¿ ¿ . .. ¿ ¿ ¿ .. . ¿ br 1 ¿ . .. ¿
A2٭.B1= ٭
Atau secara ringkas:
n
∑ a2 k b k 2
c21 = A2٭B1=٭ k =1 = a21b11 + a22b12 + a23b13 + … + a2nb1n
Contoh berikut akan memberikan insight bagi kita mengenai perkalian matrik secara utuh. Dalam
contoh ini kita akan menghitung perkalian A dan B, yang masing-masing berukuran 35 dan 53
dengan menggunakan persamaan
0 −1 2
A=
(
1 2 0 −1 3
0 2 4 1 2
3 1 0 5 −1 ) B =
( )
3 1 4
1 2 1
5 0 3
−1 3 2
Jawab. Karena A mempunyai lima buah kolom dan B mempunyai lima baris, berarti matrik A dan B
adalah conformable dan AB ada dan berukuran 3 3. Untuk mencari entri-entri dari AB, kita akan
menghitung product antara A dengan setiap kolom dari kedua kolom B, yaitu
AB*1 =
(
1 2 0 −1 3
0 2 4 1 2
3 1 0 5 −1 ) ()
3
1
5
−1
=
−2
()
13
29
−1
AB*2 =
(
1 2 0 −1 3
0 2 4 1 2
3 1 0 5 −1 ) ()
1
2
0
3
=
10
()
16
−5
2
AB*3 =
(
1 2 0 −1 3
0 2 4 1 2
3 1 0 5 −1 ) ()
4
1
3
2
=
13
()
17
23
−2 10 13
Teorema. Anggap bahwa hasil kali dari AB, AC, DF, dan EF ada. Maka
(i). A(B + C) = AB + BC
(ii). (D + E)F = DF + EF
Bukti. Bukti (i) dan (ii) merupakan penerapan perkalian matrik yang sederhana. Untuk itu kami akan
meninggalkan pembuktian teorema ini sebagai latihan
Selain sifat distributive over addition, ada sifat yang lain yang dipunyai oleh perkalian matrik, yaitu
sifat associative. Sifat ini, di dalam teks dituangkan dalam bentuk teorema. Untuk mempermudah
pembuktian teorema tersebut, kita memerlukan suatu lemma untuk mempermudah pembuktian dari
teorema tersebut. Lemma ini merupakan kasus khusus, yaitu matrik yang menjadi postmultiplier
merupakan suatu matrik kolom atau vektor
Lemma. Katakanlah bahwa A conformable dengan B, dan c adalah suatu vektor yang conformable
dengan AB. Maka
A(Bc) = (AB)c
Persamaan ini menunjukkan kepada kita bahwa ci(AB)ei merupakan kolom ke-i dari AB. Yaitu
(AB)ei = AB*i. Dengan memasukkan ini ke dalam persamaan di atas, maka kita peroleh:
Atau
= A(B(c1e1 + c2 e2 + … + cn en)
= (AB)c
Dengan berbekal Lemma ini kita akan dapat membuktikan teorema yang lebih umum validitasnya di
bawah ini.
Teorema. Jika A konformable dengan B dan B dengan C, maka A juga konformabel dengan BC, AB
conformable dengan C, dan
A(BC) = (AB)C
Bukti. Kita akan menggunakan Lemma untuk membuktikan teorema ini, yaitu dengan menggantikan
c dengan C*j. Dengan demikian
= (AB)C
Berikut ini akan dibuktikan suatu Teorema penting yaitu teorema mengenai transpose dari dua matrik
yang conformable
(AB)T = BT AT
Bukti. Katakanlah bahwa C = AB, D = CT = (AB)T dan F = BT AT. Kita akan memulai pembuktian
kita dengan membandingkan entri (i,j) dari matrik C, yaitu cij dengan kedua ruas persamaan di atas.
Maka kita harus membuktikan bahwa entri (j,i) dari ruas kiri persamaan yaitu dji = cij dan untuk
entri (j,i) dari ruas kanan persamaan, yaitu fji = cij. Sekarang kita mulai dengan C = AB, yaitu
( )( )
. . . ... . . . . . . . . .
. . . ... . . . . . . . . .
. . . ... . bi1 b i2 . . b ij . . bin
ai 1 a i2 a i3 ... a in . . . . .
.
. . . ... . . . . . .
.
. . . ... . . . . . .
.
. . . ... . . , . . .
a n1 a n2 a n3 ... a nn bn 1 b n2 . . b nj
C = AB =
n
c ij= ∑ aik b kj
k=1
Itu berarti entri (j,i) dari ruas kiri persamaan , yaitu CT adalah sama dengan cij. Sekarang perhatikan
ruas kanan persamaan , F = BT AT, yang kalau ditulis dalam bentuk yang diperluas akan terlihat
seperti ini.
b11 b21 b31 ... bn 1 a11 a21 . . ai1 . . a1 n
b12 b22 b32 ... a2n a12 a22 . . ai2 . . a2 n
( )( )
. . . ... . . . . . . . . .
. . . ... . . . . . . . . .
. . . ... . a1 j a2 j . . aij . . ani
b1 j b2 j b3 j ... b nj . . . . . . .
.
. . . ... . . . . . . . .
.
. . . ... . . . . . . . .
.
. . . ... . . , . . . . .
b1 n b 2n b 3n ... b nn a1 n a 2n . . ain . . ann
F =
n
f ij = ∑ b kj aik
k =1
n
f ji = ∑ aik b kj
k =1
Suatu hasil yang penting dari perkalian matrik adalah perkalian matrik A yang berorde m n dengan
matrik kolom yang akan menghasilkan matrik kolom atau vektor, yaitu
Ax = b
a11 a12 .. . a1 n x1 b1
( ) () ()
a21 a22 .. . a 2n x2 b2
. . .. . . . .
. . .. . . . .
. . .. . . . .
a m1 am 2 .. . amn xn bm
=
Yang tidak lain merupakan sistem persamaan linear dengan m persamaan dan n anu, yaitu:
a11x1 + a12x2 + ... + a1nxn = b1
Sebelum kita menanjak kepada teorema-teorema dasar perkalian matrik dengan vektor, kita akan
mebuktikan satu teorema yang tidak kalah pentingnya, yaitu:
Bukti. Karena vektor ek adalah vektor dengan elemen-elemennya bernilai nol terkecuali elemen ke-k
bernilai 1. Sehingga
ai 1
¿¿ ()
ai 2
.
.
.
ain
Aek = = (A*k ek) = (aik) =
Berikut ini akan dibuktikan teorema dasar yang mendukung uraian lebih lanjut mengenai perkalian
antara matrik dan vektor. Hal ini penting karena pada kenyataannya perkalian antara matrik dan
vektor merepresentasikan sistem persamaan linear yang kegunaannya sangat luas.
Teorema : Jika A adalah suatu matrik berukuran m n, x dan y adalah vektor, dan k dan l masing-
masing adalah skalar. Maka
a. A ( kx ) = kAx
b. A (x + y) = Ax + Ay
c. Ix = x
d. A (k x + l y ) = kAx + lA y
Bukti.
a. A(kx) = ¿¿ ¿¿ ¿¿ = = k = k(Ax)
b. A (x + y) = ¿ ¿¿ ¿¿
(x + y) = =
= ¿¿ = Ax + Ay
e e x x1
1T 1T
( ) ( ) ()
e T e T x x2
2 2
. . .
. . .
. . .
e T e T x xn
n n
c. Ix = x = = =x
A (k x + l y ) = kAx + lA y
Sifat-sifat dari perkalian matrik yang telah disajikan di atas dapat di ringkas menjadi:
a. A(BC) = AB(C)
b. AB ¿ BA
c. AI = IA
d. AB = 0 tapi A ¿ 0 dan B ¿ 0
e. ( AB ) T = B TA T
f. AB = AC tapi B ¿ C
g. A( B + C ) = A B + A C
T
h. Aei = A٭i e j A = Aj٭
Dari Teorema, kita dapat membuktikan bahwa algoritma perkalian matriks dapat dituliskan sebagai:
Teorema. Jika matriks A berukuran m × n dan matriks B berukuran n × p, maka bisa diperoleh
matriks C berukuran m × p dengan prosedur komputasinya adalah sebagai berikut.
Input ukuran dari matrik A: m × n dan elemen-elemennya. Ukuran matrik B n × p dan elemen-
elemennya.
Step 1. Set i = 1;
Step 2. Set j = 1;
Step 4. Set k = 1;
Step 6. Apakah k = n?
Jika tidak, naikkan counter k satu poin, yaitu k = k + 1 dan kembali ke Step 5
Step 7. Apakah j = p?
Jika tidak, naikkan counter j satu poin, yaitu j = j + 1 dan kembali ke Step 3
Step 8. Apakah i = m?
Jika tidak, naikkan counter i satu poin, yaitu i = i + 1 dan kembali ke Step 2
Bukti:
c 11 c 12 c12 . .. . c1 j . . c1 p
[ ]
c 21 c 22 c22 . .. . c2 j . . c2 p
. . . . .. . . . . .
c ij= . . . . . . . .
c i1 c i2 ci 3 . .. . c ij . . c ip
. . . . .. . . . . .
. . . . .. . . . . .
cm 1 cm 2 cm 3 . .. . c mj . . c mp
[ ][ ]
a 21 a22 a22 .. . . a2 j . . a2 n b 21 b22 b 22 .. . . b2 j . . b 2n
. . . .. . . . . . . . . . .. . . . . . .
=. . . . . . . . . . . . . . . .
ai 1 ai 2 ai3 .. . . aij . . ain b i1 bi2 b i3 .. . . b ij . . b in
. . . .. . . . . . . . . . .. . . . . . .
. . . .. . . . . . . . . . .. . . . . . .
a m1 am 2 am 3 .. . . a mj . . a mn b n1 bn 2 b n3 .. . . b nj . . b np
Dari perkalian matriks di atas kita temui bahwa elemen cij adalah hasil perkalian antara vektor baris
ke-i: [ai1 ai2 … aij … ain] dari matriks A dengan vektor kolom ke-j: [b1j b2j … bij … bnj]T yang
menghasilkan
n
∑ aik bkj
cij = ai1b1j + ai2b2j + ai3b3j +… + ainbnj = k =1 untuk i = 1, 2, …, m dan j = 1, 2, …, p.
n
∑ aik bk 2
untuk j = 2:: ci2 = ai1b12 + ai2b22 + ai3b32 +… + ainbn2 = k =1
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
n
∑ aik bkp
untuk j = p:: cip = ai1b1p + ai2b2p + ai3b3p +… + ainbnp = k =1
Jadi untuk setiap baris i = 1, 2, …, m kita menghitung sebanyak p elemen matriks C, maka dengan
demikian, kita harus melakukan komputasi dengan Algoritma . q.e.d
A=
( )
0 0 4
2 −1 0
Answer:
2 0 0 2 0 0 2 0 0 1 0 0 1 0 0 1 0 0
A =
( 0 0 4
2 −1 0 )(
→ 2 −1 0 →
0 0 4 ) ( 0 −1 0
0 0 4
→
)(
0 −1 0
0 0 4
→ 0 1 0
0 0 4
→
)( )( )
0 1 0
0 0 1 =I
A = A0 A1 A2 A3 A4 A5 = I
where
2 0 0 2 0 0 1 0 0 1 0 0
A = A0, A1 =
( )
2 −1 0
0 0 4 , A2 =
( )
0 −1 0
0 0 4 , A3 =
( )
0 −1 0
0 0 4 , A4 =
( )
0 1 0
0 0 4 , and
1 0 0
A5 =
( )
0 1 0
0 0 1 =I
For this sequence, A0 A1 is obtained by interchanging rows 2 and 3 of A, A1 A2 is obtained by
row 2 – 2 × row 1. To obtain A3 from A2, ½ row 1 and to obtain A4 from A3, -1× row 2. And finally,
A4 A5 is obtained by ¼ row 3 and A5 = I.
The arrow diagram in Eq. 1 implies a second, “inverse” arrow diagram: operation is done in the
reverse direction.
B = Ak Ak-1 ….Ac A1 Ao = A (2)
This inverse sequence can be verified by prove that every step in a diagram is reversible. If Ai Ai+1
then Ai+1 Ai. The proof for elementary row operations of type 1 and 2 are straight forward. If Ai
Ai+1 represent the addition of α times row k to row l, then Ai+1 Ai is obtained by adding - α times
row k to row l.
Example
I = A5 A4 A3 A2 A1 A0 = A
1 0 0 1 0 0 2 0 0 2 0 0
that is I =
( )(
0 1 0 → 0 −1 0 →
0 0 1 0 0 4 ) ( 0 0 4 )(
2 −1 0 → 0 0 4
2 −1 0 ) =A
Karena operasi dapat mengubah A menjadi I and sebaliknya I menjadi A, dan untuk kasus ini kita
katakan bahwa A ekivalen baris dengan I atau singkatnya A equivalen dengan I. Dua contoh numerik
terakhir membawa kita kepada Teorema berikut ini.
Theorem. Jika A is ekivalen baris dengan B, maka sebaliknya B ekivalen baris dengan A
Bukti. Kita harus membuktikan bahwa Ak →Ak+1 dan sebaliknya Ak+1→ Ak. Bila operasi
type 1 dilakukan terhadap Ak, misalnya baris ke i dipertukarkan dengan baris ke-j, maka
Ak+1 merupakan matrik baru dengan semua baris sama terkecuali baris ke-i dan ke-j yang
bertukar posisi. Jika baris ke-j dan baris ke-i, dari matrik Ak+1, yaitu dengan menggunakan
operasi tipe pertama, maka yang dihasilkan adalah matrik Ak. Jika operasi type 2 dilakukan
terhadap Ak, yaitu dengan memperkalikan, misalnya baris ke-j dengan suatu skalar r. Maka
Ak+1 yang dihasilkan adalah suatu matrik yang sama dengan Ak terkecuali baris ke-j yang
besarnya r kali baris ke-j dari matrik Ak. Jika operasi tipe 2 dilakukan pada Ak+1, yaitu
dengan memperkalikan baris ke-j matrik ini dengan 1/r, maka kita akan kembali
memperoleh matrik asal, yaitu Ak. Operasi type 3 yang dilakukan terhadap Ak akan
menghasilkan Ak+1 dan sebaliknya, jika operasi type 3 dilakukan terhadap Ak+1 akan
menghasilkan Ak. Mengapa?
Sekarang kita melihat kepada suatu konsep yang penting, yaitu konsep premultiplier dan
postmultiplier. Misalkan kita mempunyai matrik A dan G sedemikian, perkalian antara G dengan A
adalah GA. Untuk kasus ini, G disebut sebagai premultiplier dari A dan sebaliknya A disebut sebagai
postmultiplier dari G. Dari uraian yang telah kita lihat di atas, kita dapat menyimak bahwa dalam
operasi baris elementer terhadap matrik A terdapat suatu matrik G sebagai premultiplier dari A
sedemikian sehingga terjadi GA G. Misalkan kita mempunyai A→A1. Maka akan ada suatu
matrik G yang nonsingular sebagai premultiplier dari A sehingga GA = A1. Multiplier-multiplier
semacam ini disebut matrik elementer. Matrik-matrik elementer in sangat mudah untuk dibangun dan
dengan mudah untuk ditunjukkan bahwa mereka invertibel. Sekarang marilah kita liat contoh matrik
A seperti yang dicontohkan sebelumnya. I adalah matrik akhir operasi baris elemeter terhadap A, dan
I adalah matrik identitas. Konsep premultiplier dan postmultiplier ini kemudian kita gunakan untuk
mendayagunakan matrik elementer.
Pertama kali kita pertukar baris kedua dengan baris ketiga sehingga dihasilkan matrik G1, yaitu
1 0 0
G1
[ ]
=0 0 1
0 1 0
Perkalikan baris kedua dari I dengan suatu skalar r, akan diperoleh matrik G2, yaitu
1 0 0
G2
[ ]
=0 r 0
0 0 1
Tambahkan r kali baris pertama pada baris kedua dari natrik I, sehingga diperoleh matrik G3, yaitu:
1 0 0
G3
[ ]
=r 1 0
0 0 1
Kenyataan-kenyataan ini dapat diperlihatkan kebenarannya dengan melakukan perkalian
Contoh 3. Temukanlah sekuens dari matriks elementer yang menyatakan operasi elementer yang
dihasilkan pada contoh 1.
Jawab : Tukarkan baris 2 dan 3 dari matriks I
1 0 0 1 0 0 2 0 0
I G1
[ ]
=0 0 1
0 1 0 , maka kita akan memperoleh G1A
[ ][ ]
=0 0 1 .0 0 3
0 1 0 4 −2 0 = A1
1 0 0 1 0 0 2 0 0
I→ G2
= −2 1 0
0 0 1 [ ] , maka kita memperoleh G2A1
[ ][ ]
= −2 1 0 . 4 −2 0
0 0 1 0 0 3 =A2
1 1
Operasi terakhir adalah memperkalikan baris pertama 2 , baris kedua dengan - 2 dan baris ketiga
1
dengan 3 , sehingga matrik I berubah menjadi G3
1 1
0 0 0 0
I→ G3
[ ]
2
= 0 − 12
0 0
0
1
3
, maka kita akan memperoleh G3A2
[ ][ ]
0
2
= 0 − 12
0
0
1
3
2 0 0
0 −2 0
0 0 3 =I
Persamaan (3) ini menyatakan bentuk lain dari operasi yang dinyatakan oleh persamaan (1), yaitu
bentuk yang melibatkan matrik premultiplier setiap operasinya untuk matrik yang berorde tiga. Jadi
kita dapat merampatkannya untuk matrik yang berorde k, yaitu:
Jenis Pertama. Matriks elementer jenis pertama adalah matriks yang diperoleh dengan
mempertukarkan dua baris dari I
1 0 0
CONTOH 1. Misal
[ ]
E1 = 0 0 1
0 1 0
E1 adalah matriks elementer jenis I, karena diperoleh dengan mempertukarkan kedua baris yang
pertama dari I. Misalkan A adalah matriks 3 x 3.
1 0 0 a11 a12 a12 a11 a12 a13
[
E1 A= 0 0
0 1 0 a ][
1 . a21
31
][
a22
a32
a23
a33
= a31
a21
a32
a22
a33
a23 ]
a11 a12 a13 1 0 0 a 11 a 13 a12
[
AE 1= a21
a31
a22
a32 ][ ] [
a23 . 0 0 1 = a 21 a 23
a33 0 1 0 a 31 a 33
a22
a32 ]
Mengalikan A di sebelah kiri dengan E 1 akan mempertukarkan baris pertama dan kedua dari A.
Mengalikan A di sebelah kanan dengan E 1 adalah ekivalen dengan operasi kolom elementer yang
mempertukarkan kolom-kolom pertama dan kedua.
Jenis Kedua. Matriks elementer jenis II adalah matriks yang diperoleh dengan mengalikan satu baris
dari I dengan konstanta bukan nol.
CONTOH 2
1 0 0
E2 =
[ ]
0 1 0
0 0 4
[ ] [
0 1 0
0 0 4
a21
a31
a22
a32
a23
a33 ] [ =
a21 a22 a 23
4 a 31 4 a32 4 a33 ]
Akhirnya, misalnya E adalah matriks elementer jenis III yang terbentuk dari I dengan menjumlahkan
m kali baris ke-i pada baris ke-j
[ ]
⋮ ⋱ 0
0 ⋯ 1
⋮ ⋱
0 ⋯ m ⋯ 1
⋮ ⋱
0 ⋯ 0 ⋯ 0 ⋯ 1
E= baris ke-i dan baris ke-j
E dapat ditransformasikan kembali menjadi I dengan mengurangi m kali baris ke-i. Jadi
1
[ ]
⋮ ⋱ 0
0 ⋯ 1
⋮ ⋱
0 ⋯ −m ⋯ 1
⋮ ⋱
E−1 =
0 ⋯ 0 ⋯ 0 ⋯ 1
Dengan perkataan lain, B ekivalen baris dengan A jika B dapat diperoleh dari A dengan operasi-
operasi baris yang berhingga banyaknya. Khususnya, dua matriks augmented ⟨ A|b⟩ dan ⟨B|c⟩
adalah ekivalen baris jika dan hanya jika Ax = b dan Bx = c adalah sistem-sistem ekivalen.
Sifat-sifat berikut mengenai matriks-matriks yang ekivalen baris dengan mudah dapat dibuktikan.
(i) Jika A ekivalen baris dengan B, maka B ekivalen baris dengan A
(ii) Jika A ekivalen baris dengan B, dan B ekivalen baris dengan C, maka A ekivalen baris
dengan C.
Jenis Ketiga. Matriks elementer jenis ketiga adalah matriks yang diperoleh dari I dengan
menjumlahkan kelipatan dari satu baris pada baris yang lain.
1 0 4
Contoh 3. E3 =
[ ]
0 1 0
0 0 1
Adalah satu matriks elementer jenis ketiga. Jika A adalah matriks 3 x 3 maka
E3A =
[ a21
a31
a 22
a32
a 23
a 33 ]
a11 a12 4 a11 + a13
AE3 =
[ a21
a31
a22
a32
4 a21+ a23
4 a31+ a33 ]
Perkalian di sebelah kiri oleh E3 akan menjumlahkan 4 kali baris ketiga pada baris pertama. Perkalian
di sebelah kanan E3 akan menjumlahkan 4 kali kolom pertama pada kolom ketiga.
Pada umumnya, misalkan E adalah matriks elementer n x n. Kita dapat mengganggap E diperoleh
dari I oleh suatu operasi baris atau suatu operasi kolom. Jika A adalah matrik n n maka perkalian di
sebelah kiri oleh E mempunyai pengaruh melakukan operasi baris yang sama tersebut pada A. Jika B
adalah matriks m n, maka perkalian di sebelah kanan oleh E ekivalen dengan melakukan operasi
kolom yang sama pada B.
TEOREMA 1.2 Jika E adalah matriks elementer, maka E taksingular dan E-1 adalah matriks
elementer dengan jenis yang sama.
Bukti. Jika E adalah matriks elementer jenis I yang terbentuk dari I dengan mempertukarkan baris
ke-i dan baris ke-j, maka E dapat ditransformasi menjadi I kembali dengan mempertukarkan baris-
baris yang sama ini lagi.jadi EE = I sehingga E adalah invers dari matriks itu sendiri. Jika E adalah
matriks elementer jenis kedua yang terbentuk oleh perkalian baris ke-i dari I dengan skalar bukan nol
, maka E dapat ditransformasikan menjadi matriks satuan kembali dengan perkalian baris ke -i atau
1/. Jadi :
[ ]
⋱ 0
1
1/α
1
0 ⋱
1
E-1 = baris ke-i
Berikut ini akan dibuktikan dua hasil penting yang bermanfaat ketika kita meninjau teori matrik
elementer. Keduanya disajikan dalam bentuk teorema.
Teorema . Setiap matriks elementer adalah invertible dan inversnya adalah matriks elementer dengan
type yang sama.
Bukti. Katakanlah G1 adalah berasal dari operasi tipe 1. Ini berarti bahwa G1 akan
mempertukarkan dua baris yang berbeda dan G12 = I. Jika G2 merupakan matrik yang terjadi karena
operasi tipe 2. Itu berarti G2 memperkalikan baris ke-I dengan suatu skalar r ≠ 0, definisikan juga G3
yang berasal dari tipe 2 tetapi dia memperkalikan baris ke-I dengan 1/r. Maka kita akan memperoleh
G3 G2 = G2 G3 = I. Sekarang ambil G4 yang menambahkan r kali baris ke-I kepada baris ke-j, dan G5
menambahkan –r kali baris ke-I kepada baris ke-j. Maka G4 G5 = G5 G4 = I.
Teorema. Jika operasi baris elementer dilakukan satu kali terhadap I. Jika:
(i). G1 adalah matrik yang dihasilkan karena operasi tipe 1, yaitu dua baris dari matrik I
dipertukarkan, maka det(G1) = -1
(ii). G2 adalah matrik yang dihasilkan karena operasi tipe 2, yaitu suatu baris dari I dikalikan
dengan suatu skalar r, maka det(G2) = r
(iii). G3 adalah matrik yang dihasilkan karena operasi tipe 3, yaitu suatu baris dalam matrik I
dikalikan dengan suatu skalar tertentu kemudian diperkurangkan dengan baris yang lain juga
dalam I, maka det(G3) = 1
Bukti.
Teorema 2. Jika A equivalen dengan B, maka ada suatu matriks non singulir S sedemikian hingga SA
=B
Bukti.
Akibat 1 : Jika A row equivalen dengan B maka A dan B kedua-duanya non singular.
Bukti.
Akibat 2 : If A is row equivalent to I, then A is non singular.
Bukti.
Operasi Baris Elementer yang menghasilkan matrik U dan matrik I: Pengecekan kesingularan.
Dalam sub bagian ini kita akan membicarakan dua konsep penting, yaitu suatu operasi baris elementer
yang dilakukan kepada matrik A hingga suatu saat tertentu akan menghasilkan matrik trapesoidal atas
yang pada kenyataannya ekivalen baris dengan matrik A. Dengan pengertian dari konsep ini
kemudian kita akan membawa kita kepada cara untuk mengecek apakah suatu matrik A singular atau
non singular dan dengan kesingularan yang diketahui kemudian kita dapat atau tidak dapat
menentukan invers dari A. Kita akan mulai dengan yang pertama, yaitu memperlihatkan bahwa setiap
matrik A row ekivalen dengan matrik segitiga atas U.
Theorem 3 : Setiap matrik A adalah row equivalen dengan matrik trapesoidal atas U.
Bukti. Sebenarnya pembuktian untuk teorema ini cukup sederhana. Dengan menerapkan operasi
baris elementer untuk menghapus entri-entri di bawahnya, dimulai dari kolom pertama dan diteruskan
dengan cara yang sama untuk setiap kolom (sambil bergerak kekanan). Misalkan untuk matrik A kita
sudah melakukan sebanyak r operasi sehingga diperoleh:
¿ ¿ ¿ . . ... ¿
0 . . ....
( )
¿ ¿ ¿
0 0 ¿ . . .... ¿
0 0 0 . . .... ¿
. . . . . .... ¿
. . . . . .... ¿
0 0 . . c .... ¿
0 0 0 . d .... ¿
0 0 0 e .... ¿
A A1 A2 … Ar-1 Ar =
Akibat 1. Matriks bujur sangkar A singulir jika dan hanya jika row equivalen dengan matriks segitiga
atau yang salah satu barisnya nol.
Bukti.
Contoh 3.
3 3 3 1 1 −3 1 1 −3 1 1 −3
A =
singulir
[ ][ ][
6 6 −1 → 6 6 −1 → 0 0 −19 →
1 1 −3 3 3 3 3 3 3 ] [ → 0 0 −19
0 0 12 ] = U Matriks A
Teorema 5. Matriks A non singular jika dan hanya jika row equivalen dengan matriks I.
Bukti.
3 −1 1
3 −1 1 : 1 0 0 1 0 2 : 0 1 0
[
1 0 2 : 0
0 1 1 : 0
1 0 2 :
1
0
0
0
1 ][
→
1 0
3 −1 1 :
0 1 1 :
1 0
1 0
0 0
2 :
0 →
1 ]
0 1 0
[
→ 0 −1 −5 :
0 1 1 :
1
0 0 1 ][
−3 0 → 0 −1
0 0
−5 :
−4 :
1 −3 0 →
1 −3 1
1
]
−1 1
[ ]
1 0 0 :
1 0 2 : 0 1 0 2 2 2
→
[ 0
0
1
0
−5
1
:
:
−1
−1
4
−3
3
4
0
−1
4
] → 0
0
1
0
0
1
:
:
5
−1
4
4
−27
3
4
2
−1
5
4
2 −2 1
Akibat 3. Jika A adalah matriks bujursangkar dan juga AB = I atau CA = I, maka A invertibel.
Bukti.
Determinan dan Operasi Baris Elementer. Dalam subbab ini kita membahas bagaimana pengaruh-
pengaruh dari operasi baris pada determinan suatu matriks. Ketika kita melihat dan mengerti
pengaruh-pengaruh ini, maka kita dapat membuktikan bahwa suatu matriks A dapat singular jika dan
hanya jika determinannya adalah nol. Sehingga dengan demikian kita akan dapat mengembangkan
suatau metode untuk menghitung determinan yang lebih efisien, yaitu perhitungan determinan yang
menggunakan operasi-operasi baris. Juga,kita akan membuktikan suatu teorema penting tentang
determinan dari hasil kali dua matriks. Kita awali dengan lemma berikut.
Teorema Misalkan A adalah matriks n x n. Jika Ajk menyataka kofaktor dari ajk untuk k = 1, 2, …, n
( )
⋮
ai1 a i2 ⋯ a in
¿
A= ⋮
ai1 a i2 ⋯ a in
⋮
an 1 a n2 ⋯ a nn
baris ke-j
karena dua baris dari A * adalah sama, determinannya pasti nol. Maka dari ekspansi kofaktor dari
det(A*) sepanjang baris ke-j akan berakibat bahwa :
(i). A1 merupakan hasil dari pertukaran baris dalam A,maka det (A)= -det (A1)
(ii). A1 merupakan perkalian suatu baris dalam A dengan r 0, maka rdet(A) = det (A1)
(iii). A1 merupakan bentuk dari operasi type ke tiga, maka det(A) = det (A1)
Bukti.
(i). Sudah diperlihatkan di atas bahwa, jika kita melakukan satu operasi baris elementer,
maka Untuk melihat pengaruh-pengaruh dari operasi baris I, harap diperhatikan bahwa
operasi ini dapat diselesaikan dengan menggunakan operasi-operasi baris II dan III. Kita akan
menggambarkan bagaimana hal ini bisa dilakukan untuk matriks-matriks 3 x 3.
(
A= a 21
a 31
a22
a32
a23
a33 )
Dengan mengurangi baris 3 dari baris 2 akan menghasilkan
a 11 a12 a13
( 1)
(
A = a21 −a31
a31
a22 −a32
a32
a 23 −a33
a33 )
Selanjutnya, baris kedua dari A(1) ditambahkan pada baris ketiga:
(
A = a21 −a31
a 21
a22 −a 32
a22
a 23 −a33
a23 )
Dengan mengurangi baris 3 dari baris 2, kita peroleh :
a 11 a 12 a13
( 3)
(
A = −a 31 −a32 −a33
a21 a 22 a23 )
Karena matriks-matriks ini telah dibentuk hanya dengan menggunakan operasi baris II, maka
ini berarti bahwa:
det(A) = det(A(1)) = det(A(2)) = det(A(2))
Akhirnya, jika baris kedua dari A dikalikan dengan –1, maka kita peroleh :
A(4) tak lain adalah matriks yang diperoleh dengan mempertukarkan baris kedua dan baris
ketiga dari A.
Uraian yang sama ini dapat diterapkan pada matriks-matriks n x n untuk menunjukkan bahwa
jika dua baris dipertukarkan tempatnya maka tamda dari determinan akan berubah. Jadi jika A
adalah matriks n x n dan E ij adalah matriks elementer n x n yang diperoleh dengan
mempertukarkan baris ke-i dan baris ke-j dari I, maka :
det(EijA) = -det(A)
Khususnya,
det(Eij) = det(EijI) = -det(I) = -1
= rdet(A)
Khususnya
sehingga
(iii). Misalkan E adalah matriks elementer jenis III yang terbentuk dari I dengan menambahkan c
kali baris ke-i pada baris ke-j. Karena E adalah matriks segitiga dan elemen-elemen
diagonalnya semuannya 1, maka det(E)=1, Kita akan membuktikan bahwa
Jika det(EA) diekspansikan oleh kofaktor-kofaktor sepanjang baris ke-j maka berdasarkan
Teorema (*)
= det(A)
Jadi
det(EA) = det(A) = det(E) det(A)
di mana
−1
det ( A )=
{ r≠ 0
1 ¿
¿
(&)
Hasil-hasil serupa berlaku juga untuk operasi-operasi kolom. Memang benar, bahwa jika E adalah
matriks elementer, maka :
Akibat 1. Jika A row equivalen dengan B, maka ada r skalar non zero sedemikian hingga det(A) =
rdet (B)
Akibat 2. Jika satu baris atau kolom dari suatu matriks adalah kelipatan dari baris (atau kolom) lain,
maka determinan dari matriks tersebut harus sama dengan nol.
Bukti: Hal ini merupakan akibat langsung dari point (iii) Teorema di atas
Sebagai akibat dari (&) maka semua matriks elementer memiliki determinan tak nol. Pengamatan ini
dapat digunakan untuk membuktikan teorema berikut.
Theorem Suatu matriks A berorde n × n adalah singular jika dan hanya jika det(A) = 0
Bukti. Matriks A dapat direduksikan menjadi bentuk eselon baris dengan operasi-operasi baris yang
berhingga banyaknya. Jadi
U = EkEk-1…E1A
det(U) = det(EkEk-1…E1A)
Karena determinan-determinan dari E 1 semuanya tak nol, maka det(A) = 0 jika dan hanya jika
det(U)=0. Jika A matriks singular, maka matriks U memiliki satu baris yang seluruhnya terdiri dari
nol dan dengan demikian det(U) = 0. Jika A matriks taksingular, maka U matriks segitiga yang
elemen-elemen diagonal semuanya 1 sehingga det(U) = 1.
Berdasarkan bukti Teorema ini kita dapat menemukan suatu metode untuk menghitung det(A).
Reduksikan A menjadi bentuk eselon baris.
U = EkEk-1….E1A
Jika baris terakhir dari U terdiri seluruhnya dari nol maka A singular dan det(A) = 0. Jika tidak
demikian, A adalah taksingular dan
Sesungguhnya jika A taksingular, maka adalah lebih sederhana untuk mereduksi A menjadi bentuk
segitiga. Hal ini dapat dilakukan hanya dengan menggunakan operasi-operasi baris I dan III. Jadi
T = EmEm-1…E1A
Sehingga
det(AB) = 0 = det(A)det(B)
Jika B taksingular, maka B dapat ditulis sebagai hasil kali matriks-matriks elementer. Kita telah
melihat bahwa sifat ini berlaku untuk matriks-matriks elementer. Jadi:
det(AB) = det(AEkEk-1…E1)
= det(A)det(Ek)det(Ek-1)…det(E1)
= det(A)det(AEkEk-1…E1)
= det(A) det(B)
Theorem 7. Determinan dari suatu matriks segitiga atas adalah produk dari entri diagonalnya.
1 −1 1
Jawab :
[ ] [
det 0 1 1 = det 0 1 1 = det 0 1 1 = −6
2 1 −1 0 3 −3 0 0 −6 ] [ ]
−1 2 1 1
Contoh 6. Jika A =
−1 2 1 1 −1
[ 0
0
2
2
1
1
0
0 0
1 −1
0 3
1 1
]maka hitunglah det A
−1 2 1 1
[ 0
0
2
1
1
0
0 0
1 −1
0 3
→
][0
0
0
1
1
4
0 0
1 −1
2 5
→
][
0
0
0
1
0
0
0 0
1 −1
0 7
]
Dengan demikian maka, det A = (-1 .1 .1 .7) = -7.
Catatan tambahan :
det (kA) = (kn) det (A) dimana A adalah matriks n x n
Jika P M dan E masing-masing adalah matrik baris elementer dari type 1, 2, dan 3 dan bahwa M
memperkalikan baris ke I dari A dengan . Maka : a). det (P) = -1; b) det (M) = det (I) = ; c) det
(E) = 1
Det (G A) = det (G) det (A), jika G adalah setiap matrik baris elementer.
Teorema 9. Untuk setiap matriks bujursangkar A dab B, berlaku :
Det (AB) = det(A) det (B)
2 2 1
A
2 2 1
[
→ 0 1 −2 →
3 1 −2 ]
0 1 −2
0 −2 − [ ][ ]
7
2
→
0 1 −2
0 0 −
15
2
=
1 0 0 1 0 0 1 0 0
E1 =
Yaitu :
[ ] [
−1 1 0
0 0 1 ; E2 =
0 1 0
−2 0 1 ] ; E3 =
[ ]
0 1 0
0 3 1 ;
1 0 0 2 2 1 2 2 1
E1 A =
[ ] [ ]
−1 1 0
0 0 1
2 3 −2
4 1 −2 =
[ ]
0 1 −3 =
4 1 −2 A1
1 0 0 2 2 1 2 2 1
E2 (E1A ) =
[ ] [ 0 1 0
−2 0 1
0 1 −3 =
4 1 −2 ] [ ]
0 1 −3 =
0 −3 4 A2
1 0 0 2 2 1 2 2 1
[ ] [
E3 (E2 E1 A ) =
0 1 0
0 3 1
0 1 −3 =
0 −3 4 ] [ ]
0 1 −3 =
0 0 −13 U
Karena produk dari matriks segitiga bawah adalah matrik segitiga bawah, maka:
1 0 0
S = E1 E2 E3 =
[ ] −1 1 0
−5 3 1 dan
1 0 0 2 2 1 2 2 1
SA =
[ ] [ ] [
−1 1 0
−5 3 1
2 3 −2
4 1 −2 =
0 1 −3 =
0 0 −13 ]
U
L = S-1 dan S A = U S = L U
1 0 0 1 0 0 2 2 1
S-1 = L =
[ ] 1 1 0
2 −3 1 ; LU =
[ ] [
1 1 0
2 −3 1
0 1 −3 =
0 0 −13 ]
2 2 1
=
[ ] 2 3 −2
4 1 −2 =A
Jika beberapa pertukaran baris digunakan dalam diagram A … U, maka L akan tidak berupa
matrik segitiga bawah. Tetapi ini bisa saja dibuat dengan mempertukarkan beberapa baris sehingga
ditemukan L yang berbentuk segitiga bawah.
Teorema : Untuk setiap matriks A ada satu matrik segitiga atas U dan satu permuted segitiga bawah
LP, sedemikian sehingga : A = LP U.
Secara umum, LP adalah suatu matriks yang dapat dibuat segitiga bawah dengan mempertukarkan
baris, yaitu bahwa ada sederetan matriks elementer dari type 1 : P1, P2, …,Pk sedemikian sehingga :
Pk Pk-1 … P1Lp = L
Akibat : Untuk setiap matrik A, ada suatu permutasi baris dari A yang leading kepada A1, suatu
matrik segitiga atau U, dan matrik segitiga bawah L sedemikian sehingga : A1 = LU
Dari uraian di atas tentang Determinan dan invers dari suatu matriks A, kita dapat menyusun
Algoritma berikut ini.
Algoritma
Input untuk algoritma ini adalah orde dari matriks A, n, elemen-elemen dari matriks A, dan vektor
konstanta b.
Step 1.
Step 2.
Step 3.
Step 4.
Step 5.
( )
0 1 0 . . . 0
0 0 1 . . . 0
. . . . . . .
. . . . . . .
. . . . . . .
0 0 0 . . . 1
Jawab: (ei) = jelas merupakan matrik yang berada dalam rref.
Contoh 8.
1 ¿ 0 0 ¿ 1 0
[ 0
0
0
0
0
0
1
0
0
0
1
0
0
¿
0
][]
dan
0 1
0 0
0 0 berada dalam rref
1 ¿ 0 0 ¿ 1 ¿ 0 0 0
[ 0
0
0
0
0
0
0
0
0
0
1
0
0
¿
0
][
dan
0 0
0 0
0 0
0
0
0
0
1
0
1
0
0
] bukan berada dalam rref.
Teorema . Untuk setiap matriks A yang row equivalen dengan suatu matrik Ar dalam rref. Lebih-
lebih lagi jika B row equivalen dengan A dan jika B berada dalam rref, maka B = Ar.
Karena rref adalah unik kita dapat mengidentifikasi kolom-kolom dalam A akan menjadi leading
coloumn dari Ar. Kita sebut kolom-kolom ini sebagai leading coloumn.
0 1 1 1 1
A=
[ 0 −1 −1 1 1
0 1 1 −1 2 ]
0 1 1 1 1 0 1 1 1 1
Jawab : A =
[ 0 0 0 2 2 → 0 0 0 1 1 →
0 0 0 −2 1 0 0 0 −2 1 ][ ]
0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0
[
0 0 0 −2 1 0 0 0 0 3 ][
→ 0 0 0 1 1 → 0 0 0 1 1 → 0 0 0 1 1 →
0 0 0 0 1 ][ ] [ → 0 0 0 1 0
0 0 0 0 1 ] = Ar
1 1 1
A*2 =
[]
−1
1 ; A*4 =
[]
1
−1 ; A*5 =
[]
1
2
PENGGUNAAN OPERASI BARIS PADA SOLUSI DARI Ax = b
Teorema. Sistem Ax = b dan Bx = c mempunyai vektor solusi yang sama jika [A|b] … [B|c].
Dengan ini kita dapat menganalisa dan menyelesaikan sistem Ax = b. Suatu sistem dengan satu atau
lebih solusi disebut konsisten. Tetapi yang tidak mempunyai solusi disebut inkonsisten.
1 1 1 1 x1 1
Ax =
[ 0 −1 1 1
0 1 1 −1 ][ ] [ ]
x2 = 1
x3 2
1 1 1 1 1 1 1 1 1 1 1 0 0 2 2
Jawab :
[ ][
0 −1 −1 1 1 → 0 1 1 −1 −1 → 0 1 1 −1 −1 →
0 1 1 −1 2 0 1 1 −1 2 0 1 1 −1 2 ][ ]
1 0 0 2 2 1 0 0 2 2
[ 0 1 1 −1 −1 →
0 0 0 0 3 ] Ar =
[ 0 1 1 −1
0 0 0 0 ] C =
[]
−1
3
1 1 1 1 x1 1
Ax =
[ 0 −1 −1 1
0 1
1 0
1 2
1 −1
2
2
0
0
]( ) ( )
x2
x4
x5
1
x 3 = −1
2
0
1 1 1 1 1 1 0 0 2 2
[A|b] =
[ 0 −1 −1 1 1
0 1 1 −1 −1 → ... →
1 0 2 0 2
1 2 2 0 0
] [ ] 0
0
0
0
1
0
0
0
0 0 −1
1 −1 0
0 0 0
0 0 0
Keuntungan dari rref. Dalam Sub-bagian ini kita akan mendaftarkan keuntungan-keuntungan yang
dapat diperoleh kalau kita memahami konsep rref. Untuk itu kita akan membukanya dengan
membuktikan tiga Lemma berikut ini.
Lemma 1: Katakanlah bahwa A dan B berada dalam rref dan row equivalen. Ambil A1 dan B1
adalah hasil dari menghilangkan k kolom terakhir dari masing-masing A dan B, maka A1 dan B1
berada dalam rref dan juga row equivalen.
Lemma 2 : Jika [Ar|c] berada dalam rref, maka sistem Ar x = c tidak konsisten, jika dan hanya jika c
adalah leading coloumn dari [Ar|c].
Lemma 3 : Jika [Ar|c] dan [Ar|] berada dalam rref dan row equivalen maka c= .
Teorema (Keunikan). Jika A dan B berada dalam rref dan row equivalen, maka A = B.
System x1 + 2x2 = 1
x3 = -1
Augmented matrik
[10 0 2 1
1 0 −1 ] (**)
x3 = -1
(*) berada dalam rref
b = (1 2 5)T dan A =
[ ]
2 2 2
−2 4 −1
Mulai dengan eliminasi maju :
2 −1 1 1 2 −1 1 1 2 −1 1 1
[A|b] =
[
= [U|c]
2 2 2 2
−2 4 −1 5
→
] [
... → 0 3 1 1
0 3 0 6
→
][
0 3 1 1
0 0 −1 5 ]
Dengan substitusi balik diperoleh : x = (4 2 -5)T.
Input dari Algoritma ini adalah dimensi dari matriks A, yaitu n dan harga-harga dari elemen-elemen
matriks A dan vektor konstanta b
Step 1. Set k = 1
Step 2. Set i = k + 1
Step 5. Apakah j = n
Jika tidak, naikkan counter j satu point, yaitu j = j + 1 dan kembali ke Step 4.
Step 6. Apakah i = n?
Jika tidak, naikkan counter i satu point, yaitu i = i + 1 dan kembali ke Step 3.
Step 8. Apakah k = n - 1?
Jika tidak, naikkan counter k satu point, yaitu k = k + 1 dan kembali ke Step 2.
Jika tidak, naikkan counter j satu point, yaitu j = j + 1 dan kembali ke Step 11.
Jika tidak, turunkan counter i satu point, yaitu i = i - 1 dan kembali ke Step 10.
Sistem Persamaan Linear dengan keadaan yang tidak sehat (Ill-conditioned systems)
Kecukupan dari suatu sistem untuk memberikan jawaban yang akurat akan bergantung kepada kondisi
dari sistem persamaan yang akan diselesaikan. Sistem-sistem dengan keadaan yang sehat (well-
conditioned system) adalah sistem-sistem yang dengan sedikit perubahan pada satu atau lebih dari
koefisien persamaan hanya menghasilkan perobahan yang kecil juga dalam solusinya. Sedangkan
suatu sistem persamaan yang tidak sehat (ill-conditioned system) adalah sistem persamaan yang
dengan sedikit saja perubahan dalam satu atau lebih konstantan persamaan akan memberikan
perubahan yang besar dalam jawaban yang dihitung.
Ketika proses pencarian solusi dengan menggunakan metoda eliminasi Gauss dilakukan, maka dalam
perhitungan akan ditemui galat yang disebabkan karena pembulatan (round-off errors) yang pada
gilirannya dapat memberikan perubahan yang besar dalam solusi.
Karena masalah inilah kita harus mencarikan suatu cara untuk mencegah hal itu terjadi. Dan untuk
maksud tersebut ada dua hal yang perlu kita bahas berikut ini.
Pivoting. Kalau elemen matriks dengan nilai nol terjadi pada baris pertama dan kolom pertama
(elemen poros—pivot), maka normalisasi akan menyebabkan pembagian dengan nol dan ini tidak
diinginkan. Hal ini juga terjadi apabila elemen-elemen pivot dalam perhitungan yang terjadi
memberikan harga yang cukup dekat dengan nol maka hal yang sama dapat terjadi. Jadi adalah suatu
keharusan untuk menentukan koefisien sistem persamaan terbesar yang ada. Baris kemudian
dipertukarkan untuk mendapatkan elemen pivot yang paling besar. Karena terjadi pertukaran hanya
terjadi pada baris, maka strategi ini disebut sebagai “partial pivoting”. Jika terjadi perubahan kolom
maupun baris untuk mendapatkan elemen pivot, maka strategi yang digunakan disebut sebagai
“complete pivoting”.
Scaling. Proses scaling adalah proses untuk menghindari galat yang disebabkan karena pembulatan
(round-off errors) dan yang terjadi pada sistem persamaan dengan koefisien yang sangat besar dan
situasi seperti ini sering sekali terjadi pada bidang rekayasa di mana dalam pemodelan untuk
mendapatkan suatu sistem persamaan dilibatkan banyak satuan yang berbeda. Sebagai contoh, dalam
bidang rekayasa elektrik ketika seorang insinyur elektrikal hendak memodelkan suatu rangkaian
listrik, beda tegangan atau voltase bisa berkisar dari beberapa milivolt hingga kilovolt. Karena
banyaknya satuan yang dilibatkan akan memberikan koefisien-koefisien dengan besar dan arah yang
berbeda. Dan pada gilirannya akan berdampak pada galat pembulatan sebagai mana itu juga
berpengaruh pada pivoting.
Dari uraia dalam bagian ini kita dapat membuat algoritma untuk proses pivoting sebagai berikut.
Algoritma
Input bagi algoritma ini adalah orde dari matriks A, n, dan elemen-elemen dari matriks A.
pivot = ii
Step 4. Apakah ii = n?
Jika tidak, naikkan counter ii satu point, yaitu ii = ii + 1 dan kembali ke Step 2.
apivot, jj = ak,jj
ak,jj = Boneka
Step 7. Apakah jj = n?
Jika tidak, naikkan counter jj satu point, yaitu jj = jj + 1 dan kembali ke Step 6.
bpivot = bk
bk = Boneka
Step 9. Proses komputasi untuk pivoting selesai. Lanjutkan untuk proses berikut.
Dengan adanya proses pivoting maka kita bisa meminimalisir galat karena pembulatan. Algoritma
pivoting ini kemudian dapat ditanamkan dalam algoritma eliminasi Gauss dan menghasilkan suatu
Algoritma Eliminasi Gauss dengan proses pivoting.
Metoda Gauss-Jordan
Metoda eliminasi yang kita bicarakan di atas dapat digunakan menyelesaikan cukup banyak
persamaan dalam suatu sistem persamaan tertentu. Metoda Gauss-Jordan ini merupakan varian dari
metoda eliminasi Gauss. Perbedaan utama adalah bahwa ketika eliminasi anu dalam metoda Gauss-
Jordan hal itu dilakukan terhadap semua persamaan ketimbang apa yang dilakukan oleh eliminasi
Gauss yang hanya melakukan eliminasi hanya pada baris berikutnya. Sebagai tambahan dalam metoda
ini, sebagai tambahan semua baris dibagikan dengan elemen pivotnya.
Dari Analisis di atas, kita dapat membuat algoritma berikut ini.
Step 1. Set k = 1
Step 3. Apakah k = n?
Jika tidak, naikkan counter k satu point, yaitu k = k + 1 dan kembali ke Step 2.
Step 4. Jika (i ≠ k)
Step 6. Apakah j = n + 1?
Jika tidak, naikkan counter k satu point, yaitu j = j + 1 dan kembali ke Step 5.
Step 7. Apakah i = n?
Jika tidak, naikkan counter i satu point, yaitu i = i + 1 dan kembali ke Step 4.
Step 8. Apakah k = n?
Jika tidak, naikkan counter k satu point, yaitu k = k + 1 dan kembali ke Step 2.
Ada tiga metoda dekomposisi terhadap suatu matrik A menjadi matrik L dan U dengan menggunakan
konsep perkalian matrik, yaitu:
Dekomposisi Crout
Dekomposisi Doolitle
Dekomposisi Cholesky
Ketiga dekomposisi ini digunakan untuk mendekomposisi matrik A, yang secara matematika
mengikuti persaman:
A = LU
Atau secara detail dalam bentuk matrik:
( ) ( )( )
a21 a 22 .. . a2 n l 21 l 22 . .. 0 0 u22 ... u 2n
. . .. . . =. . . .. . . . ... .
. . .. . . . . . .. . . . ... .
. . .. . . . . . .. 0 . . ... .
a n1 an 2 .. . ann l n1 ln 2 . .. l nn 0 0 ... unn
(1)
Dimana L adalah matrik segitiga bawah dan U adalah matrik segitiga atas. Dua metoda dekomposisi
yang pertama menggunakan keuntungan dari elemen diagonal dari matrik-matrik L dan U. Pada
metoda Crout, setiap elemen diagonal matrik U yang dihasilkan karena dekomposisi diberi bernilai
satu, yaitu uii = 1. Sedangkan pada metoda Doolitle, setiap elemen diagonal matrik L yang dihasilkan
karena dekomposisi diberi bernilai satu, yaitu lii = 1. Dan pada metoda Cholesky, matrik U yang
dihasilkan karena dekomposisi adalah hasil transpose dari matrik L. Sekarang kita akan maju ke
dalam setiap metoda dengan ditil.
Metoda Dekomposisi Crout. Seperti yang telah dinyatakan di atas, bahwa metoda ini menggunakan
kenyataan bahwa elemen diagonal matrik U hasil dekomposisi A semuanya bernilai satu, yaitu uii = 1.
Sehingga kita dapat menulis kembali persamaan (1) di atas sebagai:
a11 a 12 .. . a1 n l 11 0 . .. 0 1 u12 . .. u1 n
( ) ( )( )
a21 a 22 .. . a2 n l 21 l 22 . .. 0 0 1 . .. u2 n
. . .. . . =. . . .. . . . . .. .
. . .. . . . . . .. . . . . .. .
. . .. . . . . . .. 0 . . . .. .
a n1 an 2 .. . ann l n1 ln 2 . .. l nn 0 0 . .. 1
(2)
Hasil dekomposisi yang dilakukan berdasarkan persamaan (2) dapat diperlihatkan sebagai berikut.
Pertama-tama kita mulai dari kenyataan bahwa elemen pertama baris pertama dari matrik A
merupakan hasil perkalian dari baris pertama matrik L dengan kolom pertama matrik U. Dengan
demikian kita akan memperoleh a11= l11 atau l11= a11. Kita juga tahu kenyataan elemen pertama dari
baris kedua matrik A adalah sama dengan baris kedua matrik L dikalikan dengan kolom pertama
matrik U dan kita mendapatkan l21= a21. Selanjutnya kita akan menghitung l31 dengan menggunakan
kenyataan bahwa elemen pertama dari baris keketiga matrik A adalah sama dengan baris kedua matrik
L dikalikan dengan kolom pertama matrik U. Dan kita akan memperoleh:
Karena l11 sudah dihitung dengan persamaan (2a), langkah berikut nya adalah memperkalikan baris
pertama dari matrik L dengan setiap kolom dari matrik U. Kita akan memulainya dengan
memperkalikan baris pertama matrik L dengan kolom kedua dari matrik U dan kita memperoleh l11u21
= a21. Sehingga kita akan memperoleh:
Langkah berikutnya adalah memperkalikan baris pertama L dengan kolom ketiga dari matrik U dan
kita memperoleh l11u13 = a13. Sehingga kita akan memperoleh:
Bila kita lanjutkan dengan cara yang sama, yaitu memperkalikan baris pertam matrik L dengan kolom
keempat dan seterusnya, secara rekursif kita akan memperoleh:
Berdasarkan persamaan (2d) dan (2d) ini kita dapat menyusun step pertama Algoritma
Dekomposisi LU Crout, sebagai
Untuk setiap i = 1, 2, 3, …, n;
Berdasarkan nilai l22 dari perhitungan dengan menggunakan persamaan (2e), kita telah siap untuk
mengitung u23, u24, …, u2n. Dan kita mulai dengan menghitung u23. Dengan memperkalikan baris
kedua dari matrik L dengan kolom ketiga dari matrik U dan setelah penyusunan ulang maka kita
peroleh:
Untuk menghitung u24 kita lakukan dengan cara memperkalikan baris kedua matrik L dengan kolom
keempat dari matrik U dan hasil akhirnya adalah:
Untuk menghitung u25 kita lakukan dengan cara memperkalikan baris kedua matrik L dengan kolom
kelima dari matrik U dan hasil akhirnya adalah:
Proses ini kita lanjutkan dalam pola yang sama hingga u2n , sehingga secara rekursif kita akan
memperoleh:
Untuk mempermudah uraian mengenai penyusunan algoritma bagi step 2 ini, kita akan memecah step
2 ini menjadi beberapa step. Berdasarkan persamaan-persamaan (2e) dan (2g), kita dapat menulis
step 2.1 sebagai:
Sekarang kita mengambil j = 3. Dengan demikian kita dapat menghitung l33 dan dengan nilai ini kita
menghitung u34, u35, …, u3n. dengan cara memperkalikan baris ketiga dari matrik L dengan kolom
kedua dan seterusnya dari matrik U. Kita akan mulai dengan menghitung l23 yaitu dengan
memperkalikan baris kedua matrik L dengan kolom kedua matrik U, yang mana setelah penyusunan
ulang kita memperoleh:
Atau dalam notasi sigma kita dapat menulis persamaan (2h) sebagai:
2
l 33=a33− ∑ l 3k u k 3
k=1 (2h1)
Berdasarkan nilai l33 dari perhitungan dengan menggunakan persamaan (2h1), kita telah siap untuk
mengitung u34, u35, …, u3n. Dan kita mulai dengan menghitung u34. Dengan memperkalikan baris
ketiga dari matrik L dengan kolom keempat dari matrik U dan setelah penyusunan ulang maka kita
peroleh:
Atau dalam notasi sigma kita dapat menulis persamaan (2h2) sebagai:
2
a 34 − ∑ l 3 k uk 4
k =1
u34 =
l 33 (2h3)
Untuk menghitung u35 kita lakukan dengan cara memperkalikan baris ketiga matrik L dengan kolom
kelima dari matrik U dan hasil akhirnya adalah:
Atau dalam notasi sigma kita dapat menulis persamaan (2h4) sebagai:
2
a35− ∑ l3 k u k 5
k=1
u35=
l 33 (2h5)
Jika kita melakukan pola perhitungan yang analog untuk menghasilkan bentuk yang lebih umum,
yaitu :
2
a3 i− ∑ l 3 k u ki
k=1
u3 i=
l 33 ; untuk i = 4, 5, …, n-1 (2h6)
Berdasarkan persamaan-persamaan (2h1) dan (2h6) kita dapat menuliskan step 2.3 sebagai
Analog dengan penurunan step 2.2 kita dapat menurunkan step 2.3 sebagai berikut:
Step 2.1 hingga step 2.n-1 mempunyai bentuk yang analog sehingga kita dapat menggabungkannya
menjadi satu step yang kompak, yaitu step 2 sebagai berikut.
Sekarang hanya tinggal lnn yang belum dihitung. Untuk menghitungnya, kita memperkalikan baris ke-
n dari matrik L dengan kolom ke-n dari matrik U. Dan setelah disusun kembali, hasilnya adalah:
n−1
l nn=a nn −∑ l jk u kj
k =1 (2h7)
berdasarkan persamaan (2h7) ini, kita dapat menuliskan step terakhir dari algoritma, yaitu
n−1
l nn=a nn −∑ l jk u kj
Step 3. Hitung k =1 . Stop
Dengan demikian kita sekarang sudah siap untuk menuliskan Algoritma Dekomposisi LU Crout,
sebagai berikut (Algoritma )
matrik L dan U.
Untuk setiap i = 2, 3, …, n;
n−1
l nn=a nn −∑ l jk u kj
Step 3. Hitung k =1 . Stop
Untuk Step 1, jumlah perhitungan yang dilakukan sebanyak 2(n - 1). Untuk mengerjakan Step 2
jumlah perhitungan yang harus dilakukan adalah…. Sedangkan untuk mengerjakan step 3 diperlukan
sebanyak n perhitungan. Sehingga jumlah perhitungan seluruhnya yang harus dilakukan Algoritma ini
adalah … perhitungan.
Dari Algoritma di atas kita dapat menyusun Pseudocodenya, yang nantinya akan digunakan sebagai
acuan untuk menyusun program komputer. Pseudocode Algoritma ini diberikan dalam bentuk akhir
berbasis sriptPemrograman Matlab.
Metoda Dekomposisi Doolitle. Seperti yang telah dinyatakan di atas, bahwa metoda ini
menggunakan kenyataan bahwa elemen diagonal matrik L hasil dekomposisi A semuanya bernilai
satu, yaitu lii = 1. Sehingga kita dapat menulis kembali persamaan (1) di atas sebagai:
( ) ( )( )
a21 a 22 .. . a2 n l 21 1 . .. 0 0 u22 .. . u 2n
. . .. . . = . . . .. . . . .. . .
. . .. . . . . . .. . . . .. . .
. . .. . . . . . .. 0 . . .. . .
a n1 an 2 .. . ann l n1 ln 2 . .. 1 0 0 .. . unn
(3)
Hasil dekomposisi yang dilakukan berdasarkan persamaan (3) dapat diperlihatkan dalam bentuk
teorema sebagai berikut.
Teorema. Entri-entri dari matrik-matrik L dan U dalam persamaan (3) dapat dihitung dengan
Step 1. Untuk i = 2, …, n
ai1
li 1 =
Set a11
j−1
Hitung :
l ij= ( aij −∑ l ik ukj
k=1
u jj )
n−1
unn=ann− ∑ l nk ukn
Step 3. Hitung k =1 . Stop
Metoda Dekomposisi Cholesky. Metoda ini didasarkan kepada kepada kenyataan bahwa ada suatu
matrik A yang positif definit sehingga dapat diambil matrik U sebagai hasil transpose dari matrik L,
yaitu LT. Atau dalam notasi matrik dan vektor kita dapat menghitng entri-entri dari matrik L dengan
menggunakan persamaan berikut.
A = LLT (4)
a11 a 12 .. . a1 n l 11 0 . .. 0 l 11 l 21 .. . l n1
( ) ( )( )
a21 a 22 .. . a2 n l 21 l 22 . .. 0 0 l 22 .. . l n2
. . .. . . =. . . .. . . . .. . .
. . .. . . . . . .. . . . .. . .
. . .. . . . . . .. 0 . . .. . .
a n1 an 2 .. . ann l n1 ln 2 . .. l nn 0 0 .. . l nn
(5)
Jika suatu matrik A adalah matriks yang positif definit dan dapat didekomposisi ke dalam bentuk
seperti yang dinyatakan oleh persamaan (4) atau (5), maka algoritma untuk menghitung setiap elemen
dari matrik L, yaitu :
Untuk j = 2, 3, …, n
a ij
l j 1=
Hitung l11
j −1
Hitung
√
l jj = a jj− ∑ l
k=1 kk
2
l ij=
( a ji− ∑ l jk l ik
k =1
)
Hitung l jj
Step 3 Untuk j = n
j −1
Hitung
√
l jj = a jj− ∑ l
k=1 kk
2
. Stop.
Bukti. Kita mulai dari kenyataan bahwa nilai entri (1,1) dari matrik A adalah a11 = (l11)2 sehingga:
l 11= √a 11 (5.a)
Karena nilai l11 ini telah dihaitung, maka kita dapat menghitung elemen-elemen l12 , l13, …, l1n; dari
kenyataan bahwa nilai a12 , a13, …, a1n diketahui, yaitu a1j =lj1.l11, sehingga:
a ij
l j 1=
l11 , untuk j = 2, 3, …, n (5.b)
Untuk j = 2, 3, …, n
a ij
l j 1=
Hitung l11
Langkah berikutnya kita akan menghitung elemen-elemen dari setiap kolom matrik A. Perhitungan-
perhitungan ini kemudian kita simpulkan dalam Step 2. Untuk mempermudah analisis, kita akan
menghitung elemen-elemen kolom satu persatu dimulai dari kolom kedua dan seterusnya hingga
kolom ke- (n – 1). Untuk setiap kolomnya kita akan memformulasikan sub step tersendiri, sehingga
untuk mendapatkan Step 2, kita harus mulai dari Step 2.1 yang digunakan untuk menghitung elemen-
elemen kolom kedua, Step 2.2 untuk menghitung elemen-elemen kolom ketiga dan seterusnya hingga
Step 2.(n – 2).
Pertama sekali kita akan menghitung elemen-elemen kolom kedua dari matrik L. Ini berarti kita akan
mengambil j = 2. Mula-mula kita akan menghitung l22. Hasil perkalian antara baris kedua dari matrik
L dengan kolom kedua matrik LT, akan menghasilkan:
2 2
l 21 +l 22 =a22
(5.c.1)
Sehingga
2
l 22= a22−l √ 21 (5.c.2)
Untuk menghitung l32, kita akan menggunakan hasil perkalian dari baris kedua matrik L dengan
kolom ketiga dari matrik LT, dan akan memberikan:
l 21 l 31+l 22 l32 =a23 (5.c.3)
Sehingga
( a23−l 21 l31 )
l 32 =
l22
Untuk menghitung l42, kita akan menggunakan hasil perkalian dari baris kedua matrik L dengan
kolom keempat dari matrik LT, dan akan memberikan:
Sehingga
Untuk menghitung l52, kita akan menggunakan hasil perkalian dari baris kedua matrik L dengan
kolom kelima dari matrik LT, dan akan memberikan:
Sehingga
( a25−l 21 l51 )
l 52 =
l22 (5.c.7)
Bila kita meneruskan proses perhitungan ini kita akan menemukan bahwa untuk i = 3, 4, …, n
berlaku:
( a2 j −l 21 l j1 )
li 2 =
l 22 (5.c.8)
Dengan demikian untuk j = 2, berdasarkan persamaan (5.c.1) dan (5.c.8), dapat disusun step 2.1
sebagai berikut
Untuk i = 3, 4, …, n
( a2 j −l21 l j1 )
li 2 =
Hitung l 22
Berikutnya kita akan menghitung elemen-elemen kolom ketiga dari matrik L. Ini berarti kita akan
mengambil j = 3. Mula-mula kita akan menghitung l33. Hasil perkalian antara baris ketiga dari matrik
L dengan kolom ketiga matrik LT, akan menghasilkan:
2 2 2
l +l +l =a 33
21 22 33 (5.d.1)
Sehingga
l 33= a33−(l 2 +l
√ 2)
11 22 (5.d.2)
Untuk menghitung l43, kita akan menggunakan hasil perkalian dari baris ketiga matrik L dengan
kolom keempat dari matrik LT, dan akan memberikan:
Sehingga
( a 34−( l 31 l 41+l 32 l 42 ))
l 43=
l 33 (5.d.4)
Untuk menghitung l53, kita akan menggunakan hasil perkalian dari baris ketiga matrik L dengan
kolom kelima dari matrik LT, dan akan memberikan:
Sehingga
( a35−( l 31 l 51+l 32 l 52 ) )
l 53=
l 33 (5.d.6)
Untuk menghitung l63, kita akan menggunakan hasil perkalian dari baris kedua matrik L dengan
kolom kelima dari matrik LT, dan akan memberikan:
Sehingga
( a36 −( l 31 l 61+ l 32 l 62 ) )
l 63=
l 33 (5.d.8)
Bila kita meneruskan proses perhitungan ini kita akan menemukan bahwa untuk i = 3, 4, …, n
berlaku:
Dengan demikian untuk j = 2, berdasarkan persamaan (5.d.1) dan (5.d.9), dapat disusun step 2.2
sebagai berikut
Berikutnya kita akan menghitung elemen-elemen kolom ketiga dari matrik L. Ini berarti kita akan
mengambil j = 3. Mula-mula kita akan menghitung l33. Hasil perkalian antara baris ketiga dari matrik
L dengan kolom ketiga matrik LT, akan menghasilkan:
2 2 2 2
l 11 +l 22 + l 33 +l 44 =a 44
(5.e.1)
Sehingga
2 2 2
l 44= a 44−(l +l + l )
√ 11 22 33 (5.e.2)
Untuk menghitung l54, akan digunakan hasil perkalian dari baris keempat matrik L dengan kolom
kelima dari matrik LT, dan akan memberikan:
Sehingga
Untuk menghitung l64, kita akan menggunakan hasil perkalian dari baris keempat matrik L dengan
kolom keenam dari matrik LT, dan akan memberikan:
l 41 l 61 +l 42 l 62 +l 43 l 63 +l 44 l 64=a46 (5.e.5)
Sehingga
Untuk menghitung l74, kita akan menggunakan hasil perkalian dari baris keempat matrik L dengan
kolom ketujuh dari matrik LT, dan akan memberikan:
Sehingga
( a4 i−( l 41 li 1 + l 42 l i2 +l 43 l i 3 ) )
l i4 =
l 44 (5.e.9)
Dengan demikian untuk j = 4, berdasarkan persamaan (5.d.1) dan (5.d.9), dapat disusun step 2.3
sebagai berikut
Untuk i = 5, 6, …, n
( a4 i−( l 41 li 1 + l 42 l i2 +l 43 l i 3 ) )
l i4 =
Hitung l 44
Dari proses untuk mendapatkan step 2.1 dan step 2.2, kita dapat melanjutkannya sehingga diperoleh
step 2.(n-2), yaitu
Untuk i = n
Berdasarkan step 2.1, step 2.2, …, step 2.(n-1), kita dapat menyusun step 2 yang lebih umum, yaitu:
j−1
Hitung
√
l jj = a jj−∑ l
k=1
2
kk
l ij=
( a ji− ∑ l jk l ik
k =1
)
Hitung l jj
Paling akhir kita akan menghitung lnn, yaitu dengan cara memperkalikan baris ke-n dari matrik L
dengan baris ke-n matrik LTsehingga diperoleh:
n
ann =∑ l 2
kk
k=1 (5.f.1)
Atau
n−1
√
l nn= ann−∑ l
i=1
2
ii
(5.f.2)
Step 3 Untuk j = n
j−1
Hitung
√
l jj = a jj−∑ l
k=1
2
kk
Bila kita menggabungkan step 1, step 2 dan step 3, maka dihasilkan algoritma yang dimaksud.
a1 c 1
( )
b 2 a2 c 2 0
. . .
. . .
0 b n−1 . a n−1 cn−1
bn an
A= (6)
Untuk menghitung elemen-elemen dari matrik tridiagonal, maka digunakan metoda Thomas.
Metoda ini tidak lain adalah metoda dekomposisi Crout yang diterapkan untuk matrik tridiagonal,
yaitu mendekomposisi matrik A menjadi dua matrik:
1 α1 c1
( ) ( )
β2 1 0 α 2 c2 0
. . . .
. . . .
0 βn−1 . 1 0 . c n−1
βn 1 an
L= dan U = (7)
Dengan demikian:
a1 c 1 1 α1 c1
( )( )( )
b 2 a2 c 2 0 β2 1 0 α 2 c2 0
. . . . . .
. . . . . .
0 b n−1 . c n−1 0 βn−1 . 1 0 . c n−1
bn an βn 1 an
= (8)
Sekarang, berdasarkan persamaan yang terakhir ini kita dapat menyusun Algoritma untuk menghitung
entri-entri dari matrik Ldan U. Pertama sekali kita akan mulai menghitung 1, yaitu dengan cara
memperkalikan baris pertama dari matrik L dengan kolom pertama dari matrik U, sehingga
dihasilkan:
1 = a1 (8.a.1)
Dengan memperkalikan baris kedua dari matrik L dengan kolom pertama matrik U, akan
memberikan:
21 = b2 (8.a.2)
Karena yang mau dihitung adalah 2, maka kita akan memperoleh
b2
β 2=
α1 (8.a.3)
Selanjutnya dengan memperkalikan baris kedua dari matrik L dengan kolom kedua matrik U, akan
memberikan:
2c1 + 2 = a2 (8.a.4)
Sehingga kita dapat menghitung
2 = a2 - 2c1 (8.a.5)
Berikutnya kita akan menghitung 3 dengan cara memperkalikan baris ketiga dari matrik L dengan
kolom kedua dari matrik U dan diperoleh
b3
β 3=
α2 (8.a.6)
Selanjutnya dengan memperkalikan baris ketiga dari matrik L dengan kolom tiga matrik U, akan
memberikan:
3c2 + 3 = a3 (8.a.7)
3 = a3 - 3c2 (8.a.8)
Berikutnya kita akan menghitung 4 dengan cara memperkalikan baris keempat dari matrik L dengan
kolom ketiga dari matrik U dan diperoleh
b4
β 4=
α3 (8.a.9)
Selanjutnya dengan memperkalikan baris keempat dari matrik L dengan kolom keempat dari matrik
U, akan memberikan:
4c3 + 4 = a4 (8.a.10)
4 = a4 - 4c3 (8.a.11)
Selanjutnya dari bentuk-bentuk yang diberikan dalam persamaan-perasamaan (8.a.3), (8.a.6) dan
(8.a.9) kita dapat menyimpulkan secara umum bahwa kita akan dapat menghitung i dengan cara
memperkalikan baris ke-i dari matrik L dengan kolom ke-i-1 dari matrik U. Dan dengan demikian
diperoleh
bi
β i=
α i −1 ; untuk i = 2, 3, …, n-1 (8.a.12)
Sedangkan dari persamaan-persamaan (8.a.5), (8.a.8) dan (8.a.11), secara umum kita dapat
menyimpulkan bahwa dengan memperkalikan baris ke-I dari matrik L dengan baris ke-I dari matrik
U, kita akan memperoleh (setelah penyusunan kembali)
Karena dalam persamaan-persamaan (8.a.12) dan (8.a.13) kita menghitung i dan i untuk nilai-nilai
dari 1 hingga n – 1, maka untuk itu kita perlu menghitung lagi n dan n dengan persamaan-
persamaan:
bn
β n=
α n−1 (8.a.14)
dan
n = an - ncn-1 (8.a.15)
Dari persamaan-persamaan (8.a.1), (8.a.12), (8.a.13), (8.a.14) dan (8.a.15) kita dapat menyimpulkan
bahwa algoritma untuk menghitung elemen-elemen dari matrik L dan U dari hasil dekomposisi
terhadap matrik tridiagonal A adalah sebagai berikut.
Step 1. Set 1 = a1
bi
β i=
Hitung α i −1
Hitung i = ai - ici-1
bn
β n=
Step 3. Hitung α n−1 ; Hitung = a - c . Stop.
n n n n-1
Ketika kita mempunyai suatu system persamaan linear yang melibatkan matriks tridiagonal, maka
misalkan system persamaan linear yang hendak diselesaikan adalah
Ax = d
A = LU
LUx = d
Ux = y
Ly = d
Berangkat dari kenyataan ini kita kemdian menghitung nilai dari vektor y dari persamaan terakhir
dan kemudian kita menyelesaikan persamaan sebelumnya, yaitu Ux = y untuk mendapatkan vektor
jawaban yang kita cari.
Sekarang kita akan menyusun algritma untuk menghitung akar system persamaan dengan matriksnya
adalah matriks tridiagonal. Mula-mula kita ambil Ly= d
1 y1 d1
( )( ) ( )
β2 1 0 y2 d2
. . y 3 = d3
. . . .
0 βn−1 . 1 . .
βn 1 yn d
Dari persamaan terakhir ini, kita akan menyusun subalgoritma untuk menghitung vektor y. Pertama-
tama,
y1 = d1
kemudian persamaan kedua yang dapat kita selesaikan untuk mendapatkan y2 adalah:
β2y1 + y2 = d2
y2 = d2 - β2y1
kemudian persamaan ketiga yang dapat kita selesaikan untuk mendapatkan y3 adalah:
β3y2 + y3 = d3
y3 = d3 - β3y2
kemudian persamaan keempat yang dapat kita selesaikan untuk mendapatkan y4 adalah:
β4y3 + y4 = d4
y4 = d4 - β4y3
Dari kenyataan ini, dapat disimpulkan bahwa kita dapat menghitung untuk setiap yi untuk i = 2, 3, ...,n
dapat digunakan persamaan
yi = di - βiyi-1
Step 1. y1 = d1
Step 2. Untuk i = 1, 2, …, n
Hitung yi = di - βiyi-1
Langkah terakhir untuk mendapatkan vektor jawaban x adalah dengan menyelesaikan system
persamaan Ux = y, yaitu
α 1 c1 x1 y1
( )( ) ( )
α 2 c2 0 x2 y2
. . x3 = y3
. . . .
0 . c n−1 . .
an xn yn
Dari baris terakhir matriks ini kita dapatkan anxn = yn, sehingga kita dapat menuliskan
xn = yn/αn
Baris kedua dari bawah memberikan αn-1xn-1 + cnxn = yn-1, sehingga kita dapat menuliskan
Baris ketiga dari bawah memberikan αn-2xn-2 + cn-1 xn-1 = yn-2, sehingga kita dapat menuliskan
Baris keempat dari bawah memberikan αn-3xn-3 + cn-2 xn-2 = yn-3, sehingga kita dapat menuliskan
Dengan demikian kita dapat menyimpulkan bahwa untuk setiap I = n -1, n – 2, …, 3, 2, 1 kita dalat
menghitung
Dari uraian di atas kita dapat menuliskan sub-algoritman untuk menghitung vektor x dari persmaan
LU = x, sebagai berikut.
Step 3. xn = yn/αn
Step 4. Untuk i = n - 1, n - 2, …, 3, 2, 1
Sekarang kita dapat menggabungkan algoritma untuk menghitung nilai elemen dari matriks L dan U
dengan dua sub-algoritma terakhir menjadi suatu algoritma lengkap untuk menghitung vektor jawaban
x dari system persamaan linear Ax =d yang melibatkan dengan A adalah matriks tridiagonal, yaitu
Algoritma Thomas seperti yang disajikan berikut ini
Step 1. Set 1 = a1
bi
β i=
Hitung α i−1
Hitung i = ai - ici-1
bn
β n=
Step 3. Hitung α n−1 ; Hitung = a - c . Lanjut ke Step 4.
n n n n-1
Step 4. y1 = d1
Step 5. Untuk i = 1, 2, …, n
Hitung yi = di - βiyi-1
Step 6. xn = yn/αn
Step 7. Untuk i = n - 1, n - 2, …, 3, 2, 1
Fungsi script untuk program Matlab dari algoritma ini adalah thomas.m yang kodenya disajikan
berikut ini.
Kita mulai dengan konsep scalar kompleks dan matriks kompleks. Kemudian dilanjutkan dengan hasil
kali dalam dan terakhir adalah ketegaklurusan himpunan vektor. Ketika kita membicarakan
ketegaklurusan himpunan vektor, maka kita kemudian dapat merumuskan Algoritma Gram-Schmidt
dan sebagai konsekwensinya kita dapat merumuskan algoritma QR.
Konjugat kompleks
Suatu konyugat kompleks dari scalar z = a + bi, (a dan b adalah bilangan-bilangan real) diberi
berlambang z̄ adalah z̄=a−ib. Dan konyugat kompleks dari suatu matriks A adalah matriks
Ā yang elemen-elemennya adalah konyugat kompleks dari elemen-elemen matriks A. Sifat-sifat
berikut berlaku untuk scalar-skalar x dan y, demikian juga dengan matriks-matriks A dan B.
S2. x real jika dan hanya jika x̄=x; dan A adalah matriks real jika dan hanya jika Ā= A .
S3. x+ x̄ adalah suatu scalar real; dan A + Ā adalah suatu matriks real jika dan hanya jika
Ā= A .
Katakanlah bahwa Z adalah suatu matriks nonsingular yang berukuran n × n. Hasil kali dalam dari
vektor-vektor kolom x dan y yang masing-masing berdimensi n terhadap matriks Z didefinisikan
sebagai
Jika Z = I, maka tikalas (subscript) di persamaan (1) dihilangkan sehingga kita dapat menuliskan
Ini disebut sebagai hasil kali dalam Euclid (Euclidean inner product). Jika x dan y adalah vektor-
vektor yang real maka hasil kali dalam Euclid menjadi hanya meruakan dot produk dari dua vektor x
dan y.
Ortogonalitas.
Dua vektor yang berukuran sama dikatakan orthogonal bila hasil kali dalamnya memberikan hasil nol.
Karena matriks-matriks Z yang berbeda dalam persamaan (1) akan menghasilkan hasil kali dalam
yang berbeda. Dua vektor dapat saja orthogonal di bawah hasil kali dalam yang satu tetapi tidak di
bawah yang lain. Ortogonalitas akan direduksi menjadi hanya suatu ketegaklurusan secara geometric
di bawah hasil kali dalam Euclid bila kedua vekor tersebut real dan berada dalam ruang dua atau tiga
dimensi.
Suatu himpunan vektor dikatakan orthogonal jika setiap vektor di dalamya saling tegak lurus satu
sama lainnya. Vektor-vektor yang demikian ini dikatakan bebas linear apabila semua vektor-vektor ini
adalah vektor-vektor yang tidak nol.
Suatu himpunan vektor dikatakan ortonormal apabila himpunan vektor itu adalah himpunan vektor-
vektor orthogonal dengan panjang dari setiap vektor adalah satu.
Orthogonalisasi Gram-Schmidt
Setiap himpunan vektor-vektor {u1, u2, …, un} yang bebas linear dan berhingga mempunyai himpunan
vektor-vektor orthogonal tidak nol yang yang terkait {q1, q2, …, qn} yang di dasarkan pada suatu hasil
kali dalam tertentu sedemikian sehingga qi untuk i = 1, 2, …, n, merupakan suatu kombinasi dengan
vektor-vektor u1, u2, …, un-1.
Berikut ini merupakan algoritma yang digunakan utntuk menghasilkan himpunan vektor orthonormal
dan algoritma ini disebut sebagai proses Gram-Schmidt.
1
q1 = u
Step 1. Hitung √ ⟨u1 ,u1 ⟩ 1 Set i = 1, lanjutkan ke Step 2.
i−1
v i =ui −∑ ⟨ ui , q j ⟩ q j
Step 2. Hitung j=1
1
qi = v
Step 3. Hitung √⟨ vi , v i ⟩ i ; OUTPUT(qi)
Step 4. Apakah i = n?
Jika tidak, naikkan counter satu point , yaitu I = I + 1 dan kembali ke Step 2.
Dan Algoritma ini kita dapat menuliskan suatu script Matlab yang diberi nama gramschmidt.m seperti
yang tertuang dalam kode script berikut ini.
Algoritma QR.
Proses orthogonalisasi Gram-Schmidt seperti yang diberikan di atas bisa menghasilkan ketidak-
tepatan. Hal ini terjadi dikarenakan adanya galat karena pembulatan karena perhitungan matematik
yang melibatkan digit dibelakang koma yang terbatas. Untuk itu perlu dilakukan modifikasi agar
algoritma yang dihasilkan dapat lebih stabil dan menghasilkan vektor yang sama dengan tidak
melibatkan galat karena pembulatan. Modifikasi ini juga mentransformasikan suatu himunan vektor-
vektor yang bebas linear {u1, u2, …, un} dalam himpunan vektor orthonormal {q1, q2, …, qn}
sedemikan sehingga vektor qi untuk i = 1, 2, …, n, merupakan suatu kombinasi dengan vektor-vektor
u1, u2, …, un-1. Proses yang telah dimodifikasi ini, melibatkan iterasi seperti yang diperlihatkan dalam
Algoritma berikut ini.
Algoritma
Jika tidak, naikkan counter k satu point, yaitu k = k + 1 dan kembali ke Step 2.
Dekomposisi QR
Salah satu teknik dekomposisi yang terkenal adalah dekomposisi QR dan dekomposisi ini diperoleh
dari hasil modifikasi proses Gram-Schmidt.
Untuk setiap matriks A berukuran m × n dimana m ≥ n, dapat difaktorkan menjadi suatu produk dari
matriks Q, yang kolomnya membentuk suatu vektor orthonormal dan matriks R merupakan suatu
matriks segitiga atas. Dengan demikian dekomposisi ini dapat ditulis sebagai
A = QR (3)
Jika A adalah matriks suatu bujur sangkar maka matriks Q adalah matriks adalah matriks yang
unitary.
Dekomposis ini dapat disusun langsung dari proses ortogonalisasi Gram-Schmidt yang telah
dimodifikasi dengan menyusun vektor ui merupakan kolom ke-I dari martriks A dan kolom-kolom ini
dipastikan sebagai himpunan vektor yang bebas secara linear hasil orthonormalisasi merupakan
merupakan himpunan kolom dari matriks Q atau matriks Q itu sendiri.
Jika kolom-kolom dari A bergantung linear, maka salah satu dari harga rkk yang dihitung akan
berharga nol. Dengan demikian Step 1 dalam algoritma Gram-Schmidt yang telah dimodifikasi.
Dalam prakteknya jarang sekali kita temui nilai rkk yang nol. Sekalipun kolom-kolom dari A
bergantung linear maka pembulatan
Dengan memodifikasi proses Gram-Scmidt, kita akan dapat menulis Algoritma QR sebagai berikut:
Algoritma
Step 0. a. Set I = 1;
Step 0. b. Set j = 1;
Step 0. c. Set ui = aij
Step 0. d. Apakah j = n?
Jika tidak, naikkan counter j satu point, yaitu j = j + 1 dan kembali ke Step 0.c.
Jika ya, lanjutkan ke Step 0.e.
Step 0. e. Apakah j = m?
Jika tidak, naikkan counter j satu point, yaitu j = j + 1 dan kembali ke Step 0.b.
Jika ya, lanjutkan ke Step 1.
1
q1 = u
Step 1. Hitung
r =√⟨u ,u ⟩
11 1 1 Hitung juga r 11 1 ; OUTPUT(r );
11
Set k = 2 dan lanjutkan ke Step 2.
Step 2. Hitung 1 k
r = √⟨u ,u ⟩
k 1
Step 3. Apakah k = n? OUTPUT(r1k);
Jika tidak, naikkan counter k satu point, yaitu k = k + 1 dan kembali ke Step 2.
Jika ya, Set i = 1, lanjutkan ke Step 4.
i−1
v i =ui −∑ ⟨ ui , q j ⟩ q j
Step 4. Hitung j=1
1
qi = v
Step 3. Hitung
r = √⟨v , v ⟩
ii i i ; Hitung juga r ii i ; OUTPUT(r , q ).
ii i
Set k = i + 1 dan lanjutkan ke Step 5.
Step 5.
r =√ ⟨u ,u ⟩
ik k 1 ; OUTPUT(rik);
Step 6. Apakah k = n?
Jika tidak, naikkan counter k satu point, yaitu k = k + 1 dan kembali ke Step 5.
Jika ya, lanjutkan ke Step 7.
Step 7. Apakah i = n?
Jika tidak, naikkan counter satu point , yaitu I = I + 1 dan kembali ke Step 4.
Jika Ya. Komputasi berhasil. STOP
Dengan Algoritma yang telah disusun di atas, kita dapat menyusun suatu script Matlab naiveqr.m
seperti yang terlihat dalam penggalan program berikut ini.
Persamaan-persamaan Differensial
Biasa dengan Nilai Awal
Persamaan differensial biasa atau system persamaan differensial biasa banyak sekali dijumpai dalam
penerapan bidang sain dan rekayasa. Dalam mekanika kita menemukan bahwa kita dapat membentuk
persamaan-persamaan diferensial biasa. Sebagai contoh, kita dapat menurunkan persamaan berikut
berdasarkan hukum Newton kedua untuk menghitung gerakkan parasut ketika diturunkan dari
pesawat tempur atau pesawat latih, sebagai berikut
dv c
=g− v
dt m
di mana g adalah percepatan gravitasi, m adalah massa dari parasut dan penerjun, dan c adalah
koefisien drag.
Persamaan-persamaan differensial biasa dibentuk oleh suatu fungsi yang tidak diketahui dan turunan-
turunannya. Persamaan-persamaan differensial seperti ini biasanya menyatakan dinamika dan
biasanya disebut sebagai persamaan suku-suku menyatakan laju dan untuk persamaan di atas disebut
sebagai persamaan laju.
Persamaan-persamaan differensial memainkan peranan fundamental dalam rekayasa dan sains karena
banyak fenomena fisik dan fenomena physic-chemical dengan sangat baik diformulasi secara
matematika dalam suku-suku yang terkait dengan laju perubahannya.
Dinamika aras (level) cairan dalam tangi atau reaktor kimia dapat dinyatakan oleh persamaan
differensial berikut ini
dh
A =Fin −β √h
dt
Suatu control valve pneumatic yang digunakan industri proses dapat dimodelkan sebagai persamaan
differensial biasa yang berorde ke-dua, yaitu
2
dx d x
pA−Kx−C = M 2
dt dt
Di mana p adalah tekanan yang disebabkan oleh udara tekan yang menggerakan katup ke bawah
untuk menutup atau ke atas untuk membuka, A adalah luas diaphragm K adalah konstanta pegas, C
adalah dan x jarak yang ditempuh oleh katup (ke arah bawah atau ke atas). Sedangkan M adalah
massa system torak katup. Setelah disusun kembali maka diperoleh
2
M d x C dx A
+ + x= p
K dt 2 K dt K
Contoh lain yang ditemukan dalam industry proses adalah reactor kimia. Suatu reaktor kimia CSTR
(continuous stirred tank reactor) yang dilengkapi jacket pendingin, di dalamnya terjadi reaksi
eksotermik A Produk dimana reaksi yang terjadi adalah reaksi orde pertama terhadap reaktan A
dan konstanta reaksi mengikuti Hukum Arhenius. Karena reaksi eksotermik maka perlu dialirkan air
pendingin melalui jacket untuk menjaga temperatur reactor. Dengan neraca massa dan energi, dan
beberapa assumsi yang diambil, kita dapat menurunkan satu set persamaan-persamaan diferensial
orde pertama (sistem dengan tiga persamaan diferensial orde pertama) yang diberikan oleh persamaan
berikut ini.
dh
A =Fi −β √ h
dt
E
dC A F i −
a
= (C A −C A )−k 0 e RT C A
dt V i
Ea
dT Fi − Q
= ( T i−T ) +Ψk 0 e RT C A −
dt V ρ Vc p
Untuk menyelesaikan persamaan (1) secara numeric, maka interval penyelesaiannya dibagi menjadi N
sub interval dengan panjang langkah adalah
b−a
h=
N (2)
Ada banyak metoda yang dikembangkan untuk menyelesaikan problema ini dan yang paling
sederhana adalah metoda Euler dan pada pengembangannya diperoleh Metoda Euler yang
dimodifikasi. Selain itu juga ada metoda Runge-Kutta dan metoda-metoda lain. Metoda Euler dan
variannya serta metoda-metoda Runge-Kutta termasuk ke dalam metoda langkah tunggal, sedangkan
metoda-metoda lain seperti metoda-metoda Heun, Adam-Bashfort, Adam-Moulton dan Milne. Di
bagian akhir dari Bab ini akan dibahas system persamaan diferensial dengan nilai awal dan persamaan
differensial berorde tinggi dengan nilai awal. Kita akan memulai dengan Metoda penyelesaian
langkah tunggal.
Metoda Euler
Ini merupakan metoda langkah tunggal yang paling sederhana. Metoda ini mengambil nama Euler,
seorang ahli matematika dan Fisika dari Jerman. Dalam bagian ini akan dibahas mengenai metoda
Euler (naïve) dan metoda Euler yang dimodifikasi.
Metoda Euler (Naive) Metoda ini adalah metoda yang paling sederhana, yaitu menghitung nilai y
pada langkah berikutnya berdasarkan nilai y sebelumnya yang telah diketahui (atau telah dihitung)
dan nilai tangent dari titik t yang sebelumnya. Perhatikan Gambar 1. Dalam gambar ini perhitungan
dimulai dari ti yang nilai yi telah diketahui dan dengan demikian kita dapat menghitung yi+1.
f(t,y)
y(ti) y(ti+1)
ti ti+1
Persamaan (4) ini adalah persamaan yang berperan dalam algoritma Euler dan algoritma ini diberikan
sebagai Algoritma 1.
Metoda Euler yang diperpaiki (Metoda Heun) Metoda ini melibatkan penentuan dua turunan pada
interval. Yang pertama pada ujung awal interval dan yang kedua pada ujung akhir interval. Kedua
turunan ini kemdian dirata-ratakan untuk memperoleh perkiraan dari slope yang diperbaiki bagi
seluruh interval. Slope pada awal interval, yaitu di t = ti adalah
y , =f (t i , y i )
i (5)
Nilai yang diperoleh dari persamaan (5) kemudian digunakan untuk mengekstrapolasi secara linear ke
ti+1, yaitu
0
y i +1 = y i + f ( t i , y i )
(6)
Untuk bentuk naive dari Metoda Euler akan berhenti sampai disini saja. Metoda Heun yang
dinyatakan oleh persamaan (6) bukanlah jawaban akhir tetapi sebagai persamaan antara yang
digunakan untuk memprediksi dan disebut sebagai predictor yang menyediakan estimasi dari yi+1,
yang kemudian dengan persamaan ini dihitung suatu nilai perkiraan slope pada akhir interval, yaitu
, 0
y i+1 =f (t i+1 , y i+1 )
(7)
Dengan demikian dua slope yang dihitung dengan persamaan (5) dan (7) dirata-ratakan untuk
menghasilkan slope rata-rata untuk interval, yaitu
y ,+ y , 0
f ( t i , y i ) + f ( t i +1 , y i+1 )
i i+ 1
=
2 2 (8)
Slope rata-rata ini yang kemudian digunakan sebagai slope untuk menggantikan slope pada metoda
Euler standard, sehingga diperoleh
f ( t i , y i ) + f (t i+1 , y 0i+1 )
y i +1 = y i +h [ 2 (9)
]
Persamaan ini disebut persamaan corrector.
Metoda Heun ini disebut sebagai metoda predictor-corrector. Semua metoda langkah ganda yang akan
dibicarakan kemudian adalah dari jenis ini. Urutan komputasi adalah p c p c…, di mana p adalah
predictor sedangkan c adalah korektor. Berdasarkan persamaan-persamaan (5), (6), (7) dan (9), kita
dapat menyusun Algoritma Heun yang diberikan sebagai Algoritman 2.
Algoritma 2. (Heun)
Step 1 a. masukkan nilai awal y(a)=
b. tentukan interval penyelesaian t0 = a dan tn = b
c. tentukan jumlah sub interval N
t −t b−a
h= n 0 =
hitung N N
Metoda Euler yang diperbaiki (Metoda polygon yang diperbaiki) Metoda ini mempergunakan
metoda Euler untuk memprediksi y di tengah-tengah interval, yaitu
h
y i+1/2 = y i + f (t i , y i )
2 (10)
Nilai ini diprediksi ini kemudian digunakan untuk memperkirakan kemiringan garis pada titik tengah
interval, yaitu
,
y i+1/2 =f (t i +1/ 2 , y i+1 /2 )
(11)
Nilai ini dianggap sebagai representasi yang valid bagi rata-rata kemiringan dari interval secara
keseluruhan dan digunakan mengestrapolasi secara linear dari ti ke ti+1 dengan menggunakan metoda
Euler, yaitu
y i+1 = y i +hf (t i+1/2 , y i+1/2 ) untuk i=1,2 ,...,N (12)
Berdasarkan persamaan-persamaan (10), (11), dan (12) disusunlah Algoritma 3 seperti yang
ditunjukkan berikut ini.
Algoritma 3. (Metoda Polygon yang diperbaiki)
Step 1 a. masukkan nilai awal y(a)=
b. tentukan interval penyelesaian t0 = a dan tn = b
c. tentukan jumlah sub interval N
t n −t 0 b−a
h= =
hitung N N
METODA RUNGE-KUTTA
Deret Taylor digunakan untuk menghampiri nilai dari suatu fungsi sebagai fungsi polinom. Metoda-
metoda Runge-Kutta menggunakan kesalahan pemendekan local orde-orde tinggi dari deret Taylor
ketika mengeleminasi komputasi dan mengevaluasi turunan-turunan dari f(t,y). Untuk itu kita perlu
menelusuri kembali Teorema Taylor untuk dua variabel.
Teorema 1. Katakanlah bahwa f(t,y) dan semua turunan parsialnya yang lebih kecil atau sama dengan
n + 1 kontinu dalam D = {(t,y)|a ≤ t ≤ b, c ≤ y ≤ d}. Dan juga bahwa (t0, y0) ∈ D. Untuk setiap (t,y)
∈ D, ada suatu ξ antara t dan t0 dan η antara y dan y0 dengan
di mana
∂f ∂f
[
Pn ( t , y )=f ( t 0 , y 0 ) + ( t−t 0 )
∂t
( t , t 0 ) + ( y− y 0 ) ∂ y ( t ,t 0 ) ]
2 2
( t−t0 ) ∂2 f ( y − y 0 ) ∂2 f
+
[ 2 ∂ t2
n n
∂2 f
( t , t 0 ) + ( t −t 0 )( y − y 0 ) ∂ t ∂ y ( t , t0 ) + 2
∂ y2
(t , t 0) ]
+.. .+
1
n! [ ∑ ( nk ) ( t−t 0) n−k ( y− y 0 )k ∂∂t fn−k ∂ y k ( t , t0 )
k=0
] (14)
dan
n n+1
1 n+1 t−t n+1−k y− y k ∂ f ( ξ , η )
Rn ( t , y ) = ∑ ( )
( n+1 ) ! k =0 k
( 0) ( 0)
∂t n+1−k ∂ y k (15)
Pn(t,y) disebut sebagai polinom Taylor berderajat n dalam dua variabel untuk fungsi f di sekitar (t0,y0).
Sedangkan Rn(t,y) merupakan sisa yang terkait dengan Pn(t,y)
Dengan Teorema ini kemudian kita dapat menurunkan metoda-metoda yang terkait dengan metoda
Runge-Kutta. Metoda ini mempunyai bentuk yang mirip dengan bentuk looping dari metoda Euler,
yaitu
yi+1 = yi + φ(ti, yi, h) (16)
di mana φ(ti, yi, h) disebut fungsi kenaikan—‘increment function’ yang dapat diinterpretasikan sebagai
slope yang representatif untuk interval yang terkait. Fungsi ini dapat ditulis dalam bentuk umum.
Dari persamaan-persamaan (17) dan (18) serta deret Taylor yang diberikan dalam Teorema 1, metoda-
metoda Runge-Kutta dapat diturunkan.
Metoda Runge-Kutta Orde ke-2. Berdasarkan persamaan (17), kita dapat menulis persamaan
berikut untuk Metoda Runge-Kutta orde ke-2,
untuk dapat menggunakan persamaan (19), kita perlu menentukan harga-harga dari c1, c2, d1, dan p11.
Agar kita dapat menentukan besaran-besaran ini, kita menggukan deret Taylor yang diberikan dalam
Teorema 1untuk yi+1 dalam suku-suku yi dan f(ti, yi), yaitu
h2
y i+1 = y i + f ( t i , y i ) h+ f ' ( t i , y i )
2 (22)
Dimana f’(ti, yi) harus ditentukan dengan menggunakan aturan rantai, yaitu
∂ f ∂ f dy
f ' ( ti , y i ) = +
∂ t ∂ y dt (23)
Sekarang masukan persamaan ke dalam persamaan (22) akan memberikan
2
∂f ∂ f dy h
y i+1 = y i +f ( t i , y i ) h+ [ +
∂t ∂ y dt 2 ]
(24)
Strategi yang melatarbelakangi metoda-metoda Runge-Kutta adalah penggunaan manipulasi algebraic
untuk memperoleh nilai-nilai c1, c2, d1, dan p11 yang menyebabkan persamaan (19) dan persamaan
(24) ekivalen. Agar dapat melakukan hal ini, kita menggunakan deret Taylor untuk dua variabel
seperti yang diberikan dalam Teorema 1 dalam bentuk sebagai berikut
∂ G ∂G
G ( t +q , y +r ) =G ( t , y )+q +r +.. .
∂t ∂y (25)
Kita akan menggunakan persamaan ini untuk memperluas (ekspansi) persamaan (21) dan ini akan
memberikan
∂f ∂f
f ( t +d 1 h , y+ p11 k 1 h )=f ( t i , y i ) +d 1 + p11 k 1 h +O ( h2 )
∂t ∂y
(26)
Hasil yang diberikan oleh persamaan (26) ini kemudian bersama-sama dengan persamaan (20)
dimasukkan ke dalam persamaan (19) akan memberikan
∂f ∂f
y i+1 = y i +c1 f ( t i , y i ) h+c 2 f ( t i , yi ) h+c 2 d 1 h2 +c 2 p 11 h2 f ( t i , y i ) +O ( h3 )
∂t ∂y (27)
Sekarang, dengan mengumpulkan suku-suku yang sama kita akan memperoleh
∂f ∂f 2
[
y i+1 = y i + [ c1 f ( t i , y i ) +c 2 f ( t i , y i ) ] h+ c 2 d 1
∂t
+c 2 p11 f ( t i , y i )
(28)
]
∂y
h +O ( h3 )
Kemudian persamakan suku-suku yang mirip dalam persamaan (24) dan (25), kita menentukan agar
kedua persamaan ini ekivalen, maka hal-hal berikut ini harus berlaku:
c1 + c2 = 1 (29a)
c2d1 = ½ (29b)
c2p11 = ½ (29c)
Karena kita mempunyai tiga persamaan dengan empat variabel yang tidak diketahui, kita harus
mengambil assumsi Ketiga persamaan ini dapat diselesaikan secara simultan untuk memberikan
c1 = 1 - c2 (30)
1
d 1 =p 11=
2 c2 (31)
Karena kita dapat menentukan nilai c2 dan jumlahnya tidak hingga, maka kita akan mempunyai
jumlah metoda-metoda Runge-Kutta orde ke-dua yang tak hingga juga. Setiap versi haruslah
menghasilkan hasil yang sama persis untuk penyelesaian persamaan differensial entah itu quadratic,
linear atau konstan.
Dalam bagian ini kita akan mencatat beberapa versi dari metoda ini.
Pertama, Raltson (1962) mengambil c2 = 2/3 yang menjamin batas minimum pada kesalahan
pembulatan. Untuk versi Raltson ini, c1 = 1/3 dan d1 = p11 = ¾. Dengan demikian persamaan (19)-(21)
dapat ditulis kembali sebagai
Kedua,bila kita ambil c2 =1/2, maka persamaan (30) dan (31) dapat diselesaikan untuk memperoleh c1
= ½; dan d1 =p11 = 1, sehingga persamaan (19) – (21) dapat ditulis kembali sebagai
Secara konsekuen kita akan mengatakan bahwa persamaan (35) – (37) tidak lain adalah teknik yang
dianjurkan oleh Heun karena dalam hal ini, k1 adalah slope pada awal interval sedangkan k2 adalah
slope pada akhir interval.
Ketiga, bila kita ambil c2 =1, maka persamaan (30) dan (31) dapat diselesaikan untuk memperoleh c1
= 0; dan d1 =p11 = 1/2, sehingga persamaan (19) – (21) dapat ditulis kembali sebagai
yi+1 = yi + k2 (38)
di mana
k1 = hf(ti, yi) (39)
dan
k2 = hf(ti +1/2 h, yi + 1/2k1) (40)
Metoda Runge-Kutta Orde ke-3. Berdasarkan persamaan (17), dengan mengambil n = 3, kita dapat
menulis persamaan berikut untuk Metoda Runge-Kutta orde ke-3,
Dengan cara penurunan yang sama dengan yang telah dilakukan metoda Runge-Kutta orde ke-2,
maka untuk metoda Runge-Kutta orde ke-3 ini kita memperoleh c2 = 4/6 sedangkan c1 = c3 = 1/6.
Demikian juga dengan d1 = ½; d2 = 1; p11 = ½; p21 = -1 dan p22 = 2. Itu berarti persamaan (41) hingga
persamaan (44) dapat ditulis kembali sebagai
Metoda Runge-Kutta Orde ke-4. Berdasarkan persamaan (17), dengan mengambil n = 4, kita dapat
menulis persamaan-persamaan berikut untuk Metoda Runge-Kutta orde ke-4,
Dengan cara penurunan yang sama dengan yang telah dilakukan metoda Runge-Kutta orde ke-3,
maka untuk metoda Runge-Kutta orde ke-4 ini kita memperoleh c2 = c3 = 2/6 sedangkan c1 = c4 = 1/6.
Demikian juga dengan d1 = d2 = ½; d3 = 1; p11 = ½; p21 = 0 dan p22 = 1/2. p31 = p32 =0 dan p33 = 1.Itu
berarti persamaan (49) hingga persamaan (53) dapat ditulis kembali sebagai
Metoda Runge-Kutta ini dikenal sebagai metoda Runge-Kutta klasik.Algoritma untuk metoda Runge-
Kutta orde ke-4 klasik ini dapat dibuat berdasarkan persamaan (54) hingga (58) seperti yang
ditunjukkan oleh Algoritma 4 di bawah ini.
Metoda Runge-Kutta orde ke-4 lainnya adalah metoda Runge-Kutta Simpson. Metoda ini didasarkan
atas aturan integrasi 3/8 Simpson dan ditulis sebagai
Metoda Runge-Kutta Orde yang lebih tinggi. Berdasarkan persamaan (17), dengan mengambil n =
5, kita dapat menulis persamaan-persamaan umum berikut untuk Metoda Runge-Kutta orde ke-5,
Dengan cara penurunan yang sama dengan yang telah dilakukan metoda Runge-Kutta orde ke-4,
Butcher (1964) menurunkan metoda Runge-Kutta orde ke-5 ini dan ia memperoleh c2 = c5 = 32/90
sedangkan c1 = c6 = 7/90. Demikian juga dengan d1 = d2 = 1/4; d3 = 1/2; d4 = 3/4; d5 = 1;p11 = 1/4; p21 =
p22 =1/8; p31 = 1/2. p31 = 0; p32 = -1/2; p33 = 1; p41 = 1/4; p21 = p22 =1/8; p31 = 1/2. p31 = 0; p32 = -1/2; p33
= 1. Itu berarti persamaan (49) hingga persamaan (53) dapat ditulis kembali sebagai
Kita dapat menyusun Algoritma untuk metoda Runge-Kutta-Butcher seperti yang ditunjukkan oleh
Algoritma 5 berikut ini.
Sebagai tambahan bagi untuk koreksi kendali langkah, persamaan (72) dapat digunakan untuk
mengoreksi nilai y2. Untuk koreksi metoda Runge-Kutta orde ke-empat, koreksi yang digunakan
adalah
y2 y2 + Δ/15 (73)
Alasan yang dipakai untuk menjelaskan mengapa ukuran langkah yang dikendalikan diperlukan
adalah karena adanya estimasi galat. Dengan galat yang diperkirakan ini kemudian kita dapat
mengatur panjang langkah yang paling baik. Secara umum, strategi yang diambil adalah memperbesar
ukuran langkah jika galat yang diperoleh terlalu kecil dan ukuran langkah diperkecil bila galat yang
diperoleh besar. Koreksi yang digunakan untuk hal ini adalah
α
Δ
hbaru =h sekarang| baru |
Δsekarang (74)
yang diusulkan pertama kali pada tahun 1986 oleh Press dan kawan-kawannya. Δ sekarang adalah akurasi
sekarang seperti yang dihitung oleh persamaan (72). Δ baru adalah akurasi yang dikehendaki. Sedangkan
α adalah konstanta yang besarnya adalah 0.2 bila ukuran langkah diperbesar dan 0.25 bila ukuran
langkah diperkecil. Dalam persamaan (74), yang menjadi parameter kunci yang digunakan sebagai
wahana untuk menentukan akurasi adalah Δbaru. Salah satu cara untuk melakukan hal ini adalah
mengaitkan Δbaru dengan tingkat galat relative. Walaupun usaha ini akan bekerja dengan baik apabila
nilai positif yang terjadi, ia dapat menyebabkan solusi akan melalui nol. Untuk menangani
kekurangan ini, ada cara umum yang dipakai, yaitu dengan menentukan Δ baru sebagai
Δbaru = εys (75)
dimana ε adalah tingkat toleransi secara keseluruhan. Pilihan kita pada ys akan menentukan seberapa
besar galat ditentukan. Press (1986) juga menemukan bahwa untuk mendapatkan galat relative yang
tetap terkecuali yang dekat dengan titik nol adalah
dy
y s =|y|+|h |
dt (76)
Sekarang kita dapat menyusun Algoritma untuk metoda langkah yang adaptif, seperti yang
ditunjukkan dalam Algoritma 6.
Metoda Runge-Kutta Fehlberg. Diluar dari apa yang kita bicarakan di atas, ada suatu pendekatan
alternative untuk mendapatkan perkiraan galat yang melibatkan penghitungan prediksi dari dua
metoda Runge-Kutta dengan orde yang berbeda. Hasil yang diperoleh dapat diperkurangkan untuk
mendapatkan perkiraan dari galat pembulatan local. Kelemahan dari meningkatnya beban komputasi.
Sebagai contoh, prediksi yang dilakukan, ada sebanyak sepuluh kali evaluasi terhadap fungsi setiap
langkahnya. Metoda Runge-Kutta Fehlberg adalah metoda yang secara cerdas memangkas jumlah
evaluasi perlangkah. Dengan demikian pendekatan Fehlberg ini menghasilkan satu perkiraan terhadap
galat untuk ketimbang metoda lain yang bergantung kepada enam evaluasi fungsi setiap langkahnya.
Untuk memulai analisis untuk menjelaskan metoda Runge-Kutta Fehlberg, kita akan memulai dengan
menentukan bagaimana penentuan galat pemendekan local dari suatu metoda beda hingga yang dapat
digunakan untuk mendapat keuntungan dari pendekatan ukuran langkah optimal untuk mengendalikan
galat global. Untuk itu anggap bahwa ada dua metoda beda hingga tersedia untuk appoksimasi dari
atas problema nilai awal dan salah satunya adalah
z 0= β
z i+1 = y i +hi φ ( hi , z i )
(77)
yang mempunyai kesalahatan pemendekan local τ i+1 dengan orde O(hn), dan metoda lain
z^ 0= β
^z i+1 =^z i+hi φ^ ( h i , ^z i )
(78)
yang mempunyai kesalahatan pemendekan local τ^ i+1 dengan orde O(hn+1)
Kalau kita ambil z i= y i =^z i , maka
y i+1 −z i+1 = y i+1 −z i −hi φ ( h i , z i )
≈ y i+1− y i −hi φ ( hi , y i )
=hτ
i +1
Dengan demikian,
1
τ i+1≈ [ y −z ]
h i+1 i+1
1 1
= [ y i+1 −^z i+1 ]+ [ ^zi+1 −zi+1 ]
h h
1
≈ τ^ i+1 + [ ^z i+1 −z i+1 ]
h (79)
Akan tetapi τ i+1 berasal dari orde O(hn) dan orde τ^i+1 dari orde O(hn+1) sehingga porsi terbesar
dari τ i+1 harus merupakan bagaian dari ( ^z i+1 −z i+1 ) /h , dengan demikian
1
τ i+1= [ z^ i+1 −zi+1 ]
h (80)
Karena τ i+1 berasal dari orde O(hn), jadi kita dapat mengambil suatu konstata c sedemikian
sehingga
τ i+1=chn (81)
Untuk memperkirakan τ i+1 kita menggunakan hubungan antara persamaan (80) dan (81), yaitu
1
chn = [ z^ i+1−z i+1 ]
h (82)
Rancangan dari prosedur adalah menggunakan perkiraan ini bagi suatu ukuran langkah yang pantas.
Untuk mengakomodasi hal ini, ambil kesalah pemendekan dengan h diganti oleh rh di mana r positif
dan terbatas di atas dan jauh dari nol, kita nyatakan galat pemenggalan ini oleh τ i+1 ( rh ) , maka
berdasarkan persamaan (81) dan (82), kita akan mempunyai
n
n r ^
τ i+1 ( rh )≈c ( rh ) =r n ( chn )= [ z −z ]
h i+1 i+1 (83)
Untuk membatasi τ i+1 ( rh ) oleh ε, kita harus memilih r sedemikian sehingga
n
r ^
[ z −z ]≈|τ i+1 ( rh )|≤ε
h i+1 i+1 (84)
Dengan demikian kita bisa menuliskan
1
εh
r≤
[
|z^ i+1−z i+1|
n
] (85)
Felhberg menggunakan ketidak persamaan yang dinyatakan oleh persamaan (85) untuk
mengendalikan galat dalam metoda yang diusulkannya pada tahun 1970 untuk suatu metoda variant
dari Runge-Kutta dan untuk menghargainya maka metoda yang diusulkannya disebut sebagai metoda
Runge-Kutta Fehlberg. Teknik ini melibatkan suatu metoda Runge-Kutta dengan galat pemenggalan
berasal dari orde ke-lima .
Persamaan yang digunakan adalah
25 1408 2197 1
y i+1 = y i + [ 216
k1+
2565
k 3+
4104 ]
k 4− k 5 h
5 (86)
Bersama-sama dengan formula orde ke-lima:
16 6656 28561 9 2
y i+1 = y i +
[ 135
k1+
12825
k 3+
56430
k 4− k5+ k 6 h
50 55 ] (87)
Dimana
k 1 =hf ( x i , y i )
1 1
(
k 2 =f x i + h , y i + k 1 h
4 4 )
3 3 9
(
k 3 =f x i + h , y i + k 1 h+ k 2 h
8 32 32 )
12 1932 7200 7296
(
k 4 =f xi + h , y i +
13 2197
k 1 h−
2197
k 2 h+ k h
2197 3 )
439 3680 854
(
k 5 =f x i +h , y i +
216
k 1 h−8 k 2 h+
513
k 3 h−
4104 4
k h )
1 8 3544 1859 11
(
k 6 =f x i + h , y i− k 1 h+2 k 2 h+
2 27 2565
k 3 h+
4104
k 4 h− k 5 h
40 )
Perkiraan galat diperoleh dari mengurangkan persamaan (85) dengani (84) yang menghasilkan
1 128 2197 1 2
Ea = [ 360
k1−
4275
k 3−
75240
k 4+ k 5+ k 6 h
50 55 ] (88)
Jadi persamaan differensial dapat diselesaikan dengan persamaan (86) dan galat dievaluasi dengna
persamaan (88). perlu kita catat di sini adalah bahwa setelah setiap langkah dilakukan, persamaan (88)
harus ditambahkan pada persamaan (86) untuk menghasilkan orde kelima, yaitu persamaan (87).
Informasi lebih lanjut mengenai hal ini dapat anda temukan di beberapa buku seperti dalam Maron
(1982), Gerald and Wheatley (1984), dan Rice (1983).
Dalam teori pengendalian galat, suatu nilai awal dari h dgunakan untuk mencari nilai zi+1 dan ^z i+1 ,
yang akan menuntun kita pada penentuan r untuk langkah tersebut dan setelah itu melakukan
kalkulasi seperti yang diinginkan. Prosedur ini membutuhkan dua kali efaluasi fungsional seperti yang
dilakukan pada metoda tanpa pengendalian galat. Dalam prakteknya, nilai r yang akan digunakan
agak berbeda agar kenaikan biaya komputasi akan menghasil komputasi yang lebih akurat juga atau
dengan perkataan keakurasian harus dijaga agar sebanding dengan biaya komputasi. Harga r
ditentukan pada langkah ke-I digunakan untuk dua tujuan, yaitu
a. Untuk menolak pemilihan h mula-mula pada langkah ke-i jika diperlukan dan mengulangi
kalkulasi menggunakan rh, dan
b. Untuk memprediksi suatu pemilihan awal h yang cocok untuk langkah ke-i+1.
Karena penalty yang harus dibayar jika banyak langkah diulang r karena ini berarti lebih banyak
evaluasi fungsional yang yang harus dilakukan sehingga r cenderung dipilih secara konservatif dan
pada kenyataannya, pilihan yang biasanya dilakukan untuk r dalam metoda Runge-Kutta Fehlberg ini
adalah
1 1
εh εh
r=
[
2|^z i+1 −z i+1|] [
4 =0.84
|^z i+1 −z i+1| ] 4
(89)
Dari uraian di atas, disusunlah Algoritma seperti yang diperlihatkan dalam Algoritma 7.
h
y i+1 = y i + (f +f )
Untuk n = 1, 2 i i+1 (93)
h
y i+1 = y i−1 + ( f i−1 +4 f i +f i+1 )
Untuk n = 2, 3 (94)
3h
y i+1 = y i−2 + ( f i−2 +3 f i−1 +3 f i +f i+1 )
Untuk n = 3, 8 (95)
2h
y i+1 = y i−3 + ( 7 f i−3 +32 f i−2 +12 f i−1 +32 f i +7 f i+1 )
Untuk n = 4, 45 (96)
Teknik-Teknik Adam. Jenis lain dari teknik integrasi yang digunakan untuk menyelesaikan
persamaan diferensial orde pertama dengan nilai awal adalah metoda yang didasarkan kepada konsep
beda hingga yang disebut metoda Adam. Dan yang perlu kita catat di sini bahwa banyak program
computer populer untuk solusi langkah ganda bagi persamaan diferensial biasa orde pertama dengan
nilai awal di dasarkan atas metoda ini. Ada dua metoda yang menandai metoda ini, yakni metoda
Adam terbuka yang dikenal dengan nama Metoda Adam-Bashfort dan metoda Adam tertutup yang
dikenal dengan nama Metoda Adam-Moulton. Kita akan mulai dengan yang pertama: Metoda Adam
terbuka.
Metoda Adam terbuka (Metoda Adam-Bashfort). Formula Adam dapat diturunkan dengan
beberapa cara dan salah satunya adalah menuliskan deret Taylor maju di sekitar titik interior ti, yaitu:
, ( 2) ( 3) ( n−1 )
fi 2 fi 3 fi 4 fi
y i +1 = y i + f i h+ h + h + h +. ..+ h n +. ..
2 3! 4! n! (97)
Atau kita dapat menulisnya kembali dalam bentuk berikut ini.
( 2) ( 3)
f ,i
(n−1)
f i 2 fi 3 fi
[
y i +1 = y i +h f i + h+
2 3!
h+
4!
h + .. .+
n!
n−1
h + .. .
(98)
]
Kita juga sudah belajar dari Bab, beda hingga mundur dapat digunakan untuk menghampiri nilai dari
turunan, sehingga kita dapat menuliskan
( 2)
f −f i−1 fi
f i,= i + h+O ( h2 )
h 2 (99)
Yang kemudian di masukkan ke dalam persamaan (98) akan menghasilkan persamaan berikut ini.
( 2) ( 3) (n )
h f i −f i−1 f i fi fi
[
y i +1 = y i +h f i +
2( h
+ )
2!
( 2
h+O h + )
3!
2
h + .. .+
n!
n−1
h + .. .
(100)
]
Dengan mengumpulkan suku-suku yang sama kita dapat menuliskan kembali persamaan ini menjadi
persamaan:
3 f i−f i−1 5 3 ( 2)
y i +1 = y i +h ( 2 12 )
+ h f i +O ( h 4 )
(101)
Formula yang dinyatakan oleh persamaan terakhir ini () disebut sebagai formula Adam terbuka orde
kedua, yang disebut juga sebagai formula Adam-Bashfort orde kedua.
Untuk formula-formula Adam-Bashfort orde yang lebih tinggi dapat diperoleh dengan
mensubstitusikan orde beda hingga ke dalam persamaan (98). Dan secara umum, Formula Adam
terbuka dapat dinyatakan dalam persamaan berikut ini.
n−1
y i +1 = y i +h ∑ γ k f i −k +O ( hn+1 )
k =0 (102)
Nilai-nilai γk dalam persamaan terakhir ini disajikan dalam Tabel berikut ini.
Formula-Formula Adam tertutup (Adam-Moulton). Kalau sekarang kita mengambil deret Taylor
mundur disekitar ti+1, maka kita dapat menuliskannya dalam persamaan berikut ini.
, ( 2) (3 ) ( n−1 )
f f f f
y i= yi+1 −f i+1 h+ i+1 h2− i+1 h3 + i+1 h 4 +. ..+ i+1 h n−.. .
2 3! 4! n! (103)
Persamaan () ini kemudian kita selesaikan untuk ti+1 dan memberikan hasil
( 2) ( 3)
f ,i+1
(n−1)
f i+1 2 f i+1 3 f i+1
2[
y i+1 = y i −h f i+1 +
h−
3!
h+
4!
h +. . .+
n!
n−1
h −. ..
(104)
]
Sekarang dengan mengambil definisi beda hingga maju untuk menghampiri nilai turunan sebagai
berikut.
f i +1 −f i f (i2+)
, 2
f i +1 =
+ h+O ( h )
h 2 (105)
Masukkan persamaan terakhir ini () ke dalam () sehingga diperoleh persamaan seperti berikut ini.
( 2)
[ ]
(3 ) (n )
h f i +1 −f i f i +1 fi fi
y i +1 = y i +h f i +1−
2 ( h
+
2!
h+ O ( h2 ) +
3!
h2−. . .+ )
n!
(106)
h n−1 −.. .
Sekarang, dengan mengumpulkan suku-suku yang sama ke dalam kelompok yang sama, kita akan
memperoleh
f i+1−f i 5
y i+1 = y i +h
2 ( 12
( 2)
)
− h3 f i+1 −O ( h4 )
(107)
Persamaan ini terkenal dengan sebutan formula adam tertutup orde kedua atau yang lebih dikenal
sebagai formula Adam-Moulton. Juga kita catat di sini bahwa persamaan ini tidak lain adalah aturan
trapesium seperti yang pernah kita pelajari dalam integrasi numerik.
Untuk formula-formula Adam-Moulton orde yang lebih tinggi dapat diperoleh dengan
mensubstitusikan orde beda hingga ke dalam persamaan (107). Dan secara umum, Formula Adam-
Moulton dapat dinyatakan dalam persamaan berikut ini.
n−1
y i+1 = y i +h ∑ γ k f i+1−k +O ( hn+1 )
k =0
(108)
Nilai-nilai γk dalam persamaan terakhir ini disajikan dalam Tabel berikut ini.
Tabel. Nilai γk untuk formula-formula Adam-Moulton.
Galat pemendekan
Orde γ0 γ1 γ2 γ3 γ4 γ5
Local
2
2 1 1 1 d
− h3 2 f ( ξ )
2 2 12 dt
3 5 8 1 1 d3
− − h4 3 f (ξ )
12 12 12 24 dt
4
4 9 19 5 1 19 5 d
− − − h 4 f (ξ )
24 24 24 24 720 dt
5
5 251 646 264 106 19 27 6 d
− − − h f (ξ )
720 720 720 720 720 1440 dt 5
6
6 475 1427 798 482 173 27 863 d
− − − h7 6 f ( ξ )
1440 1440 1440 1440 1440 1440 60 , 480 dt
Metoda-Metoda Langkah Ganda berorde Tinggi. Hingga saat ini kita telah secara formal
mengembangkan metoda Newton-Cotes dan metoda Adam yang nantinya dapat digunakan untuk
menurunkan metoda-metoda langkah ganda dengan orde-orde yang lebih tinggi. Jika metoda terbuka
dan metoda tertutup mempunyai galat pemendekan local dengan orde yang sama. Seperti halnya
dengan metoda Heun, metoda-metoda langkah ganda orde tinggi digunakan secara tandem sebagai
predictor bagi metoda predictor-corrector. Dalam sub bagian ini kita akan membahas mengenai dua
metoda yang paling umum dibahas dan digunakan dalam komputasi persamaan diferensial biasa.
Yang pertama adalah Metoda Milne dan Metoda Adam dari orde keempat.
Metoda Milne. Metoda Milne adalah metoda langkah ganda yang paling banyak digunakan yang
didasarkan atas Metoda integrasi Newton-Cotes. Metoda ini menggunakan formula tiga titik Newton-
Cotes terbuka sebagai predictor.
4h
y Pi+1 = y i−3 + ( 2 f i −f i−1 +2 f i−2 )
3
(109)
Dan bertindak sebagai corrector adalah
h P
y i+1 = y i−1 + ( 2 f +4 f i +f i−1 )
3 i+1 (110)
Dimana
P P
f i+1 =f ( t i+1 , y i+1 )
fi = f(xi, yi) dan
(111)
Yang perlu diingat disini, modifier dari predictor dan corrector diformulasi berdasarkan galat dari
setiap metoda yang diambil.
Sekarang berdasarkan persamaan (109) sampai dengan (111) kita dapat menyusun algoritma untuk
menyelesaikan persamaan diferensial biasa orde pertama dengan nilai batas, yaitu dengan memulai
langkah pertama dengan menghitung nilai-nilai yi untuk i = 1, 2, 3 dengan menggunakan algoritma
Runge-Kutta, sebagai contoh, kita dapat menggunakan metoda Runge-Kutta orde ke-empat. Dengan
demikian Algoritma Milne yang disusun akan mengambil bentuk seperti yang ditunjukkan oleh
Algoritma berikut ini.
Algoritma . Milne
Step 1. Gunakan Metoda Runge-Kutta Orde empat untuk menghitung nilai-nilai hampiran dari solusi
(yi) untuk i =1, 2, dan 3. Set i = 3 dan lanjut ke step 2
Step 2. Hitung Predictor dengan persamaan (109)
Step 3. Hitung Corrector dengan persamaan (110)
Step 4. Apakah i sudah mencapai N?
Jika belum, naikan counter loop sebesar satu point, yaitu i = i + 1 dan kembali ke Step 2
Jika Ya ke Step 5.
Step 5. Tulis atau simpan atau gunakan hasil yang diperoleh dan Stop.
Berdasarkan Algoritma ini kita dapat menyusun suatu fungsi yang dapat diakses oleh semua program
matlab yang melibatkan penggunaan algoritma untuk menghitung persamaan differensial orde
pertama dengan nilai awal seperti yang ditunjukkan oleh penggalan script Matlab berikut ini.
Algoritma Milne ini bisa diperbaiki dengan cara melakukan iterasi terhadap korektor dimana korektor
sekarang akan menjadi prediktor pada iterasi berikutnya, yaitu dengan mengubah persamaan (109)
dan (110) menjadi,
j) 4h
y (i+1 = y i−3 + ( 2 f i −f i−1 +2 f i−2 )
3
(109a)
dan
h ( j)
y ( j+1) = y i−1 + (2 f + 4 f i + f i−1)
i+1 3 i +1
(110a)
dengan
( j) ( j)
f i +1 =f ( t i +1 , y i+1 )
fi = f(xi, yi) dan
(111a)
iterasi dalam hitungan j dikatakan berhasil jika galat yang diakibatkannya menjadi cukup kecil dan
dihitung oleh persamaan berikut ini
( j +1 ) ( j)
y i+1 − y i+1
galat= ( j)
≤∈
y i+1 (111b)
Dimana ∈ adalah bilangan real positif yang kecil.
Dengan persaman-persamaan baru ini kita dapat meyusun algoritma Milne yang diperbaiki seperti
yang dinyatakan oleh Algoritma berikut ini
Algoritma . Milne
Step 1. Gunakan Metoda Runge-Kutta Orde empat untuk menghitung nilai-nilai hampiran dari solusi
(yi) untuk i =1, 2, dan 3. Set i = 3; j =0; eps = 0.000001; M = IterasiMax dan lanjut ke step 2
Step 2. Hitung Predictor dengan persamaan (109a)
Step 3. Hitung Corrector dengan persamaan (110a)
Step 4. Apakah jumlah iterasi sudah melebihi iterasi maksimum, yaitu j = IterasiMax?
Jika ya, set h yang baru dan ulangi proses komputasi ini.
Jika tidak, lanjutkan ke Step 5
Step 5. Hitung galat dengan persamaan (111b)
Apakah galat <= eps
Jika tidak, naikkan counter iterasi satu poin, yaitu j = j + 1 dan kembali Step 3
Jika ya, lanjutkan ke Step 6
Step 6. Apakah i sudah mencapai N?
Jika belum, naikan counter loop sebesar satu point, yaitu i = i + 1 dan kembali ke Step 2
Jika Ya ke Step 7.
Step 7. Tulis atau simpan atau gunakan hasil yang diperoleh dan Stop.
Dengan Algoritma ini kita dapat menyusun suatu program script Matlab yang berupa fungsi dengan
nama milnemodified.m, seperti yang terlihat dalam kode script berikut ini.
Berdasarkan pengalaman-pengalaman banyak orang yang menggunakan algoritma Milne dalam
komputasi yang persamaan differensial orde pertama dengan nilai awal bisa disimpulkan bahwa
metoda Milne ini memberikan hasil yang cukup baik akurasinya. Walaupun demikian untuk beberapa
kasus khusus seperti yang ditemukan oleh Raltson dan Rabinowitz metoda ini menunjukkan untuk
kerja yang kurang bagus. Dan ini akan kita elaborasi secara khusus di bagian akhir dari Bab ini.
Metoda Adam orde keempat. Metoda ini juga merupakan metoda yang popular di samping metoda
Milne yang baru kita bahas di atas. Untuk itu kita akan menggunakan Formula Adam-Bashfort orde
ke empat sebagai predictor, yaitu
h
y Pi+1 = y i + ( 55 f i −59 f i−1 +37 f i−2−9 f i−3 )
24
(112)
Seperti yang kita temui dalam Tabel.
Dan bertindak sebagai corrector adalah
h
y i+1 = y i + ( 9 f Pi+1 +19 f i−5 f i−1 +f i−2 )
24 (113)
Seperti yang dinyatakan oleh Tabel.
Dimana
P P
f i+1 =f ( t i+1 , y i+1 )
fi = f(xi, yi) dan
(111)
Sekarang, berdasarkan persamaan-persamaan (112), 113dan (111) kita dapat menyusun algoritma
untuk menyelesaikan persamaan diferensial biasa orde pertama dengan nilai batas, yaitu dengan
memulai langkah pertama dengan menghitung nilai-nilai yi untuk i = 1, 2, 3 dengan menggunakan
algoritma Runge-Kutta, sebagai contoh, kita dapat menggunakan metoda Runge-Kutta orde ke-empat.
Dengan demikian Algoritma Adam yang disusun akan mengambil bentuk seperti yang ditunjukkan
oleh Algoritma berikut ini.
Algoritma . Adam-Bashfort-Moulton
Step 1. Gunakan Metoda Runge-Kutta Orde empat untuk menghitung nilai-nilai hampiran dari solusi
(yi) untuk i =1, 2, dan 3. Set i = 3 dan lanjut ke step 2
Step 2. Hitung Predictor dengan persamaan (112)
Step 3. Hitung Corrector dengan persamaan (113)
Step 4. Apakah i sudah mencapai N?
Jika belum, naikan counter loop sebesar satu point, yaitu i = i + 1 dan kembali ke Step 2
Jika Ya ke Step 5.
Step 5. Tulis atau simpan atau gunakan hasil yang diperoleh dan Stop.
Berdasarkan Algoritma ini kita dapat menyusun suatu fungsi yang dapat diakses oleh semua program
matlab yang melibatkan penggunaan algoritma untuk menghitung persamaan differensial orde
pertama dengan nilai awal seperti yang ditunjukkan oleh penggalan script Matlab berikut ini.
Metoda ini akan memberikan hasil yang lebih baik apabila koreksi dibuat iterative,sebagai berikut.
Persamaan (112) ditulis kembali sebagai predictor ke-j, yaitu:
j) h
y (i+1 = yi+ ( 55 f i −59 f i−1 +37 f i−2−9 f i−3 )
24
(112a)
Sedangkan korektornya mejadi prediktor pada iterasi berikutnya, yaitu
h
y ( j+1) = y i + ( 9 f (i j+1) +19 f i −5 f i−1 +f i−2)
i+1 24 (113a)
Dimana
( j) ( j)
f i +1 =f ( t i +1 , y i+1 )
fi = f(xi, yi) dan
(111a)
Berdasarkan persamaan-persamaan (112a) dan (113a) dapat disusun suatu algoritma iteratif untuk
menghitung solusi dari persamaan diferensial orde pertama dengan nilai awal, seperti yang
ditunjukkan oleh Algoritma berikut ini.
Algoritma . Adam-Bashfort-Moulton
Step 1. Gunakan Metoda Runge-Kutta Orde empat untuk menghitung nilai-nilai hampiran dari solusi
(yi) untuk i =1, 2, dan 3. Set i = 3; j =0; eps = 0.000001; M = IterasiMax dan lanjut ke step 2
Step 2. Hitung Predictor dengan persamaan (112a)
Step 3. Hitung Corrector dengan persamaan (113a)
Step 4. Apakah jumlah iterasi sudah melebihi iterasi maksimum, yaitu j = IterasiMax?
Jika ya, set h yang baru dan ulangi proses komputasi ini.
Jika tidak, lanjutkan ke Step 5
Step 5. Hitung galat dengan persamaan (111b)
Apakah galat <= eps
Jika tidak, naikkan counter iterasi satu poin, yaitu j = j + 1 dan kembali Step 3
Jika ya, lanjutkan ke Step 6
Step 6. Apakah i sudah mencapai N?
Jika belum, naikan counter loop sebesar satu point, yaitu i = i + 1 dan kembali ke Step 2
Jika Ya ke Step 7.
Step 7. Tulis atau simpan atau gunakan hasil yang diperoleh dan Stop.
Metoda Hamming. Metoda ini pertama kali diusulkan oleh Hamming dalam bukunya “Numerical
Methods for Scientist and Engineers” pada tahun 1973. Metoda ini diusulkan karena ditemukannya
ketidak stabilan dari metoda Milne yang disebabkan oleh korektor. Usaha-usaha telah dilakukan
untuk mengembangkan korektor yang stabil yang dapat digunakan dengan metoda Milne dan salah
satunya adalah usaha yang dilakukan oleh Hamming tersebut. Dan untuk menghargai usahanya,
dikemudian hari orang menyebut usaha ini sebagai metoda Hamming. Metoda Hamming dianggap
sebagai satu kelas umum dari formula korektor dari bentuk
y i+1 =a i y i + ai−1 y i−1 + ai−2 y i−2 + h [ bi+1 y ,i+1 + bi y ,i +bi −1 yi,−1 +bi −2 yi−2
,
] +O ( h5 ) (114)
di mana
,
y j =f ( t j , y j ) untuk j = i + 1, i, i – 1, i – 2
(115)
Persamaan (114) ini mengikutkan baik formula-formula korektor Milne maupun Adam sebagai suatu
kasus khusus. Dengan mengambil ekspansi deret Taylor di sekitar ti, dengan mengikut sertakan suku-
d4 y
t , yi)
4 ( i
suku hingga ke turunan keempat, yaitu dt , maka kita akan memperoleh
dy h2 d 2 y h3 d 3 y h4 d 4 y
y i−1 = y i−h ( t , y ) + ( t , y )− t
( ), y + (t , y )
dt i i 2! dt 2 i i 3 ! dt 3 i i 4 ! dt 4 i i (116)
Persamaan (116) adalah ekspansi dari y, ukuran langkah adalah –h.
dy ( 2h )2 d 2 y ( 2 h ) 3 d3 y ( 2 h) 4 d 4 y
y i−2 = y i−( 2 h ) ( t i , y i ) + ( t , y )− ( t , y ) + t ,y
dt 2! dt 2 i i 3 ! dt 3 i i 4 ! dt 4 ( i i ) (117)
Persamaan (117) adalah ekspansi dari y, ukuran langkah adalah –2h.
dy dy d2 y h2 d 3 y h3 d 4 y
( t , y ) = ( t , y ) + h ( t , y ) + ( t , y ) + (t , y )
dt i+1 i +1 dt i i dt 2 i i 2 ! dt 3 i i 3 ! dt 4 i i
(118) Persamaan (118) adalah ekspansi dari y’, ukuran langkah adalah +h.
dy dy d2 y h2 d 3 y h3 d 4 y
( t i−1 , y i−1 ) = ( t i , y i )−h 2 ( t i , y i ) + ( t , y )− (t , y )
dt dt dt 2! dt 3 i i 3 ! dt 4 i i
(119) Persamaan (119) adalah ekspansi dari y’, ukuran langkah adalah –h.
2 3
dy dy d2 y ( 2h ) d 3 y ( 2 h) d4 y
( t , y ) = ( t , y )− ( 2 h ) 2 ( i
t , yi) + ( t , y ) 3 ! 4 ( ti , y i )
−
dt i−2 i−2 dt i i dt 2! dt 3 i i dt (120)
Persamaan (120) adalah ekspansi dari y’, ukuran langkah adalah –2h.
2 2 3 3 4 4
dy h d y h d y h d y
y i+1 = y i +h ( t i , y i ) + ( t , y ) + ( t , y ) + (t , y )
dt 2! dt 2 i i 3! dt 3 i i 4 ! dt 4 i i (121)
Persamaan (121) adalah ekspansi dari y, ukuran langkah adalah +h.
Sekarang, substitusikan persamaan bagian kanan persamaan (121) ke dalam bagian kiri persaman
(114) dan persamaan-persamaan (116) hingga (120) ke bagian kanan persamaan (114) dan kemudian
persamakan koefisien dari yi dan turunan-turunannya pada kedua sisi persamaan dan persaman yang
dihasilkan akan memberikan sistem persamaan linear baru berikut ini.
ai +ai−1 +ai−1 =1
−ai−1 −2 ai−2 +bi+1 +bi + b i−1 + bi−2 =1
1 1
ai−1 +2 ai−2 +bi+1 − bi−1 −2 bi−2 =
2 2
1 4 1 1 1
− ai−1 − ai−2 + b i+1+ bi−1+2 bi−2=
6 3 2 2 6
1 2 1 1 4 1
ai−1 + ai−2 + bi+1− bi−1 − bi−2=
24 3 6 6 3 6 (122)
Dari sistem persamaan yang diberikan oleh (122) terdapat tujuh anu dan lima persamaan, jelas
persaman ini akan memberikan jawaban yang banyak. Sedangkan yang dinginkan hanya satu jawaban
dan Hamming mengasumsikan bahwa ai−1 =b i−2=0, dan dengan nilai-nilai yang diketahui ini,
persamaan (122) dapat diselesaikan dan kita memperoleh
9 1 3 3 3
ai = , ai−2 =− , bi+1= , bi = , bi−1 =−
8 8 8 4 dan 8
(123)
Dengan memasukkan nilai-nilai yang diberikan dalam persamaan (123) ke dalam persamaan (114),
formula korektor dapat ditulis sebagai
9 1 3
y i+1 = y i − y i−2 + h [ y ,i+1 +2 y i,− y ,i−1 ]
8 8 8
(124)
Dan galat yang terjadi adalah:
14 5 d 4 y
E p= h (ξ )
45 dt 4 p (125)
Dimana xi-3 < ξp < xi+1. Dan galat untuk formula korektor (124) dapat diperlihatkan sebagai:
1 d4 y
Ec =− h5 4 ( ξ c )
40 dt
(126)
Dimana xi-3 < ξc < xi+1. Dengan menganggap bahwa turunan keempat yang diberikan baik dalam
persamaan (125) maupun (126) tidak berubah secara drastis dalam interval (xi -3, xi +1), kita
menggunakan hubungan
d4 y d4 y d4 y
( ξ ) = ( ξ ) = ( ξ)
dt 4 p dt 4 c dt 4 (127)
Juga bahwa galat dalam prediktor dan korektor diberikab oleh
112 (m +1 ) (1 )
E p= ( y − yi )
121 i
(128)
dan
9 ( m+1 ) (1 )
Ec =− ( y − y i+1)
121 i+1
(129)
Persamaan (124) dapat digunakan bersama-sama dengan formula predictor yang tersedia seperti
formula Milne yang diberikan dalam persamaan (). Ketimbang dengan hanya menggunakan
persamaan () dan (124) sebagai predictor dan korektor; Hamming mengusulkan suatu prosedur untuk
mengeliminasi iterasi yang terkait dengan formula-formula korektor yang biasa digunakan. Dan ini
melibatkan modifier untuk predictor maupun korektor. Prosedur yang diusulkan Hamming sekarang
bisa dituliskan secara lengkap sebagai:
4
^y i+1 = y i−3 + h [ 2 y i,− y ,i−1 +2 y ,i−2 ]
3
(130)
Persamaan (130) ini merupakan predictor. Sedangkan modifier untuk predictor dinyatakan oleh
persamaan berikut ini.
112
y (1 ) = ^y i+1 − ( ^y − ^ȳ )
i+1 121 i i (131)
Sedangkan korektor diberikan oleh:
^ȳ i+1 = 9 y i − 1 y i−2 + 3 h f ( t i+1 , y (i+1
[ 1)
)+2 y ,i − y ,i−1 ]
8 8 8
(132)
Sedangkan modifier dari korektornya adalah:
9
y i+1 = ^ȳ i+1 + ( y^ i+1 − ^ȳ i+1 )
121 (133)
Kita dapat melihat dengan jelas bahwa persamaan-persamaan (130) hingga (133) tidak melibatkan
proses iterative dan persamaan (133) memberikan nilai akhir dari yi+1. Kita bisa mencatat bahwa
metoda ini bukanlah metoda yang memulai proses sendiri (self starting) dan karenanya metoda ini
membutuhkan metoda lain seperti metoda Runge-Kutta orde ke-4 untuk memulai prosesnya. Dalam
^y − ^ȳ
langkah pertama, persamaan-persamaan (130) hingga (133) digunakan, harga ( i i ) diambil nol
dalam persamaan (131). Metoda Hamming orde ke-4 yang diberikan disini merupakan metoda
langkah ganda yang paling popular.
Berdasarkan uraian yang telah kita buat di atas, kita dapat menyusun algoritma yang membuat metoda
Hamming ini dapat digunakan dalam komputasi dan algoritma itu tertuang dalam Algoritma
Hamming berikut ini.
Algoritma . Algoritma Hamming.
Input
Step 1. Set i = 0
Step 2. Panggil Algoritma Runge-Kitta Orde-4
Step 3. Set i = 3; Set z=0
4
^y i+1 = y i−3 + h 2 f ( t i , y i )−f ( t i−1 , y i−1 ) y ,i−1 +2 f ( t i−2 , y i−2 )
[ ]
Step 4. Hitung 3
112
y (1 ) = ^y i+1 − z
Hitung i+1 121
^ȳ i+1 = 9 y i − 1 y i−2 + 3 h f ( t i+1 , y (i+1
[ 1)
) +2 y ,i − y ,i−1 ]
Hitung 8 8 8
z=( y^ i+1− ^ȳ i+1 )
Hitung
9
y i+1 = ^ȳ i+1 + z
Hitung 121 ;
Output (ti+1, yi+1)
Step 5. Apakah i = n?
Jika tidak, naikkan counter looping satu poin, yaitu i = i + 1 dan kembali ke Step 4.
Jika ya, komputasi selesai. STOP
Dengan Algoritma Hamming ini kita dapat membuat program script Matlab dalam bentuk fungsi
hamming.m
dt dt n−1
=
[ dt ] (123)
Dengan demikian, berdasarkan persamaan-persamaan (120) dan (121), kita dapat menulis persamaan
berikut ini.
dn x dx d2 x d3 x d n−1 x
=c 0 ( t ) x+ c 1 ( t ) +c 2 ( t ) + c3 ( t ) + .. .+c n−1 ( t ) + f (t )
dt n dt dt 2 dt 3 dt 3
=c 0 ( t ) x 1 ( t ) +c 1 ( t ) x 2 ( t )+ c 2 ( t ) x 3 ( t ) + c3 ( t ) x 4 ( t )+. . .+ c n−1 ( t ) x n ( t ) +f ( t )
(124)
Dengan menggabungkan persaman (118), (122) dan (124) maka kita akan menemukan persamaan
(116) dengan
x1 ( t )
[]
x2 ( t )
x ( t )= . .
..
xn ( t )
(125)
Dan
[]
g ( t )= ..
..
0
g (t)
(126)
0 1 0 0 0 0 .. ... . 0
[ ]
0 0 1 0 0 0 .. ... . 0
0 0 0 1 0 0 .. ... . 0
0 0 0 0 1 0 .. ... 0
A=
::: ::: ::: ::: ::: ::: :::::: :::
0 0 0 0 0 0 .. 0
0 0 0 0 0 0 .. ... 1
c 0 ( t ) c1 ( t ) c 2 ( t ) c 3 ( t ) .. .. .. ... c n ( t )
(127)
Dan vektor nilai awal adalah:
x1 ( t 0 ) b1
(128)
[ ] []
x2 ( t 0 )
x ( t 0 )= ..
..
x n ( t0 )
b2
=b= . .
..
bn
Persamaan differensial yang dinyatakan oleh persamaan (116) dapat diselesaikan secara analitis,
maupun secara numerik. Untuk penyelesaian secara numerik, kita dapat menyusun metoda komputasi
berbasis Runge-Kutta atau yang lain dengan modifikasi yang menghasilkan suatu prosedur yang
kemudian dapat digunakan dan ini akan dibahas dalam sub-bagian berikut ini
Penyelesaian Numerik terhadap Sistem m-Persamaan diffensial dengan Nilai Awal. Dalam sub-
bagian ini akan dibahas mengenai penyelesaian numerik dari system m-persamaan diferensial dengan
nilai awal dengan menggunakan metoda Runge-Kutta orde-4. Untuk itu, perhatikan system persamaan
differensial orde pertama berikut ini
dy 1
=f 1 ( t , y 1 , y 2 , .. . , y m)
dt
dy 2
=f 2 ( t , y 1 , y 2 , .. ., y m )
dt
.. .
.. .
dy m
=f m ( t , y 1 , y 2 , .. . , y m )
dt (129)
untuk a ≤ t ≤ b, dengan kondisi awal
y 1 ( a ) =β1
y 2 ( a ) =β 2
.. .
.. .
y m ( a )=β m (130)
Metoda secara sederhana merupakan generalisasi dari metoda untuk menyelesaikan persamaan
differensial orde pertama tunggal seperti yang telah dibahas dalam bagian-bagian sebelumnya. Itu
berarti semua metoda yang dibahas dalam bagian-bagian sebelumnya dapat digunakan untuk
mengembangkan algoritma komputasi untuk system persamaan differensial orde pertama dalam
persamaan (129) dengan kondisi awal dalam persamaan (130). Dalam kesempatan ini kita akan
menyusun algoritma penyelesaian system persamaan differensial orde pertama dengan nilai awal
berdasarkan metoda Runge-Kutta keempat.
Jadi objek dari penyelesaian system persamaan diferensial yang diberikan dalam persamaan (130),
adalah mencari m fungsi y1, y2, …, ym yang memenuhi system persamaan diferensial dan juga kondisi
awalnya.
Sekarang kita akam memulai pembahasan dengan membicarakan keunikan solusi dari system
persamaan, untuk itu, adalah perlu untuk memperluas definisi dari kondisi Lipschitz bagi fungsi
berpubah banyak dan kita akan memulai dengan Definisi berikut ini.
Definisi. Fungsi f(t, u1, u2, …, um) didefinisikan dalam himpunan
D = {(t, y1, y2, …, ym)|a ≤ t ≤ b, -∞ < μi < ∞, untuk i = 1, 2, …, m}
dikatakan memenuhi suatu kondisi Lipschitz di D dalam variabel-variabel y1, y2, …, ym jika ada suatu
konstanta L > 0 dengan sifat bahwa
m
∑ |y j −z j|
| f(t, y1, y2, …, ym) - f(t, z1, z2, …, zm) | ≤ L j=1 ()
Untuk semua (t, y1, y2, …, ym) dan (t, z1, z2, …, zm) dalam D.
Dengan menggunakan Teorema nilai rata-rata, dapat diperlihatkan bahwa jika f dan turunan-turunan
parsialnya kontinu di D dan jika
∂ ( t , y1 , y 2 ,..., y m )
| |≤L
∂ yi
untuk setiap i = 1, 2, …, m dan semua (t, y1, y2, …, ym) dalam D, maka f memenuhi kondisi Lipschitz
di D dengan konstanta Lipshitz L. Dari definisi ini kemudian akan mengikuti Teorema dasar
eksistensi dan keunikan penyelesaian system persamaan differensial seperti berikut ini.
Teorema . Anggaplah bahwa D = {(t, y1, y2, …, ym)|a ≤ t ≤ b, -∞ < μi < ∞, untuk i = 1, 2, …, m} dan
juga, ambil f(t, y1, y2, …, ym) untuk setiap i = 1, 2, …, m, kontinu di D dan memenuhi kondisi Lipschiz
di sana. Maka system persamaan diferensial (129) dengan kondisi awal (130) mempunyai solusi yang
unik, yaitu y1(t), y2(t), …, ym(t) dalam interval a ≤ t ≤ b.
Dimulai dari persamaan (130) dan menset keadaan awal dengan sebagai keadaan pada i = 0, kita
dapat membentuk langkah pertama komputasi sebagai berikut
b−a
h=
Set N
Untuk j = 1, 2, …, m (131)
i
Set y j =β j
Set i = 0
Sekarang kita dapat membentuk langkah selanjutnya dimulai dari langkah ke-3. Sekarang, jika kita
i
menganggap bahwa y j untuk setiap j = 1, 2, …, m telah dihitung, maka kita akan dapat
i+1
menghitung y j untuk setiap j = 1, 2, …, m. Dan itu berarti kita telah terlebih dahulu menghitung
h
( 2 )
k 1j =hf j ti + , y i1 , y i2 , y i3 , . .. y im
untuk setiap j = 1, 2, …, m (132)
h
k =hf ( t + , y + k , y + k , y + k ,. .. y + k )
j
2 j i
i
1
1 1
2 1
i
2
1
2
2
1
i
3
1 3
2 1
i
m
1
2
m
1
2
untuk setiap j = 1, 2, …, m (133)
h
( 1 1 1 1
k 3j =hf j t i + , yi1 + 2 k 12 , y i2 + 2 k 22 , y i3 + 2 k 32 ,. .. y im + 2 k m2
2 )
untuk setiap j = 1, 2, …, m (134)
k 4j =hf j ( t i +h , y i1 +k 13 , y i2 +k 23 , y i3 +k 33 ,. .. y im +k 3m )
untuk setiap j = 1, 2, …, m (135)
i+1
Setelah itu kita dapat menghitung y j untuk setiap j = 1, 2, …, m dengan persamaan
1 j
y ij+1 = y ij + ( k 1 +2 k 2j +2 k 3j + k 4j )
6 (135)
Dari hasil analisis di atas kita dapat menyusun algoritma untuk komputasi system persamaan
differensial orde pertama dengan nilai awal seperti yang ditunjukkan oleh Algoritma 7 berikut ini.
Algoritma 7.
b−a
h=
Step 1. Set N
Untuk j = 1, 2, …, m
i
Set y j =β j
Set i = 0
Step 2. Hitung ti = a + ih
Step 3. Untuk setiap j = 1, 2, …, m
h
Hitung
(
k 1j =hf j ti + , y i1 , y i2 , y i3 , . .. y im
2 )
Step 4. Untuk setiap j = 1, 2, …, m
h
Hitung
(
k 2j =hf j t i + , y i1 + 12 k 11 , y i2 + 12 k 21 , y i3 + 12 k 31 ,. .. y im + 12 k m1
2 )
Step 5. Untuk setiap j = 1, 2, …, m
h
Hitung
(
k 3j =hf j t i + , yi1 + 12 k 12 , y i2 + 12 k 22 , y i3 + 12 k 32 ,. .. y im + 12 k m2
2 )
Step 6. Untuk setiap j = 1, 2, …, m
j i 1 i 2 i 3 i m
Hitung k 4 =hf j ( t i +h , y 1 +k 3 , y 2 +k 3 , y 3 +k 3 ,. .. y m +k 3 )
Step 7. Untuk setiap j = 1, 2, …, m
1 j
y ij+1 = y ij + ( k 1 +2 k 2j +2 k 3j + k 4j )
Hitung 6
Step 7. Apakah i = n? Jika tidak naikkan counter I satu point, yaitu i = i + 1 dan kembali ke Step 2
Jika ya, perhitungan selesai dan keluar dari algoritma.
Dengan cara yang sama seperti yang digunakan untuk mendapatkan algoritma untuk metoda-metoda
Runge-Kutta dari orde-orde yang lain.
Dari Algoritma ini kita dapat membuat program script Matlab sebagai suatu fungsi buatan (user
defined function) yang digunakan untuk menyelesaikan sistem dengan tiga persamaan diferensial dan
sistem ini bisa dikembangkan untuk lebih dari tiga persamaan diferensial.
Dalam Bab ini, untuk mendapat wawasan mengenai kemunculan problema nilai batas dalam peristiwa
perpindahan massa, perpindahan kalor dan defleksi dalam struktur.
Contoh pertama adalah peristiwa perpindahan massa, yaitu diffusi dan reaksi orde pertama dalam
lapisan katalis (lihat Gambar 1.)
Partikel Permukaan
Katalis exterior
porous
y=1
dy
=0
dx
y=1
profile
konsentrasi
x=0
Jika A adalah luas penampang dari katalis, J adalah fluks diffuse yang didefinisikan sebagai mol
persatuan luas total per satuan waktu dan kC adalah laju reaksi persatuan volume katalis, maka dengan
mengambil neraca massa pada suatu selubung tipis pada posisi r dengan ketebalan Δr, kita dapat
menuliskan
Dengan membagikan persamaan (1) dengan Δr serta membuat selubung menjadi setipis mungkin,
yaitu dengan mengambil limit dari Δr menuju nol, maka kita akan menemukan persamaan berikut ini.
dJ
− −kC=0
dr (2)
Tetapi menurut hokum Fick untuk diffuse, fluks ke dalam partikel katalis adalah sebanding dengan
gradient konsentrasi, yaitu:
dC
J =−D e
dr (3)
Maka dengan memasukkan persamaan (3) ke dalam persamaan (2), kita akan menemukan persamaan
berikut ini.
d2 C
D e 2 −kC=0
dr (4)
Ini merupakan persamaan differensial orde kedua dan nilai batas dari persamaan differensial (4) ini
adalah
dC
=0
r = 0; dr (4a)
dan
r = R; C = C0 (4b)
Contoh kedua dari problema nilai batas adalah perpindahan kalor untuk suatu kawat tipis yang
panjang sekali. Jika kawat tidak diisolasi sepanjang arah panjang dan system yangterjadi adalah
system tunak (lihat Gambar 2), maka persamaan yang dihasilkan adalah:
d2 T
+hr ( T a−T ) =0
dx 2 (5)
Di mana hr adalah koefisien kehilangan kalor karena radiasi (cm 2) yang menjadi parameter bagi
disipasi kalor ke udara sekeliling dan Ta adalah suhu udara sekeliling dalam 0C.
Persamaan (1) dapat diselesaikan jika ada kondisi batas yang memadai. Dalam kasus yang diberikan
dalam Gambar 2
Ta
T1 T2
Ta
. x=0 x=L
Gambar 2. Kawat uniform yang tidak berisolasi yang ditempatkan di antara dua objek dengan
suhu T1 dan T2. Temperatur disekeliling kawat adalah Ta.
Dari Gambar 2 ini kita dapat melihat bahwa kondisi batas untuk persamaan differensial (5) diberikan
oleh:
T(0) = T1 (5a)
dan
T(L) = T2 (5b)
Problema defleksi batang dengan penampang persegiempat yang mengalami pembebanan secara
uniform. Kedua ujung batang disangga sehingga di ujung-ujung batang tersebut tidak terjadi defleksi.
Untuk itu perhatikan Gambar 3.
Dalam Gambar 3 ini, defleksi pada jarak x dinyatakan oleh y ( x ) diukur dari ujung sebelah kiri
batang, y(x) dapat dihitung dengan persamaan diferensial berikut.
d2 y ( x ) S qx
2
= y ( x )+ ( x−l )
dx EI 2 EI (6)
S 0 l S
y (x )
dengan l, q, E, S dan I masing-masing menyatakan banjang dari batang, intensitas dari beban uniform,
modulus elastisitas, regangan (stress) pada titik-titik ujung dan momen inersia sentral ada dua kondisi
batas yang terkait dengan persamaan diferensial ini yaitu asumsi yang menyatakan bahwa tidak ada
defleksi di kedua ujung batang, y(0) = y(l)=0.
Bila batang mempunyai ketebalan yang sama, hasil kali EI akan konstan, dan solusi eksak secara
analitis dengan mudah ditemukan. Dalam kebanyakan aplikasi, kenyataan seperti ini tidak terjadi
karena pada kenyataannya tebal dari batang tidak uniform sehingga momen inersia sentral tidak
konstan, melainkan merupakan fungsi dari x, jadi untuk ini diperlukan teknik hampiran perlu
dikembangkan.
Semua problema nilai batas yang kita temui di atas, seperti problema-problema nilai batas lainnya
dapat dinyatakan dalam bentuk persamaan umum berikut ini.
2
d y dy
dx 2 (
=f x , y ,
dx ) , a≤x≤b (7)
Dengan kondisi-kondisi batas
y(a )=α , dan y(b )=β. (8)
Teorema berikut ini, memberikan kondisi-kondisi umum yang menjamin jawaban dari suatu problema
nilai batas orde kedua ada dan unik.
Teorema 1. Katakanlah bahwa fungsi f dalam problema nilai batas orde kedua yang diberikan oleh
persamaan (7) dan (8) kontinu pada himpunan D dengan
dy dy
{(
D= x , y ,
dx )
|x≤x≤b ,−∞< y <∞ ,−∞< <∞
dx }
dy ∂f ∂f
dan bahwa turunan parsial pertamanya terhadap y dan dx , yaitu ∂y dan ∂ y' juga kontinu
dalam D. Jika
∂f ∂ dy
a. ∂y (
x, y ,
dx
>0 )
untuk semua
( x , y , dydx )∈ D dan
b. Ada suatu konstanta M dengan
∂f ∂ dy
|
∂y (
x, y ,
dx )
|≤M
untuk semua
( x , y , dydx )∈ D
Maka problema nilai batas ini mempunyai jawaban yang unik.
dy
Jika
(
f x, y ,
dx ) dapat dinyatakan dalam bentuk
dy dy
(
f x, y ,
dx )
= p ( x ) +q ( x ) y+r ( x )
dx
Maka persamaan differensial (7) dan (8) dapat ditulis kembali sebagai
d2 y dy
= p (t ) +q(t ) y+r (t ),
dt 2 dt a≤t≤b , y(a )=α , y(b)=β. (9)
Persamaan (9) ini disebut sebagai problema nilai batas yang linear. Tipe persamaan differensial ini
sangat sering ditemukan dalam penerapannya. Dan jika hal ini dijumpai maka Teorema 1 perlu
disederhanakan. Akibat dari Teorema 1 untuk problema linear dapat ditulis sebagai berikut.
Akibat 1. Jika problema nilai batas linear dinyatakan oleh persamaan (9) memenuhi:
Dalam Bab ini kita akan membicarakan solusi bagi problema nilai batas jenis ini dan juga untuk
problema nilai batas yang tidak linear. Dan kita akan mulai dengan yang pertama, yaitu problema nilai
batas linear.
Dalam bagian ini akan kita bahas dua cara yang yang digunakan untuk menyelesaikan problema nilai
batas, yaitu metoda pembidikan (“shooting” method) dan metoda beda hingga.
Untuk menghampiri penyelesaian unik yang dijamin oleh hipotesis yang diberikan dalam Akibat 1
dari Teorema 1 di atas, pertama-tama perhatikanlah problema nilai awal yang diberikan dalam
persamaan (9), yang digantikan oleh dua problema nilai batas ini.
2
d y dy
= p (t ) + q( x ) y +r ( x ) ,
dx 2 dt a≤x≤b , y(a )=α , y' (a)=0. (10)
dan
d2 y dy
= p (x ) +q( x ) y ,
dx 2 dx a≤x≤b , y(a )=0, y(b)=1. (11)
Problema yang dinyatakan oleh persamaan (10) dan (11), kedua-duanya masing-masing mempunyai
solusi yang unik. Jika y1(x) adalah solusi dari problema nilai batas yang diberikan dalam persamaan
(10) dan y2(x) adalah solusi dari problema nilai batas yang diberikan dalam persamaan (11), maka kita
akan dengan mudah memperoleh
β− y 1 ( b )
y ( x )= y 1 ( x ) + y2 ( x)
y2 ( b ) (12)
Merupakan solusi unik untuk problema nilai batas yang kita punyai, ini meyediakan bagi kita, bahwa
y2(b) ≠ 0 dan bahwa bila y2(b) = 0 akan berkonflik dengan hipotesis yang diberikan dalam Akibat 1.
Metoda pembidikan atau sooting method untuk problema nilai batas yang linear didasarkan atas
penggantian problema nilai batas yang diberikan dalam persamaan (9) dengan persamaan-persamaan
(10) dan (11). Banyak metoda yang telah disiapkan dalam Bab (Persamaan Diferensial dengan nilai
awal) untuk menghampiri solusi dari y1(x) dan y2(x). Ketika kita menggunakan salah satu dari metoda
yang disediakan di Bab, maka kita akan bisa memperoleh solusi dari problema nilai batas dengan
penghampiran menggunaan persamaan (12).
β
β− y 1 ( b )
y ( x )= y 1 ( x ) + y2 ( x)
y2(x) y2 ( b )
y2(x)
α
x
a b
Gambar 4.
Kita sekarang dapat menyusun algoritma pembidikan ini dengan menggunakan metoda Runge-Kutta
orde keempat sebagai dasar.
1
[
k v =h v 2 ,i + k 1,2 ;
2,1 2 ]
h 1 h 1 h
k v =h p x+
2,2 [ ( )(
2
v2 , i + k 1,2 +q x+
2 2 ) ( )(
v 1 ,i + k 1,1 +r x+
2 2 ) ( )]
;
1
[
k v =h v 2 ,i + k 2,2 ;
3,1 2 ]
h 1 h 1 h
v
k =h p x+
3,2 [ ( )( v + k +q x+
2 2 , i 2 2,2 2 ) ( )(
v 1 ,i + k 2,1 +r x +
2 2
; ) ( )]
1
[
k v =h v 2 ,i + k 3,2 ;
4,1 2 ]
k v =h p x +
4,2 [ ( h2 )( v 2 ,i
1
) ( )(
+ k 3,2 +q x+
2
h
2
1
) ( )]
v 1 , i + k 3,1 +r x +
2
h
2
;
1 v v v v
v 1 , i+1 =v i + k +2 k +2 k +k ;
( )
6 1,1 2,1 3,1 4,1
1 v v v v
v 2 , i+1 =v i + k + 2k 2,2 +2 k 3,2 +k 4,2 ;
( )
6 1,2
Step 4. Hitung:
w
k 1,1 =hw2 , i ;
k w =h [ p ( x ) w2 ,i +q ( x ) w1 ,i +r ( x ) ] ;
1,2
1
[
k w =h w2 , i + k 1,2 ;
2,1 2 ]
h 1 h 1 h
w
k 2,2
[ ( )(
=h p x +
2
w2 , i + k 1,2 +q x+
2 2 ) ( )(
w 1, i + k 1,1 +r x+
2 2
; ) ( )]
1
[
k w =h w2 , i + k 2,2 ;
3,1 2 ]
w
[
k 3,2 =h p x+ ( h2 )(w 2 ,i
1
) ( )(
+ k 2,2 +q x+
2
h
2
1
w 1 ,i + k 2,1 +r x+
2
h
2
;) ( )]
1
[
k w =h w 2, i + k 3,2 ;
4,1 2 ]
h 1 h 1 h
4,2 [ ( )(
k w =h p x +
2 2 ) ( )( w
w2 ,i + k 3,2 +q x +
2 1 ,i
2 ) ( )]
+ k 3,1 +r x+
2
;
1 w w w w
w 1, i+1 =w i + ( k +2 k +2 k +k ) ;
6 1,1 2,1 3,1 4,1
1 w w w w
w 2, i+1 =w i + ( k 1,2 +2 k 2,2 +2 k 3,2 +k 4,2 ) ;
6
Step 5. Apakah i = N – 1 ? Jika tidak naikkan counter looping satu poin dan kembali ke step 2
Beta−v 1, N
^y 1,0 =alpha ; ^y 2,0 =
Jika ya, Set w1 , N ; j = 1;
^y ^y
Keluaran (a, 1,0 , 2,0 )
Step 6. Hitung
y^ 1, j=v 1, j + ^y 2,0 w1 , j ;
^y 2, j=v 2 , j + ^y 2,0 w2 , j ;
x i=a+ih;
Keluaran ( x i , ^y 1, j , ^y 2 , j )
Step 7. Apakah j = N? Jika tidak, naikkan counter looping j satu poin dan kembali ke step 6.
Jika ya, computasi selesai. STOP dan keluar dari algoritma
Dalam bagian ini kita akan membicarakan mengenai metoda beda hingga dalam penyeleaian numerik
terhadap suatu persamaan diferensial biasa berorde dua dengan nilai batas. Metoda ini lebih stabil
ketimbang metoda tembakan (shooting method) yang akan dibicirakan dalam bagian ke-3 dan ke-4
dalam bab ini. Metoda-metoda yang diberikan dalam bagian ini mempunyai karakteristik stabilitas
yang baik tetapi secara umum membutuhkan lebih banyak usaha untuk mencapai akurasi tertentu.
Metoda beda hingga yang digunakan untuk menemukan solusi numerik dari problema nilai batas ini
adalah penghampiran beda hingga seperti yang diuraikan panjang lebar dalam Bab 2.
Suatu persamaan diferensial orde kedua linear yang merupakan problema nilai batas, dapat secara
umum ditulis sebagai berikut.
d2 y dy
= p (x ) +q( x ) y +r ( x ),
dx 2 dx a≤x≤b , y(a )=α , y(b)=β.
(1)
Karena kita akan menggunakan konsep beda hingga untuk mendapatkan bentuk jawaban numerik dari
persamaan (1), maka beda hingga pertama dan kedua yang akan digunakan dan untuk memungkinkan
hal itu maka kita perlu mengambil suatu bilangan bulat positif N dan kemudian membagi interval [a,
b] menjadi (N +1) s subinterval yang sama, yang setiap titik ujung dari tiap subinterval adalah
x i=a+ ih , untuk i = 0, 1, …, N + 1, dimana h = (b – a)/(N + 1). Dengan mengambil h yang
konstan dengan cara ini, akan memungkinkan kita menggunakan konsep matriks yang telah dibahas
dalam Bab , yang dibutuhkan untuk menyelesaikan system persamaan linear yang melibatkan matriks
yang berukuran N × N.
d2 y dy
2
( x i )=p ( xi ) ( x i )+q ( xi ) y ( xi )+r ( x i )
dx dx (2)
Dengan mengambil deret Taylor yang diperluas hingga orde ke-tiga sekitar titik interior mesh di
sekitar x i yang dievaluasi pada x i+1 dan x i−1 kita akan mempunyai persamaan berikut ini.
2 2 3 3 4 4
dy h d y h d y h d y
y ( x i+1 )= y ( x i +h )= y ( x i )+h (x i )+ 2
( xi )+ 3
( x i )+ (ξ )
dx 2 dx 6 dx 24 dx 4 i+ (3)
ξ+ ξ+
Untuk harga-harga i , xi < i < x i+1 , dan
dy h2 d 2 y h3 d 3 y h4 d 4 y
y ( x i−1 )= y ( xi −h )= y ( x i )−h ( x i )+ ( x )− ( x )+ (ξ ),
dx 2 dx 2 i 6 dx 3 i 24 dx 4 i− (4)
ξ− −
x i−1 <ξ i < x i , dengan menganggap bahwa
Untuk beberapa nilai i dalam interval
dy
4
y ∈ C [ x i−1 , xi+1 ]. Jika persamaan-persamaan ini dijumlahkan, suku-suku yang melibatkan dx
3
d y
dan dx 3 yang dieliminir, dan dengan suatu operasi aljabar sederhana akan memberikan
d2 y 1 h2 d 4 y d4 y
( x )= [ y ( x )−2 y ( x )+ y ( x )]− [ (ξ )+ (ξ )].
dt 2 i h2
i+1 i i−1
24 dx 4 i+ dx 4 i− (5)
Dengan menggunakan teorema nilai antara, akan menyederhanakan persamaan ini lagi. Dan kita
memperoleh
d2 y 1 h2 d 4 y
( x i )= [ y ( x i +1 )−2 y ( x i )+ y ( x i−1 )]− (ξ i ),
dt 2 h2 12 dx 4 (6)
dy
Suatu formula beda hingga terpusat (centered -difference formula) untuk bisa diperoleh dengan dx
cara yang sama seperti yang telah kita bicarakan dalam Bab , mengenai diferensiasi dan integrasi
numerik dan memberikan hasil
2 3
dy 1 h d y
( x i )= [ y (x i+1 )− y ( xi−1 )]− (η ),
dt 2h 6 dx 3 i (7)
Dengan menerapkan formula beda hingga terpusat yang telah kita peroleh di persamaan-
persamaan (6) dan (7) pada persamaaa (2) akan membawa membawa kita kepada persamaan berikut
ini.
h2 d3 y d4 y
+r ( x i )−
12
[ 2 p( x i )
dx 3 (
( η i )−
dx 4
( ξ i )]
) (8)
2
Suatu metoda berhingga dengan galat pemendekan dengan orde O( h ) dihasilkan dengan
menggunakan persamaan (8) bersama kondisi-kondisi batas y(a )=α dan y(b )=β untuk
mendefinisikan
^y 0 =α ^y N +1 =β
dan
Dalam bentuk yang lebih representative kita harus menyusun kembali persamaan (9) dalam
bentuki
h h
( ) ( )
− 1+ p (x i ) ^y i−1 +(2+h2 q ( xi )) ^y i− 1− p ( xi ) ^y i+1=−h2 r( x i )
2 2 (10)
Persamaan (10) ini akan menghasilkan system persamaan linear yang ditandai oleh matriks
tridiagonal seperti yang ditunjukkan oleh persamaan berikut ini
T ^y =d (11)
dengan
h
2+ h2 q ( x1 ) −1+ p x 0 0 0 .. .. 0
2 ( 1)
[ ]
h h
−1+ p x 2+h 2 q ( x 2 ) −1+ p x 0 0 .. .. 0
2 ( 2) 2 ( 2)
h h
0 −1+ p x 2+h2 q ( x3 ) −1+ p x 0 .. .. 0
T= 2 ( 3) 2 ( 3)
0
h
−1+ p ( x N −1 )
2
h 2
0 0 0 −1+ p ( x N ) 2+ h q ( x N )
2
(12)
h
−h2 r ( t 1 ) + 1+ ( p ( x 1 ) ^y 0 )
[] [ ]
2
y^ 1 −h2 r ( x 2 )
^y 2 −h2 r ( x 3 )
^y 3 d= .
^y = . .
. −h 2 r ( x N−1 )
^y N−1 h
y^ N
−h2 r ( x N ) + 1+( 2 )
p ( x N ) ^y N +1
dan (13)
Teorema berikut ini, membantu kita untuk melihat kondisi di mana system linear tridiagonal (11)
mempunyai solusi yang unik. Buktinya merupakan konsekwensi dari Teorema .
Teorema
Anggaplah bahwa p(x), q(x), and r(x) adalah fungsi-fungsi yang kontinu pada interval [a, b]. Jika q(x)
¿ 0 pada interval [a,b], maka system linear tridiagonal yang diberikan dalam persamaan (11)
mempunyai jawaban yang unik dengan h < 2/L dimana L=maxa≤x≤b|p( x)|
Yang perlu kita catat bahwa hipotesis yang diberikan dalam teorema ini menjamin suatu
solusi yang unik pada problema nilai batas dalam persamaan (1), tetapi tidak menjamin bahwa
4
d y
4
y∈C [a,b] . Kita perlu menemukan bahwa bahwa perlu untuk menentukan bahwa dx 4 kontinu
2
pada interval [a, b] agar dapat menjamin bahwa galat pemenggalan mempunyai orde O(h ) .
Algorithm 2.
Algoritma ini digunakan untuk menghampiri solusi dari problema kondisi batas
2
d y dy
= p (x ) +q( x ) y +r ( x ),
dx 2 dt a≤x≤b , y(a )=α , y(b)=β.
INPUT titik-titik ujung a, b; kondisi-kondisi awal α , β ; bilangan bulat N.
OUTPUT nilai hampiran dari ^y i atas
y ( ti )
untuk setiap i = 0, 1, …, N + 1.
Step 1 Hitung lebar subinterval h, elemen baris pertama dari matrix T dan elemen pertama d
h = (b - a)/(N + 1);
x = a + h;
2
a1 = 2 + h q(x);
c1 = -1 +(h/2)p(x);
2
d1 = - h r(t)+(1+(h/2)p(x)) α .
Set i = 2
Step 2 Hitung elemen baris ke-I dari matrix T dan elemen ke-I dari vektor d
x = a + ih
2
ai =2+h q ( x ) ;
bi =−1+(h /2) p (x );
c i=−1−(h /2) p (x );
d 1 =−h2 r ( x ) .
Step 3. Apakah i = N – 1?
Jika tidak, naikkan counter looping I satu point, yaitu I = I + 1 dan kembali ke step 2.
Jika ya, lanjutkan ke Step 4
Pada kenyataannya problema-problema fisika dan fisiko-kemikal tidaklah selalu linear bahkan banyak
di antaranya yang tidak linear. Dalam Bagian ini kita akan membahas mengenai
d2 y dy
=f ( x , y , ),
dx 2 dx a≤x≤b , y (a )=α , y(b )=β (9)
Kelihatannya mirip dengan pada kasus linear tetapi dengan pengecualian bahwa penyelesaian untuk
kasus yang tidak linear tidak dapat diekspresikan secara sederhana seperti yang dilakukan untuk kasus
linear. Untuk problema yang tidak linear ini, penyelesaiannya tidak dapat dinyatakan sebagai suatu
kombinasi linear dari dua dari solusi untuk problema nilai awal. Dan untuk itu kita perlu mengambil
strategi lain, yaitu menggunakan penyelesaian-penyelesaian untuk suatu sekuens dari probleman nilai
awal dengan bentuk berikut.
d2 y dy
=f ( x , y , ),
dx 2 dx a≤x≤b , y (a )=α , y' (a )=γ , (10)
Yang melibatkan suatu parameter γ yang digunakan untuk menghampiri penyelesaian dari persamaan
differensial orde kedua dengan nilai batas yang kita tinjau. Untuk itu kita memilih parameter γ = γk
dengan cara sedemikian sehingga kita dapat menjamin bahwa limit
lim y ( b , γ k )= y ( b )= β ,
k →∞ (11)
dimana y (t , γ k ) adalah solusi dari problema nilai awal yang dinyatakan oleh persamaan (10)
dengan γ=γ k and y(t) menyatakan solusi dari problema nilai batas pada persamaan (9).
Metoda ini disebut metoda metoda “tembak” karena metoda ini menggunakan prosedur yang analog
dengan prosedur penembakan terhadap suatu objek yang diam. Gambar 4 mengilustrasikan hal ini.
Jika y(b, t0 ) tidak cukup dekat dengan β , maka kita perlu berusaha untuk mengoreksi hampiran
yang diambil dengan menentukan elevasi yang lain, yaitu
t1 dan begitu seterusnya, hingga
y(b , t k ) cukup dekat untuk mengenai β .
Untuk menentukan bagaimana caranya menentukan parameter-parameter k dipilih, kita
t
mulai dengan menganggap suatu problema nilai batas seperti yang dinyatakan dalam bentuk seperti
yang ditunjukkan oleh persamaan (9) memenuhi hipotesis dari theorema 1 jika y(x,t) digunakan untuk
menyatakan solusi dari problema nilai awal yang dinyatakan oleh persamaan (10), maka problemanya
sekarang adalah untuk menentukan t sedemikian sehingga
Karena ini merupakan suatu persamaan tidak linear seperti yang kita bahas dalam Bab, maka ada
banyak metoda yang tersedia untuk menyelesaikannya. Kita akan menggunakan metoda sekan untuk
menyelesaikan problema yang dinyatakan oleh persamaan (10.13). Ini mengisyaratkan agar kita
t t
memilih nilai-nilai hampiran awal 0 dan 1 dan kemudian menyelesaikan suku-suku yang lain
secara berurutan dengan menggunakan persamaan:
( y (b , γ k −1 )− β )(γ k−1 −γ k −2 )
γ k =γ k −1 − ,
y (b , γ k−1 )− y (b , γ k −2 ) k = 2,3,…
Jika kita ingin menggunakan metoda Newton-Raphson yang lebih berdaya untuk
menghasilkan barisan {γ k } , hanya satu nilai awal yang diperlukan, yaitu γ 0 . Itu berarti
perhitungan atas dasar iterasi akan merujuk kepada persamaan berikut ini.
( y (b , γ k −1 )−β ) dy
θk =γ k −1 (dy/dγ )(b ,γ k−1 )≡ (b,γ k−1 ),
(dy /dγ )(b , γ k−1 ) dimana dγ (14)
Persamaan ini dapat dimulai dengan pengetahuan akan nilai (dy/dγ )(b , γ k −1 ) dan ini memberikan
kesulitan tersendiri karena representasi eksplisit untuk y(b,γ) tidak diketahui sebelumnya. Kita hanya
mengetahui harga-harga dari y(b ,γ 0 ) , y(b ,γ 1) , …, y(b, γ k −1 ) .
Sekarang, katakanlah bahwa kita menuliskan kembali problema nilai awal (10.10), dengan
menitikberatkan bahwa solusi bergantung kepada t dan γ:
d2 y dy dy
(t , γ )=f (t , y (t , γ ), (t , γ )), (a , γ)=γ ,
dt 2 dt a≤t≤b, y(a ,γ )=α , dt (15)
Dengan mempertahankan notasi prima untuk mengindikasikan differensiasi terhadap x. Karena kita
tertarik dalam menentukan (dy/dγ)(b,γ) ketika γ=γ k −1 , kita pertama-tama mengambil turunan
parsial dari (15) terhadap t. Yang mana ini mengimplikasikan bahwa
d2 y
∂
( )
dt 2
(t , γ )
∂f
(t , y(t ,γ ), y '(t ,γ ))
∂γ = ∂γ
=
∂f dy ∂t ∂ f ∂y
(t , y (t , γ ), (t , γ )) + (t , y (t , γ )) (t , γ )+
∂f dy
(t , y (t , γ ), (t , γ ))
∂ ( dydt ) (t , γ)
∂t dt ∂γ ∂ y ∂γ dy dt ∂γ
∂
dt ( )
Karena t dan γ tidak saling bergantungan, maka
∂ ( dydt ) (t , γ )
∂ ( dydt ) (t , γ) ∂f
∂γ
dy
dt
∂y
(t , y (t , γ ), (t , γ )) (t , γ )+
∂γ
∂f
dy
dy
(t , y (t , γ ), (t , γ ))
dt ∂γ
∂γ =
∂
dt ( )
Untuk a≤t≤b . kondisi awal akan memberikan
∂y
( a, γ )=0
∂ ( dydt ) (a , γ )=1
∂γ dan ∂γ
d2 z ∂ f dy ∂f dy dz
2
= (t , y , ) z+ (t , y , ) ,
dt ∂ y dt dy dt dt
∂
dt ( ) a≤t≤b , z(a) =0, z’(a) = 1 (17)
Dengan demikian metoda Newton-Raphson menghendaki dua problema nilai awal yang harus
diselesaikan untuk setiap iterasinya, yaitu method therefore requires that two initial-value problems
be solved o each iteration, Eqs. (10.10). Setelah itu dari persamaan (10.14),
y (b , γ k −1 )−β
γ k =γ k −1
z(b , γ k −1 ) (18)
Dalam prakteknya, tidak ada satupun dari problema-problema nilai awal ini diselesaikan secara eksak
dan sebagai gantinya solusi-solusi dihampiri dengan salah satu metoda yang telah dikembangkan
dalam Bab (Problema Nilai Awal). Dalam algoritma yang akan disusun, digunakan metoda Runge-
Kutta orde keempat untuk kedua solusi yang dibutuhkan oleh metoda Newton-Raphson.
Algorithm. Metoda Tembak untuk Problema Nilai Batas tidak Linear (Nonlinear Shooting)
Algoritma ini digunakan untuk menghampiri solusi dari problema nilai batas nonlinear
1
u2 =u2 + 6 ( k ' 1,2 +2 k ' 2,2 +2 k ' 3,2 +k ' 4,2 ) .
Step 7 if
|w 1, N −β|≤ TOL maka kerjakan step 8 dan 9.
Step 8 Untuk i = 0, 1, 2, …, N
Set x = a + ih;
OUTPUT
( x,w ,w ).
1,i 2 ,i
Step 9 ( Komputasi selesai.)
STOP.
w 1, N −β
Step 10 set
Teta=Teta−
u1
;
( )
(Metoda Newton-Raphson digunakan untuk mencari Teta.)
k = k + 1.
Step 11 OUTPUT (‘Jumlah maksimum iterasi dilewati’);
STOP.
Dalam step 7, penghampiran yang paling baik bagi β dapat kita harapkan untuk
n
w 1,N (tk ) adalah O(h ) jika metoda hampiran dipilih untuk step 6 memberikan laju konvergensi
n
sebesar O(h ) .
Nilai
t 0 yang dipilih dalam step 1 merupakan kemiringan dari garis lurus yang melalui
titik-titik (a,α ) dan (b, β) . Jika problema memenuhi hiptesis yang diberikan oleh teorema1,
t
setiap pilihan dari 0 akan memberikan konvergensi; tetapi secara umum prosedur akan bekerja
dengan baik untuk kebanakan problema dimana hipotesis ini tidak dipenuhi, namun demikian suatu
Walaupun demikian kita juga dapat menggunakan metoda Newton Raphson ketika teknik
penembakan (shooting technique) membutuhkan solusi dari suatu problema nilai awal tambahan,
metoda ini akan lebih cepat ketimbang metoda Secant. Kedua metoda ini hanya secara local
konvergen, karena metoda-metoda ini mensyaratkan hapiran awal yang baik ketika assumsi-assumsi
dari teorema 1 tidak berlaku.
2
d y dy
=f ( x , y , ), a≤x≤b , y (a )=α , y (b)=β
dx 2 dx (14)
Untuk persamaan diferensial (14), metoda beda hingga seperti yang digunakan menyelesaikan
problema nilai batas yang linear. Tetapi bagaimanapun disini persamaan yang akan diturunkan tidak
linear sehingga dibutuhkan proses iterative untuk menyelesaikannya. Untuk maksud pengembangan
metoda komputasi, kita perlu mengambil anggapan bahwa fungsi f memenuhi kondisi-kondisi berikut
ini.
pada
' '
D={( x , y , y )|a≤x≤b ,−∞< y<∞ ,−∞< y <∞}
Seperti yang telah kita lakukan untuk kasus linear, kembali lagi kita membagi interval [a,b] ke dalam
(N + 1) subinterval yang sama yang setiap titik akhir dari subinterval berada pada ti = a + ih untuk i
= 0,1,, N + 1. Dengan menganggap bahwa solusi eksak mempunyai batas di turunan keempat yang
memungkinkan kita untuk menggantikan turunan ketiga dan turunan kedua di titik-titik ti pada setiap
persamaan yang dinyatakan oleh persamaan diferensial berikut ini.
(10.29) d2 y dy
2
( x i )=f ( x i , y ( xi ), ( xi ))
dx dx
Dengan mengambil beda hingga terpusat bagi persamaan (10.24) dan (10.25), kita akan
memperoleh, untuk setiap i = 0, 1, 2, …, N
y ( x i+1 )−2 y ( x i )+ y (x i −1 ) y (x i +1 )− y ( xi −1 ) h2 d 3 y h2 d4 y
(10.30)
h2 (
=f x i , y ( x i ),
2h
−
6 dx 3
(η)i ) + (ξ )
12 dx 4 i
,
Seperti yang kita alami dalam kasus linear, metoda beda hingga akan memberikan hasil ketika suku
yang terkait galat dihapus dan kondisi batas digunakan:
^y 0 =α , ^y N +1 =β
dan
^yi+1 −2 y^ i + ^y i−1 ^y i+1 − ^y i−1
−
h2 (
+ f t i , ^y i ,
2h )
=0
y^ 2 −α
(
2 ^y 1 − ^y 2 +h2 f x1 , ^y 1 ,
2h
−α=0 , )
^y − ^y
(
− ^y 1 +2 ^y 2− ^y 3 +h2 f x 2 , ^y 2 , 3 1 =0 ,
2h )
⋮
^y − ^y
(
− ^y N −2 +2 ^y N−1 − ^y N +h2 f x N −1 , ^y N−1 , N N−2 =0 ,
2h )
(10.31) β− ^y N−1
(
− ^y N −1 +2 y^ N +h 2 f x N , ^y N ,
2h
−β=0 )
Akan mempunyai solusi yang unik untuk h h < 2/L, seperti yang telah dibuktikan dalam buku-buku
yang membahas secara khusus tentang problema nilai batas.
Agar kita dapat menghampiri solusi dari system ini, kita akan menggunakan metoda Newton untuk
menghitung system persamaan nonlinear seperti yang telah dibahas dalam Bab. Suatu barisan iterasi
{(w(1k ) , w(2k ) ,…, w(Nk ) )t } yang dihasilkan akan konvergen menuju solusi yang dari system
persamaan (10.31), dan berarti kita perlu menyediakan hampiran awal (w(10) , w(20) ,…, w(N0) )t yang
t
cukup dekat dengan solusi (w1 , w2 ,… , w N ) dan matriks Jacobian untuk system yang
didefinisikan dalam Eqs. (9.11), nonsingular. Perlu kita catat bagaimanapun, untuk system (10.31),
matriks Jacobian dalam (10.32) adalah matriks tridiagonal, dan asumsi yang diberikan pada awal
pembahasan ini menjamin bahwa J adalah suatu matrix nonsingular.
Metoda Newton untuk sistem nonlinear systems mensyaratkan bahwa pada setiap iterasi, system
linear N N
y^ 2 −α
J ( ^y 1 ,…, ^y N )( v1 ,…, v N )t =(2 ^y1 − ^y 2 + h2 f x 1 , ^y 1 , ( 2h ),
^y 3 − ^y 1
− ^y 1 +2 ^y 2 − ^y 3 +h 2 f x 2 , ^y 2 ,( 2h
,…, )
− ^y N −2 +2 ^y N −1 − ^y N
^y − ^y N−2
(10.31)
(
+h2 f x N −1 , y^ N−1 , N
2h
, )
β− ^y N−1
− ^y N −1 +2 ^y N +h 2 f x N , ^y N ,(2h
−β )T )
Diselesaikan untuk mendapatkan
(v 1 , v 2 ,…,v N ) dari persamaan
Karena J tridiagonal, algoritma Thomas dapat dengan mudah digunakan. Seluruh proses komputasi
diberikan secara ditil dalam algoritma berikut.
Algorithm 2.
Algoritma ini digunakan untuk menghampiri solusi dari problema kondisi batas
d2 y dy
= p (x ) +q( x ) y +r ( x ),
dx 2 dt a≤x≤b , y(a )=α , y(b)=β.
INPUT titik-titik ujung a, b; kondisi-kondisi awal α , β ; bilangan bulat N.
OUTPUT nilai hampiran dari ^y i atas
y ( ti )
untuk setiap i = 0, 1, …, N + 1.
Step 1. Hitung lebar subinterval h, dan masukkan nilai awal ke dalam hampiran awal dan nilai
akhir ke hampiran akhir
h = (b - a)/(N + 1);
y^ 0 =α
^y N +1 =β
Set i = 1
Step 2. Hitung
Step 3. Apakah i = N?
Jika tidak, naikkan counter I satu poin, yaitu I = I + 1 dan kembali ke Step 2.
Jika ya, lanjutkan ke Step 4.
Step 4.
x = a + h;
2
a1 = 2 + h q(x);
c1 = -1 +(h/2)p(x);
2
d1 = - h r(t)+(1+(h/2)p(x)) α .
Set i = 2
Step 2 Hitung elemen baris ke-I dari matrix T dan elemen ke-I dari vektor d
x = a + ih
ai =2+h2 q ( x ) ;
bi =−1+(h /2) p (x );
c i=−1−(h /2) p (x );
2
d 1 =−h r ( x ) .
Step 3. Apakah i = N – 1?
Jika tidak, naikkan counter looping I satu point, yaitu I = I + 1 dan kembali ke step 2.
Jika ya, lanjutkan ke Step 4
Step 4. Hitung elemen terakhir dari matrix T dan vektor d
x = b - h;
2
a N =2+ h q (x );
b N =−1−(h /2) p (x );
2
d N =−h r( x )+(1−(h/2 ) p( x ))β .
Step 5 Panggil Algoritma Thomas untuk menghitung vektor jawaban dari persamaan (11)
set i = 1
Step 6. Ubah vektor jawaban dari hasil perhitungan yang dilakukan metoda Thomas, yaitu
^y i=x i
Step 7. Apakah i = N?
Jika tidak naikkan counter i satu poin, yaitu i = i + 1 dan kembali ke step 6
Jika ya, set i = 0 dan lanjutkan ke step 8
Step 8. set x = a+ih;
OUTPUT (x, ^y i ).
Step 9. Apakah i = N + 1?
Jika tidak, naikkan counter i satu poin, yaitu i = i + 1 dan kembali ke step 8
Jika ya, STOP. (Komputasi selesai)
∂F f ( x+ Δx , y , z )−f ( x , y , z )
= lim
∂ x Δx→ 0 Δx , (1)
∂F f ( x , y + Δy ,z)−f ( x , y , z)
= lim
∂ y Δy→ 0 Δy , (2)
dan
∂F f ( x , y , z+ Δz)−f ( x , y , z )
= lim
∂ z Δy→ 0 Δz (3)
Sekarang akan diperlihatkan bagaimana mendapatkan persamaan perpindahan panas dalam tiga
dimensi. Untuk itu akan digunakan Gambar 1 untuk menurunkan persamaan tersebut
z Q(z+Δz)
Q(x+Δx)
P(x, y,z)
z
Q(y)
Q(y+Δy)
Δz Q(x)
Δx Q(z)
y y
Δy
x (a) (b)
Gambar 1
Dari Gambar ini terlihat kubus kecil dengan sisi-sisi sebesar x dalam arah x, y dalam arah y dan z
dalam arah z dimulai dari titik P(x,y,z). Untuk mem permudah analisis, pertama-tama kita mengkopi
kubus yang berkuran x×y×z dari Gambar 1.(a) ke 1.(b). Dalam Gambar 1.(b) ini kita melihat ada
tiga penjalaran masing-masing dalam arah x, y, dan z tiga buah sumbu yang memperlihatkan arah
penjalaran kalor
y z
Q(y+y) Q(z+z)
y+y z+z
y z
Q(y) Q(z)
x x+x x x+x
x x
x x
(a) (b)
Neraca Kalor elemen kubus dengan sisi-sisi masing-masing x, y, dan z, selama t
∂Q ∂ ∂T ∂2 T
= (Q )= ∂ k
∂z ∂z ∂z ∂z
=k 2
∂z ( ) (15)
Sekarang masukkan ketiga persamaan-persamaan terakhir ini, yaitu (13), (14) dan (15) ke dalam
persamaan (9), maka akan diperoleh
∂2 T ∂2 T ∂2 T ρc p ∂T
+ + =
∂ x2 ∂ y2 ∂ z2 k ∂ t (16)
Sekarang jika kita menganggap bahwa proses perpindahan kalor secara konduksi ini terjadi secara
steady state (tunak) , berarti jumlah kalor yang terakumulasi tidak ada, sehingga persamaan terakhir
ini kita tulis menjadi
∂2 T ∂2 T ∂2 T
+ + =0
∂ x2 ∂ y2 ∂ z2 (17)
Persamaan terakhir ini, yaitu persamaan (17) disebut persamaan Laplace. Jika temperatur dalam
daerah yang ditinjau ditentukan oleh distribusi temperatur pada batas dari daerah tersebut, maka
kendala (constraints) disebut sebagai kondisi batas Dirichlet dan diberikan oleh
Untuk semua pasangan (x, y) pada S, batas dari daerah R, seperti yang diberikan dalam Gambar 2.
y Jika kita meninjau kalor yang menjalar dalam
satu batang logam dengan panjang l, seperti
diperlihatkan dalam Gambar 3. Untuk problema
ini, dianggap temperatur merata dalam setiap
elemen crosssectional dan ini berarti batang
logam tersebut harus diisolasi dengan sempurna
(x, y) Suhu dipertahankan pada arah lateral, sehingga
2
pada g(x, y) derajat ∂T k ∂ T
=
∂t ρc p ∂ x 2 (19)
x
dan menggambarkan tabiat pada ujung dari batang logam. Sebagai contoh, jika temperatur di ujung-
ujung batang logam dibuat tetap pada T1 dan T2, maka kondisi batas akan mempunyai bentuk
T(0, t) = T1 dan T(l, t) = T2 (23)
Gambar 2.
Dalam aplikasinya, ada beberapa cara untuk mendapatkan persamaan (17) dalam bentuk dua dimensi,
yaitu
Jika bagian atas dan bawah kubus (arah z) diisolasi :
∂2 T ∂2 T
+ =0
∂ x2 ∂ y2
Jika bagian depan dan belakang kubus (arah y) diisolasi :
∂2 T ∂ 2 T
+ =0
∂ x2 ∂ z2
Jika bagian kiri dan kanan kubus (arah x) diisolasi :
2 2
∂T ∂ T
+ =0
∂ y2 ∂ z2
Contoh lain, apabila kita mengisolasi kalor sedemikian rupa sehingga tidak ada arah perambatan kalor
dalam arah z, maka kita juga akan memperoleh
∂2 T ∂2 T
+ =0
∂ x2 ∂ y2
Selain itu juga untuk suatu lembar logam tipis, akan memberikan model matematika seperti
yang ditunjukkan oleh persamaan berikut ini.
2 2
∂T ∂ T
+ =0
∂ x2 ∂ y2 (25)
Ini adalah persamaan Poison orde ke-2. Persamaan ini dapat diselesaikan secara numerik dengan
konsep beda hingga yang telah kita pelajari di Bab 1 dan dalam hal ini akan digunakan konsep beda
hingga maju dan untuk itu kita akan membuat Gambar 4 yang menyatakan distribusi titik-titik yang
yang menyatakan distribusi temperatur dalam bidang x-y. Dengan gambar ini dapat dibuatkan tabel
beda hingga seperti yang ditunjukkan oleh Tabel 1 dan Tabel 2 berikut ini.
( i+1 , j )
( i-1 , j) ( i+1 , j )
(i, j)
( i , j-1 )
Ti,j+1 Ti,j+1
Ti,j Ti,j
dan
2
∂2 T Δ T i+1 , j ΔT i , j −ΔT i+1, j (T i−1 , j −T i, j )−(T i , j −T i+1, j ) T i−1, j−2 T i, j +T i+1, j
2
≈ 2
= 2
= 2
= 2
∂y Δy Δy Δy Δy (27)
Dengan demikian,
2 2
Δ T x +Δ T y=0 (30)
dan
atau
Dari persamaan-persamaan yang terbentuk untuk setiap titik, kita akan memperoleh sistem persamaan
berikut.
– 4T1,3 + T2,3 + T1,2 = -175
– 4T2,3 + T1,3 + T3,3 + T2,2 = 100
T2,3 + 50 + T3,2– 4 T3,3 = -150
+ T2,2 + T1,1 + T1,3 – 4 T1,2 = - 75
(2,2)T1,2 + T3,2 + T2,1 + T2,3 – 4 T2,2 = 0
(3,2) T1,2 + T3,2 + T2,1 + T2,3 – 4 T2,2 = 0
(1,1) 75 + T2,1 + 0 + T1,2 – 4 T1,1 = 0
(2,1) T1,1 + T3,1 + 0 + T2,2 – 4 T2,1 = 0
(3,1) T1,1 + T3,1 + 0 + T2,2 – 4 T2,1 = 0
Sekarang kita melihat kembali ke persamaan (20). Persamaan ini adalah persamaan dari type
parabolik. Ini merupakan persamaan perpindahan kalor ataupun persamaan diffusi. Dan sekarang kita
akan menggantikan T dengan C untuk menyatakan konsentrasi
∂C ∂2 C
=α 2 2
∂t ∂x , 0 < x < l, t > 0 (20)
Dengan kondisi
Dan
Untuk menyelesaikan persamaan differensial ini akan digunakan metoda beda hingga dengan cara
memilih besar mesh masing-masing h untuk jarak dan k untuk waktu. Untuk jarak dibagi sebanyak m,
yaitu sehingga h = l/m. Posisi grid dalam keadaan seperti ini adalah (xi, tj), dimana xi = ih, untuk I=1,
2, …, m dan tj = jk untuk j = 1, 2, …
Dengan menggunakan deret Taylor kita menemukan beda hingga dalam t, yaitu
∂C C ( xi , t j + k ) −C ( x i , t j ) k ∂ 2
( x i ,t j )= − C x ,η
∂t k 2 ∂ t2 ( i j ) (21)
∂2 C C ( x i +h , t j ) −2 C ( x i , t j ) +C ( x i−h , t j ) k ∂ 2
x ,t =
2 ( i j)
− C ξ ,t
∂x h
2 2 ∂t 2 ( i j ) (22)
Dengan memasukkan persamaan (23) dan (24) ke dalam persamaan (25), kita akan memperoleh
2 α2 k k
(h h )
C^ i , j+1= 1− 2 C^ i , j +α 2 2 ( C^ i+1 , j −C^ i−1 , j )
(28)
harga dari
C^ 0,1 =C^ 0 ,m =0. Dengan demikian semua entri C^ i ,1 dapat ditentukan.
Persamaan beda hingga yang dperlihatkan dalam persamaan (28) memberikan kenyataan bahwa ada
( j−1 ) ( j)
matriks A vektor c dan vektor c sedemikian sehingga
( j) T
c =[ C^ 1 , j , C^ 2, j ,..., C^ m−1 , j ]
untuk j = 1, 2, … (31)
dan
( 1−2 λ ) λ 0 0 .. . 0
A=
[ 0
0
0
λ
0
0
( 1−2 λ )
0
0
0
λ
. .. .. .
λ
( 1−2 λ )
. . .. ..
. . .. ..
. . .. ..
0
0
λ
.. . .
.. . ..
.. . .
λ
.. . 0
.. . 0
.. . 0
.. .. . .
λ
( 1−2 λ )
] (32)
Berdasarkan persamaan-persamaan (29) hingga (32) kita dapat menyusun algoritma komputasi untuk
problema diffusi ini seperti yang ditunjukkan oleh Algoritma.
Algoritma untuk Komputasi persamaan diffusi dengan menggunakan metoda beda hingga maju.
Step 1. Masukkan persamaan differensial dan kondisi-kondisi batasnya, jumlah partisi yang diambil
untuk arah x dan t. Menghitung c(ii,0) = f(x(ii)). Untuk ii = 1, 2, …, m -1; sebagai berikut:
Step 1a. Set ii = 1
Step 1b. Set c(ii,0) = f(x(ii));
Step 1c. Apakah ii = m – 1, jika belum naikkan counter ii satu poin, yaitu ii = ii + 1 dan
Kembali ke Step 1b. Jika sudah ke Step 2.
Step 2. Menghitung elemen-elemen matriks A. Pertama Hitung lambda = sqr(alfa)*k/sqr(h);
kemudian hitung elemen diagonal yaitu diag = 1 – 2*lamda, dengan prosedur berikut.
Step 2a. Set ii = 1
Step 2b. Set A(ii,ii) = diag; A(ii+1, ii) = lambda; A(ii, ii+1) =lambda;
Step 2c. Apakah ii = m – 1, jika belum naikkan counter ii satu poin, yaitu ii = ii + 1 dan
Kembali ke Step 2b. Jika sudah ke Step 3.
Step 3. Persiapan awal untuk menghitung cc(ii) = A*cc(ii-1) dengan menggunakan persamaan (29)
dan ini dilakukan dengan mengkonversikan cc(0) = c(ii,0), yaitu dengan langkah-langkah
berikut ini:
Step 3a. Set ii = 1
Step 3b. Set cc(ii) = c(ii,0);
Step 3c. Apakah ii = m – 1, jika belum naikkan counter ii satu poin, yaitu ii = ii + 1 dan
Kembali ke Step 3b. Jika sudah ke Step 4.
Step 4. Hitung c(ii) = Ac(ii-1) dengan cara menghitungnya berdasarkan nilai sebelumnya, yaitu:
Step 4a. Set ii = 1
Step 4b. Set cc(ii) = c(ii,0);
Step 4c. Apakah ii = m – 1, jika belum naikkan counter ii satu poin, yaitu ii = ii + 1 dan
Kembali ke Step 4b. Jika sudah ke Step 5.
Step 5. Menghitung cc(ii) = Acc(ii-1) dengan cara sebagai berikut:
Step 5a. Set ii = 1;
Step 5b. Set jj = 1;
Step 5c. Set ca(ii) = 0;
Step 5b. Set ca(ii) = ca(ii) +cc(ii)*A(ii,jj);
Step 5c. Apakah jj = n – 1, jika belum naikkan counter ii satu poin, yaitu jj = jj + 1 dan
Kembali ke Step 5c. Jika sudah ke Step 5d.
Step 5d. Apakah ii = m – 1, jika belum naikkan counter ii satu poin, yaitu ii = ii + 1 dan
Kembali ke Step 5b. Jika sudah ke Step 5e.
Step 5e. Set ii = 1;
Step 5f. Set ca(ii) = ca(ii) +cc(ii)*A(ii,jj);
Step 5g. Apakah ii = n – 1, jika belum naikkan counter ii satu poin, yaitu ii = ii + 1 dan
Kembali ke Step 5c. Jika sudah ke Step 5d.
Dalam uraian di atas kita telah menggunakan teknik beda hingga maju. Sekarang kita akan
menggunakan metoda beda hingga mundur, yaitu
∂C C ( xi , t j )−C ( xi ,t j −k ) k ∂2
( x i ,t j )= − C x ,η
∂t k 2 ∂t 2 ( i j ) (33)
∂2 C C ( x i +h , t j ) −2 C ( x i , t j ) +C ( x i−h , t j ) k ∂ 2
x ,t =
2 ( i j)
− C ξ ,t
∂x h
2 2 ∂ t 2 ( i j) (34)
Sekarang kita menuliskan kembali persamaan (33) dan (34) dalam bentuk tik alas, yaitu
Δ C^ i , j Δ2 C^ i, j ∂Ci , j
2
Dimana k dan h adalah nilai-nilai penghampiran masing-masing terhadap ∂t
∂2 C i, j
2
dan ∂x .
Persamaan differensial (20) memberikan penjelasan kepada kita bahwa titik interior dari grid yang
terbentuk adalah (xi, tj) untuk setiap i = 1, 2, …, m – 1 dan j = 1, 2, …
Dengan memasukkan persamaan (35) dan (36) ke dalam persamaan (25), kita akan memperoleh
2α2k k
( h )
C^ i , j−1 = 1+ 2 C^ i , j −α 2 2 ( C^ i+1, j + C^ i−1, j )
h (40)
Seperti yang telah kita lakukan sebelumnya, berdasarkan persamaan (40) ini, kita dapat menyusun
sistem persamaan yang dinyatakan dalam matriks dan vektor seperti berikut ini.
( 1+2 λ ) 0 0 . .. 0 C^ 1 , j C^ 1 , j−1
[ ][ ] [ ]
−λ
C^ 2 , j C^ 2 , j−1
−λ ( 1+2 λ ) −λ 0 . .. 0
C^ 3 , j C^ 3 , j−1
0 −λ ( 1+2 λ ) −λ . .. 0 .. . . ..
= . ..
0 0 . .. . .. . .. . . .. . 0 .. .
0 0 . .. . .. . .. . . . .. . .. .. . . ..
0 0 . .. . .. . .. .
−λ .. . . ..
0 . .. . .. 0 −λ ( 1+2 λ ) C^
m−1 , j C^ m−1, j−1
(41)
Sama seperti yang kita sudah lakukan untuk matriks yang dinyatakan oleh persamaan (32), kita telah
mengambil λ = α2k/h2.
Karena persamaan (41) ini melibatkan matriks tridiagonal, maka kita dapat menggunakan metoda
Thomas untuk menyelesaikan sistem persamaan (41) ini. Dengan demikian kita dalpat menyusun
Algoritma untuk penyelesaian problema diffusi yang diberikan dalam persamaan (20) di atas seperti
yang ditunjukkan oleh Algoritma.
Algoritma untuk Komputasi persamaan diffusi dengan menggunakan metoda beda hingga maju.
Step 1. Masukkan persamaan differensial dan kondisi-kondisi batasnya, jumlah partisi yang diambil
untuk arah x dan t. Menghitung c(ii,0) = f(x(ii)). Untuk ii = 1, 2, …, m -1; sebagai berikut:
Step 1a. Set ii = 1
Step 1b. Set c(ii,0) = f(x(ii));
Step 1c. Apakah ii = m – 1, jika belum naikkan counter ii satu poin, yaitu ii = ii + 1 dan
Kembali ke Step 1b. Jika sudah ke Step 2.
Step 2. Menghitung elemen-elemen matriks A. Pertama Hitung lambda = sqr(alfa)*k/sqr(h);
kemudian hitung elemen diagonal yaitu diag = 1 – 2*lamda, dengan prosedur berikut.
Step 2a. Set ii = 1
Step 2b. Set A(ii,ii) = diag; A(ii+1, ii) = lambda; A(ii, ii+1) =lambda;
Step 2c. Apakah ii = m – 1, jika belum naikkan counter ii satu poin, yaitu ii = ii + 1 dan
Kembali ke Step 2b. Jika sudah ke Step 3.
Step 3. Persiapan awal untuk menghitung cc(ii) = A*cc(ii-1) dengan menggunakan persamaan (29)
dan ini dilakukan dengan mengkonversikan cc(0) = c(ii,0), yaitu dengan langkah-langkah
berikut ini:
Step 3a. Set ii = 1
Step 3b. Set cc(ii) = c(ii,0);
Step 3c. Apakah ii = m – 1, jika belum naikkan counter ii satu poin, yaitu ii = ii + 1 dan
Kembali ke Step 3b. Jika sudah ke Step 4.
Step 4. Hitung c(ii) = Ac(ii-1) dengan cara menghitungnya berdasarkan nilai sebelumnya, yaitu:
Step 4a. Set ii = 1
Step 4b. Set cc(ii) = c(ii,0);
Step 4c. Apakah ii = m – 1, jika belum naikkan counter ii satu poin, yaitu ii = ii + 1 dan
Kembali ke Step 4b. Jika sudah ke Step 5.
Metoda beda hingga mundur ini tidak memiliki persoalan stabilitas seperti pada metoda beda hingga
maju dan hal ini dapat dianalisis berdasarkan nilai-nilai eigen dari matriks A.
Kelemahan dari metoda beda hingga mundur ini datang dari kenyataan bahwa kesalahan pemendekan
lokal untuk metoda ini mempunyai porsi dari orde O(k) yang mengharuskan interval waktu harus jauh
lebih kecil dari interval spatial. Dan jelas ini akan membawa kita untuk memperlengkapi prosedur
perhitungan dengan galat pemendekan dari orde O(k2 + h2). Langkah pertama yang harus kita ambil
dalam arah ini adalah menggunakan persamaan beda hingga yang mempunyai galat adalah O(k2)
∂C
untuk ∂t ketimbang apa yang telah kita punyai sebelumnya, yaitu galat O(k) dan hal ini dapat
dilakukan dengan cara menggunakan deret Taylor dalam t untuk fungsi C(x, t) di titik (xi, tj) dan
dengan mengevaluasinya pada (xi, tj+1) dan (xi, tj-1) untuk mendapatkan formula beda hingga sentral
berikut ini.
Dengan memasukkan persamaan (42) dan persamaan (36) ke dalam persamaan (20) kita akan
memperoleh
C^ i, j+1 −C^ i, j−1 C^ i+1 , j −2 C^ i , j + C^ i−1, j
−α 2 =0
2k h2 (43)
Persamaan (43) adalah formula Richardson dan metoda ini mempunyai galat pemenggalan dari orde
O(k2+h2) tapi mempunyai problema stabilitas yang serius.
Suatu metoda yang lebih menjanjikan dapat diturunkan, yaitu dengan cara merata-ratakan beda hingga
maju pada langkah ke-j untuk waktu t. Metoda ini dinyatakan dalam persamaan:
k ∂2
ρ F= C x , η +O ( h2 )
2 ∂t 2 ( i j ) (45)
k ∂2
ρB =− C x , η^ +O ( h2 )
2 ∂t 2 ( i j ) (47)
Metoda ini dikenal dengan nama metoda Crank-Nicolson dengan galat pemenggalan sebesar
O(k2+h2). Kemudian berdasarkan persamaan (48) ini kemudian kita memperoleh sistem persamaan
linear
[ ]
2
λ λ
− ( 1+ λ ) − 0 .. . 0
2 2
λ λ
0 − ( 1+ λ ) − .. . 0
2 2
A=
0 0 . .. . .. .. .. .. .. 0
0 0 . .. . .. .. .. . .. .. .. . 0
0 0 . .. . .. .. .. λ
−
2
λ
0 . .. .. . 0 − (1+ λ )
2
, (50)
λ
( 1− λ ) 0 0 ... 0
[ ]
2
λ λ
( 1−λ ) 0 ... 0
2 2
λ λ
0 ( 1−λ ) ... 0
2 2
B=
0 0 .. .. . . . . .. . . .. 0
0 0 .. .. . . . . .. . . . .. ..
0 0 .. .. . . . . .. λ
2
λ
0 . .. .. . 0 ( 1−λ )
2
(51)
dan
T
c^ ( j )=[ C^ 1 , j , C^ 2, j ,..., C^ m−1 , j ]
(52)
Karena matriks A adalah suatu matriks tridiagona yang positif definit, simetris, dominan secara
diagonal dan tidak singulir, maka metoda Thomas atau metoda Gauss-Seidel yang dimodifikasi
(SOR), maka vektor c^ ( j+1 ) pada iterasi j+1 dapat hitung dari vektor c^ ( j ) pada perhitungan iterasi
ke-j sebelumnya.
Berdasarkan persamaan-persamaan (49) hingga (52) kita dapat menyusun Algoritma komputasi untuk
metoda Crank-Nicolson seperti yang ditunjukkan oleh Algoritma berikut ini.
Sekarang kita akan meninjau persamaan differensial dan dalam bagian ini akan kita carikan
penyelesaian dari suatu persamaan gelombang, yang dinyatakan oleh persamaan berikut ini.
∂2 v 2 ∂ 2 v
−α =0
∂t 2 ∂ x2 , 0 < x < l, t > 0 (53)
Dengan kondisi
dan
∂v
( x , 0 )=g ( x )
∂t
Sekarang, kita akan menyusun suatu prosedur komputasi berdasarkan metoda beda hingga dan untuk
itu kita akan memilih suatu bilangan bulat positif m dan panjang langkah waktu sebesar k. Sama
seperti pada penyelesaian persamaan differensial parsial parabolik, kita akan mengambil suatu harga
h sedemikian hingga h = l/m. Dengan demikian, titik-titik (xi, tj) dapat didefinisikan oleh
xi = ih, untuk i = 1, 2, …, m
dan
tj = jk, untuk j = 1, 2, …
Pada setiap titik interior, persamaan (53) dapat ditulis kembali sebagai
∂2 v 2
2∂ v
( x , t ) −α ( x , t ) =0
∂t 2 i j ∂ x2 i j , untuk i =1, 2, …, m dan j = 1, 2, … (54)
dan
Sekarang, dengan memasukkan persamaan (55) dan (56), ke dalam persamaan (54), akan diperoleh
persamaan berikut ini.
k2
−α 2
h2
=
12
k
(
∂ x4
v ( ξ ,
i jt ) +h
∂ x4
v ( xi , η j)
) (57)
atau
Selain itu juga dari kondisi batas kita dapat menyimpulkan bahwa
v^ i ,0 =f ( x i )
, untuk setiap i = 1, 2, …, m – 1 (62)
Sebelum kita beranjak ke komputasi yang dapat dilakukan dengan persamaan (60) ini, sekarang
perhatikan Gambar 6 berikut ini
( i , j+1 )
( i-1 , j) ( i+1 , j )
(i, j)
( i , j-1 )
Dari Gambar 6 ini, kita dapat menentukan turunan pertama dari dengan penghampiran beda hingga
maju, yaitu:
∂v v −v k 2 v^ − v^
( x i ,0 )= i ,1 i, 0 − ∂ 2 v ( x i , η j )≈ i, 1 i, 0
∂t k 2 ∂t k (63)
Dengan menyelesaikan persamaan (63) untuk mendapatkan
v i ,1 , kita dapat menuliskan:
∂v k 2
v i ,1 =v i, 0 +k ( x i , 0 ) + ∂ 2 v ( x i , η^ j )
∂t 2 ∂t
k 2
=v i , 0 +kg ( xi ) + ∂ 2 v ( xi , η^ j )
2 ∂t (64)
Jadi secara konsekwen kita harus menerima
v^ i ,1 = v^ i, 0 +kg ( x i )
, untuk setiap i =1, 2, …m - 1 (65)
Persamaan (60) dapat disusun dalam bentuk yang kompak sebagai berikut
v^ 1 , j+1 2 ( 1− λ2 ) λ2 0 0 .. . 0 v^ 1, j v^ 1, j−1
[ ][ ][ ] [ ]
v^ 2 , j+1 v^ 2, j v^ 2, j−1
λ2 2 ( 1−λ2 ) λ2 0 .. . 0
v^ 3 , j+1 v^ 3, j v^ 3, j−1
... 0 λ2 2 ( 1−λ2 ) λ2 .. . 0 .. . .. .
... = .. . − .. .
0 0 .. .. . . .. . . .. . . 0
... 0 0 .. .. . . .. . .. .. . .. .0 .. . .. .
0 0 .. .. . . .. . .
... λ2 .. . .. .
v^ m−1, j+1 0 . . .. .. 0 λ2 2 ( 1−λ 2 ) v^ m−1, j v^ m−1 , j−1
(66)
Jadi penyelesaian numerik dari persamaan (20) dapat dimulai dengan j = 1 dimana
v^ i ,0 dihitung
Algoritma.
Step 1. Masukkan kondisi-kondisi batas. Tentukan jumlah partisi pada x, yaitu m, jumlah partisi
dalam t, yaitu n. Set ma = m + 1 dan na = n +1
Step 2. Hitung h=l/m; k=t/n; lambda = alfa*k/h h=l/m
Step 3. Hitung elemen-elemen matriks: Hitung kwadrat = sqr(lambda); diag = 2*(1 – kwadrat);
Elemen-elemen diagonal dan elemen di atas dan di bawah diagonal
Step 3a. ii = 1
Step 3b. Set A(ii,ii) = diag; A(ii,ii+1) = lambda; A(ii +1,ii) = lambda;
Step 3c. Apakah ii = n? Jika tidak naikkan counter ii satu point yaitu ii = ii +1 dan kembali ke
Step 3b, jika ya ke Step 4
Step 4. Menghitung v(ii,0) = f(x(ii)) dengan persamaan , yaitu:
Step 4a. ii = 1
Step 4b. Set v(ii,0) = f(x(ii));
Step 4c. Apakah ii = n? Jika tidak naikkan counter ii satu point yaitu ii = ii +1 dan kembali ke
Step 4b, jika ya ke Step 5
v^ i ,1 = v^ i, 0 +kg ( x i )
Step 5. Menghitung , untuk setiap i = 1, 2, …m – 1 dengan persamaan
(65), yaitu:
Step 5a. ii = 1
Step 5b. Set v(ii,i) = v(ii,0)+ k*g(x(ii));
Step 5c. Apakah ii = n? Jika tidak naikkan counter ii satu point yaitu ii = ii +1 dan kembali ke
Step 5b, jika ya ke Step 6
Step 6. Menghitung v(ii, jj+1) untuk ii = 1 hingga m dengan persamaan (66)
Step 6a
Program Matlab:
na = n +1;
ma = m +1;
h = l/m;
fr = t/n
x(1) = 0;
for ii = 2: na
x(ii) = x(1) + (ii-1)*h
end
t(1) = 0;
for ii = 2: ma
t(ii) = t(1) + (ii-1)*fr
end
for ii = 1: na
y(ii,1) = feval(‘f1’,x(ii));
dy(ii,1) = 0;
end
y(1, 1:ma) = 0;
y(na, 1:ma) = 0;
Dari persamaan (63) kita dapat melihat bahwa (65) memberikan suatu penghampiran yang
mempunyai galat pemenggalan lokal hanya O(k). Suatu penghampiran yang paling baik untuk
menghitung vi,0 dapat diperoleh dengan mudah, khususnya bila turunan kedua dari f di xi dapat
ditentukan. Sekarang perhatikan
v i , 1 −v i ,0 ∂v k 2 k 2 ∂3 v
= ( x i ,0 ) + ∂ 2 v ( xi , 0 ) + x , η^
k ∂t 2 ∂t 6 ∂t 3 ( i i ) (67)
Untuk 0 < η^ i < t1 dan anggap bahwa persamaan gelombang juga berlaku untuk garis awal, yaitu
∂2 v 2
2∂ v
( x , 0 ) −α ( x , 0 )=0
∂t 2 i ∂ x2 i , untuk i =1, 2, …, m (68)
∂2 v 2
2∂ v
2
2d f
x
2 ( i
, 0 ) =α x
2( i
, 0 )=α x =α 2 f '' ( x i )
2 ( i)
∂t ∂x ∂x (69)
Dengan mensubstitusika persamaan ini ke dalam persamaan (67) dan selanjutnya diselesaikan untuk
vi,1 akan memberikan
α2 k 2 k 2 ∂3 v
v i ,1 =v i, 0 + kg ( x i ) + f '' ( xi ) + ( x , η^ )
2 6 ∂t 3 i i (70)
Ini merupakan suatu penghampiran dengan galat pemenggalan lokal O(k2) untuk i = 1, 2, …, m – 1.
Jika f ∈ C4[0, 1] tetapi f’’(xi) tidak segera tersedia kita dapat menggunakan Teorema nilai antara
untuk menuliskan
f ( x i+1 ) −2 f ( x i ) + f ( x i−1 ) h 2 ( 4)
f '' ( x i ) = 2
− f (ξ i )
h 12 (72)
Untuk xi-1 < ξ i < xi, dan ini mengimplikasikan bahwa penghampiran dapat ditulis sebagai
v i, 1 −v i ,0 kα 2
=g ( x i ) + f x −2 f ( x i ) +f ( x i−1 ) ] +O ( k 2 + h2 k )
2 [ ( i+1 )
k 2h (73)
αk
λ= ,
Sekarang, dengan mengambil h kita akan memperoleh persamaan berikut ini.
λ2
v i ,1 =v i, 0 + kg ( x i ) +f ( x ) −2 f ( x i ) + f ( x i−1 ) ] +O ( k 3 +h 2 k 2 )
2 [ i+1
λ2 λ2
= (1−λ ) f ( x i ) + f ( x i+1 ) + f ( x i−1 ) + kg ( x i ) +O ( k 3 +h2 k 2 )
2 2 (74)
2 2
λ λ
v^ i ,1 =( 1− λ ) f ( x i ) + f ( xi+1 ) + f ( xi−1 ) +kg ( xi )
2 2 (75)