Anda di halaman 1dari 11

I.

TUJUAN
1. Memahami tentang algoritma pemrograman dan mampu menerapkannya
dalam pemrograman Scilab.
2. Mampu menerjemahkan algoritma proses komputasi tertentu menjadi
program dalam Scilab.
II. ANALISA
Dengan fasilitas pemrograman yang disediakan Scilab, kita dapat membuat
sebuah program berdasarkan algoritma proses komputasi tertentu. Dengan
menggunakan editor dalam Scilab, yaitu Scipad, program dapat dibuat
dengan bahasa yang lebih mudah lalu disimpan dengan ekstensi *.sci.
Kemudian program dapat dieksekusi pada jendela Scilex.
1. Program Faktorisasi Doolittle
Faktorisasi Doolittle adalah faktorisasi suatu matriks menjadi matriks lower
triangle (L) dan matriks upper triangle (U) berdasarkan proses komputasi
milik Doolittle. Proses komputasi ini hanya berlaku pada matriks bujur
sangkar. Matriks yang akan difaktorisasi harus memiliki elemen diagonal
0.
Program pertama
Pada percobaan ini, pada Scipad akan dituliskan program sebagai
berikut:
// nama program : mylu1
// program faktorisasi LU tanpa penukaran baris
function [l,u]=mylu1(a)
n=size(a,1)
a(2:n,1)=a(2:n,1)/a(1,1)
for k=2:n-1,
v=a(k,1:k-1)
for j=k:n,
w=a(1:k-1,j)
a(k,j)=a(k,j)-v*w
end
w=a(1:k-1,k)
for j=k+1:n,
v=a(j,1:k-1)
a(j,k)=(a(j,k)-v*w)/a(k,k)
end
end
a(n,n)=a(n,n)-a(n,1:n-1)*a(1:n-1,n)
l=tril(a,-1)+eye(n,n)
e=triu(a)
endfunction

Program ini akan langsung memecah suatu matriks A (nxn) menjadi


L*U ( A=LU ). Untuk memanggil program, pada Scilex diketikkan:
>A=[0134;5673;8134;7321]
A=
0.1.3.4.
5.6.7.3.
8.1.3.4.
7.3.2.1.

>getfmylu1.sci;
Warning:redefiningfunction:mylu1

>[l,u]=mylu1(A)
!error27
divisionbyzero...
atline3offunctionmylu1calledby:
[l,u]=mylu1(A)

Setelah program dipanggil, program akan langsung menghitung,


kemudian menampilkan hasil faktorisasi matriks. Program ini tidak
dapat memfaktorisasi matriks yang elemen diagonalnya = 0 karena
program didesain untuk memfaktorisasikan matriks tanpa penyesuaian
syarat operasi Doolittle sehingga muncul pesan error. Jadi, matriks
yang digunakan sebagai input program ini haruslah matriks yang
sudah memenuhi syarat. Matriks inputan di atas harus disesuaikan
dengan menukar baris matriks secara manual. Sehingga menjadi:
>A=[8134;0134;5673;7321]
A=
8.1.3.4.
0.1.3.4.
5.6.7.3.
7.3.2.1.

>getfmylu1.sci;
Warning:redefiningfunction:mylu1
>[l,u]=mylu1(A)
u=
8.1.3.4.
0.1.3.4.
0.0.11.21.
0.0.0.2.3636364
l=
1.0.0.0.
0.1.0.0.
0.6255.3751.0.
0.8752.1250.63636361.

Dari hasil perhitungan di atas dapat diperoleh:

1
0
0
0
1
0
A=LU=
0.625 5.375
1
0.875 2.125 0.6363636

][

][ ]

0 8 1
3
4
8 1
0 0 1
3
4
0 1

=
0 0 0 11
21
5 6
1 0 0
0
2.3636364
7 3

3
3
7
2

4
4
3
1

Apabila L dikalikan dengan U maka akan diperoleh A. Jika diamati, akan


tampak bahwa matriks L adalah matriks segitiga bawah, di mana
elemen-elemen diagonalnya = 1 dan elemen-elemen di atas
diagonalnya = 0. Sedangkan matriks U adalah matriks segitiga atas, di
mana elemen-elemen di bawah diagonalnya = 0.

Program kedua
Pada percobaan ini, pada Scipad akan dituliskan program sebagai
berikut:
// Nama program : mylu2
// Program faktorisasi Doolittle dengan penukaran baris
// sehingga l*u = p*a
function [l,u,p]=mylu2(a)
n=size(a,1)
r=1:n
[u,i]=max(abs(a(:,1)))
if i~=1,
x=a(1,:)
a(1,:)=a(i,:)
a(i,:)=x
s=r(1)
r(1)=r(i)
r(i)=s
end
a(2:n,1)=a(2:n,1)/a(1,1)
for k=2:n-1,
[u,i]=max(abs(a(k:n,k)))
j=i+k-1
if j~=k,
x=a(k,:); a(k,:)=a(j,:); a(j,:)=x;
s=r(k); r(k)=r(j); r(j)=s;
end
v=a(k,1:k-1)
for j=k:n,
w=a(1:k-1,j)
a(k,j)=a(k,j)-v*w
end
w=a(1:k-1,k)
for j=k+1:n,
v=a(j,1:k-1)
a(j,k)=(a(j,k)-v*w)/a(k,k)
end
end
a(n,n)=a(n,n)-a(n,1:n-1)*a(1:n-1,n)
l=tril(a,-1)+eye(n,n)
u=triu(a)
p=zeros(n,n)
for i=1:n,
p(i,r(i))=1
end
endfunction

Program ini akan memecah suatu matriks A (nxn) menjadi L*U=p*A.


Untuk memanggil program, pada Scilex diketikkan:
>A=[0134;5673;8134;7321]
A=
0.1.3.4.
5.6.7.3.
8.1.3.4.
7.3.2.1.

>getfmylu2.sci;


>[l,u,p]=mylu2(A)
p=
0.0.1.0.
0.1.0.0.
1.0.0.0.
0.0.0.1.
u=
8.1.3.4.
0.5.3755.1250.5
0.0.2.04651163.9069767
0.0.0.2.3636364
l=
1.0.0.0.
0.6251.0.0.
0.0.18604651.0.
0.8750.39534881.29545451.

Setelah program dipanggil, program akan memulai proses


penghitungan. Program ini akan memfaktorisasikan matriks dengan
operasi Doolittle tetapi melalui proses penukaran baris. Sehingga
matriks input tidak harus dikondisikan sesuai syarat operasi Doolittle
yaitu elemen diagonal tidak boleh = 0. Secara otomatis program akan
menukar baris sehingga elemen baris pertama kolom pertama adalah
yang terbesar pada kolom pertama.
Pertama-tama program akan mengecek apakah elemen terbesar kolom
pertama terletak pada baris pertama atau diagonal pertama. Jika tidak,
maka baris di mana elemen terbesar itu berada akan ditukar dengan
baris pertama. Selanjutnya program akan mengecek apakah elemen
terbesar kolom kedua terletak di baris kedua atau diagonal kedua. Jika
tidak, maka baris di mana elemen terbesar itu berada akan ditukar
dengan baris kedua. Dan seterusnya sampai semua diagonal dicek.
Sehingga diperoleh matriks yang diagonalnya tidak 0. Maka, setelah

penukaran

baris,

matriks

[ ]

0
5
A=
8
7

1
6
1
3

3
7
3
2

4
3
4
1

akan

menjadi

[ ]
8
5
0
7

1
6
1
3

3
7
3
2

4
3
4
1

Setelah itu, dilakukan operasi perhitungan yang sama persis dengan


program pertama. Kemudian ditambahkan dengan matriks p yang
merupakan matriks yang menunjukkan hasil pertukaran baris. Apabila
p dikalikan dengan a, maka hasilnya adalah matriks a setelah proses
penukaran baris. Dari hasil eksekusi program mylu2.sci di atas
diperoleh:

lu= pa

1
0
0
0.625
1
0
0
0.1860465
1
0.875 0.3953488 1.2954545

][

] [ ][ ]

0 8
1
3
4
0 0
0 0 5.375
5.125
0.5
0 1

=
0 0
0
2.0465116 3.9069767
1 0
1 0
0
0
2.3636364
0 0

1
0
0
0

0 0 1
0 5 6

0 8 1
1 7 3

Kemudian, ketikkan juga pada Scilex:

>[l,u,p]=lu(A)
p=
0.0.1.0.
0.1.0.0.
0.0.0.1.
1.0.0.0.
u=
8.1.3.4.
0.5.3755.1250.5
0.0.2.65116282.6976744
0.0.0.1.8245614
l=
1.0.0.0.
0.6251.0.0.
0.8750.39534881.0.
0.0.18604650.77192981.

Perintah tersebut adalah operasi faktorisasi matriks menjadi L dan U


dengan metode yang sudah disediakan oleh software Scilab.
Dari 3 metode di atas, program pertama, program kedua, dan program
dari Scilab dapat disimpulkan bahwa hal yang terpenting dalam
faktorisasi LU yaitu matriks input harus bujur sangkar dan diagonalnya
tidak boleh = 0.
2. Pemrograman Berdasarkan Algoritma
Percobaan kali ini akan membuat sebuah program dengan terlebih dahulu
menyusun algoritmanya. Kali ini program yang akan didesain adalah
berdasarkan metode Gauss. Yaitu, metode untuk menyelesaikan
persamaan perkalian matriks Ax=B.
Input : A dan B
Outpu : x atau pesan error jika A adalah matriks singular.
Algoritma Gauss
1. Untuk k=1 sampai n-1, kerjakan:
a. Tentukan j terkecil sehingga j k dan a jk 0
b. Jika j demikian tidak ada, munculkan pesan error Matriks singular,
solusi tidak ada dan stop
c. Jika j ada, tukarkan baris j dengan baris k dari matirks A
d. Untuk j=k+1 sampai n, kerjakan:
i. m = ajk/akk
ii. untuk p=k+1 sampai n+1, kerjakan:
1) ajp=ajp-m*akp
2) selesai

3
7
3
2

4
3
4
1

iii. selesai
2. Jika ann=0, maka tampilkan Tidak ada penyelesaian tunggal
3. Jika ann0, maka xn=an,n+1/ann
4. Untuk i=n-1 sampai i=1, kerjakan:

1
x i= a i ,n+1 aij x j
aii
j=i+1

5. Selesai
Program pada Scipad adalah:
function [x]=gauss(a,b)
A=[a b]
n=size(A,1)
for k=1:n-1,
j=k
while j<n & A(j,k)==0,
j=j+1
end,
if A(j,k)==0 then
error('tidak ada penyelesaian tunggal')
else
T=A(j,:); A(j,:)=A(k,:); A(k,:)=T
end,
for j=k+1:n,
m=A(j,k)/A(k,k)
for p=k+1:n+1,
A(j,p)=A(j,p)-m*A(k,p)
end,
end,
end
if A(n,n)==0 then
error('tidak ada penyelesaian tunggal')
else x(n)= A(n,n+1)/A(n,n)
end
for i=n-1:-1:1,
s=0
for j=i+1:n,
s=s+A(i,j)*x(j)
end,
x(i)=1/A(i,i)*(A(i,n+1)-s)
end
endfunction

Program di atas adalah program berdasarkan algoritma Gauss yang sudah


disebutkan sebelumnya. Program tersebut akan mencari peyelesaian matriks
x dari operasi penghitungan matriks Ax=B. Input adalah matriks A dan B.
Baris matriks B harus sama dengan baris matriks A.
Eksekusi program dalam Scilex:
>A=[8134;0134;5673;7321]
A=
8.1.3.4.
0.1.3.4.
5.6.7.3.
7.3.2.1.

>B=[16;8;21;13]

B=
16.
8.
21.
13.

>getfgauss.sci
Warning:redefiningfunction:gauss

>gauss(A,B)
ans=
1.
1.
1.
1.

Program di atas sama dengan operasi pembagian kiri matriks. Hasil


perhitungan Scilex adalah:
>x=A\B
x=
1.
1.
1.
1.

III.

KESIMPULAN
1. Pemrograman dalam Scilab sama halnya dengan pemrograman lain,
terdiri dari urutan, percabangan, dan perulangan.
2. Pemrograman Scilab dapat digunakan untuk menyelesaikan berbagai
masalah perhitungan yang sangat kompleks.
3. Metode faktorisasi LU hanya dapat dilakukan pada matriks bujur sangkar.
4. Metode Gauss digunakan untuk mencari penyelesaian x dari operasi
matriks Ax=B.

IV.

TUGAS
Flowchart:
1. Program Faktorisasi Doolittle
Program pertama

START
Read A
n=size(a,1)
a(2:n,1)=a(2:n,1)/a(1,1)
k=2

k >= n-1
v=a(k,1:k-1)
j=k

j >= n
w=a(1:k-1,j)
a(k,j)=a(k,j)-v*w
j=j+1

k=k+1
j>=n
v=a(j,1:k-1)

a(j,k)=(a(j,k)-v*w)/a(k,k)
j=j+1

a(n,n)=a(n,n)-a(n,1:n-1)*a(1:n-1,n)
l=tril(a,-1)+eye(n,n)
u=triu(a)
FINISH
Program kedua

START
Read A
n=size(a,1)
r=1:n
[u,i]=max(abs(a(:,1)))

x=a(1,:)
a(1,:)=a(i,:)
a(i,:)=x
s=r(1)
r(1)=r(i)
r(i)=s

i~=1

a(2:n,1)=a(2:n,1)/a(1,1)
k=2
k>=n-1

a(n,n)=a(n,n)-a(n,1:n-1)*a(1:n-1,n)
l=tril(a,-1)+eye(n,n)
u=triu(a)
p=zeros(n,n)
i=1

i >=n

[u,i]=max(abs(a(k:n,k)))
j=i+k-1
j ~=k

x=a(k,:); a(k,:)=a(j,:); a(j,:)=x;


s=r(k); r(k)=r(j); r(j)=s;
v=a(k,1:k-1)

w=a(1:k-1,k)

j >=n

FINISH

w=a(1:k-1,j)
a(k,j)=a(k,j)-v*w

j >=n

v=a(j,1:k-1)
a(j,k)=(a(j,k)-v*w)/a(k,k)

2. Pemrograman Berdasarkan Algoritma

w=a(1:k-1,k)

START
Read A

A=[a,b]
n=size(A,1)
k=1
error('tidak ada penyelesaian tunggal')

A(n,n)==0

k>=n

x(n)=A(n,n+1)/A(n,n)
i=n-1

j=k
j<n &A(j,k)==0

i<=1

s=0
j=j+1
j>=n
A(j,k)==0

error('tidak ada penyelesaian

s=s+A(i,j)*x(j)
T=A(j,:); A(j,:)=A(k,:); A(k,:)=T
x(i)=1/A(i,i)*(A(i,n+1)-s)

j>=n

m=A(j,k)/A(k,k)
P >=n+1
FINISH

A(j,p)=A(j,p)-m*A(k,p)