Rabu, 27 Maret 2013

Metode Gauss dan Implementasinya di Matlab


Metode Gauss-Seidel
Metode Gauss-Seidel digunakan untuk menyelesaikan sistem persamaan linear (SPL) berukuran besar dan proporsi koefisien nolnya besar, seperti sistem-sistem yang banyak ditemukan dalam sistem persamaan diferensial. Metode iterasi Gauss-Seidel dikembangkan dari gagasan metode iterasi pada solusi persamaan tak linier.
Teknik iterasi jarang digunakan untuk menyelesaikan SPL berukuran kecil karena metode-metode langsung seperti metode eliminasi Gauss lebih efisien daripada metode iteratif. Akan tetapi, untuk SPL berukuran besar dengan persentase elemen nol pada matriks koefisien besar, teknik iterasi lebih efisien daripada metode langsung dalam hal penggunaan memori komputer maupun waktu komputasi. Dengan metode iterasi Gauss-Seidel sesatan pembulatan dapat diperkecil karena dapat meneruskan iterasi sampai solusinya seteliti mungkin sesuai dengan batas sesatan yang diperbolehkan.
Metode iterasi Gauss-Seidel untuk menyelesaikan sistem persamaan linear
Suatu sistem persamaan linier terdiri atas sejumlah berhingga persamaan linear dalam sejumlah berhingga variabel. Menyelesaikan suatu sistem persamaan linier adalah mencari nilai-nilai variabel yang belum diketahui yang memenuhi semua persamaan linier yang diberikan.
Rumus iterasi untuk hampiran ke-k pada metode iterasi Gauss-Seidel adalah sebagai berikut. Untuk i = 1, 2, …, n dan k = 1, 2, 3, …,

Algoritma Iterasi Gauss-Seidel
Untuk menyelesaikan sistem persamaan linier AX = b dengan A adalah matriks koefisien n × n , b vektor konstanta n × 1 , dan X vektor n × 1 yang perlu di cari.
INPUT : n, A, b dan hampiran awal Y = (y1 y2 y3 ...yn)T, batas toleransi T dan maksimum iterasi N.
OUTPUT : X = (x1 x2 x3 ...xn)T atau pesan "gagal".
LANGKAH-LANGKAH :
1. Set penghitung iterasi k = 1
2. WHILE k <= N DO
(a) FOR i = 1, 2, 3, ..., n, hitung :

(b) Set X = (x1 x2 x3 ...xn)T
(c) IF ||X - Y|| < T THEN STOP
(d) Tambah penghitung iterasi, k = k + 1
(e) FOR i = 1, 2, 3, ..., n, Set yi = xi
(f) Set Y = (y1 y2 y3 ...yn)T
3. Tulis pesan "metode gagal setelah N iterasi"
4. STOP.
Implementasi dengan MATLAB
function [X1,g,H] = seidel(A,b,X0,T,N)
H = X0';
n = length(b);
X1 = X0 ;
for k=1:N,
for i=1:n,
S=b(i)-A(i,1:i-1)*X1(1:i-1)-A(i,i+1:n)*X0(i+1:n);
X1(i)=S/A(i,i);
end
g=abs(X1-X0);
err=norm(g);
relerr=err/(norm(X1)+eps);
X0=X1;
H=[H,X0'];
if(err<T)|(relerr<T),break,end
end
Contoh
Sebagai gambaran misalkan mencari penyelesaian SPL
10x1 - x2 +2x3=6
-x1+11x2-x3+3x4=25
2x1-x2+10x3-x4=-11
3x2-x3+8x4=15
Berikut pemakaian fungsi MATLAB seidel untuk penyelesaian soal di atas dan keluaran yang diperoleh :
>> A=[10 -1 2 0;-1 11 -1 3;2 -1 10 -1;0 3 -1 8]
A =
   10    -1     2     0
   -1    11    -1     3
    2    -1    10    -1
    0     3    -1     8
>> b=[6;25;-11;15]
b =
    6
   25
  -11
   15
>> X0=[0;0;0;0]
X0 =
    0
    0
    0
    0
>> T=0.0001;N=25;
>> [X,g,H]=seidel(A,b,X0,T,N)
X =
   1.0000
   2.0000
  -1.0000
   1.0000
g =
 1.0e-004 *
   0.8292
   0.2017
   0.2840
   0.1111
H =
 Columns 1 through 5
        0         0         0         0    0.6000
 Columns 6 through 10
   2.3273   -0.9873    0.8789    1.0302    2.0369
 Columns 11 through 15
  -1.0145    0.9843    1.0066    2.0036   -1.0025
 Columns 16 through 20
   0.9984    1.0009    2.0003   -1.0003    0.9998
 Columns 21 through 25
   1.0001    2.0000   -1.0000    1.0000    1.0000
 Columns 26 through 28
   2.0       -1.0000    1.0000
Proses iterasi dapat diulangi sampai tingkat keakuratan yang diinginkan tercapai, penyelesaian eksak contoh di atas adalah (1, 2, -1, 1).
Readmore »»   Metode Gauss dan Implementasinya di Matlab

Percabangan dan Perulangan pada Matlab


Secara umum, di semua bahasa pemrograman termasuk matlab, terdapat dua macam kendali aliran, yaitu percabangan dan perulangan.

Percabangan
 Aliran Logika
Aliran logika pada kendali pencabangan digambarkan dengan flowchart berikut :




Pelaksanaan eksekusi pada pernyataan X atau Y tergantung pada hasil pengujian syarat. Jika syarat terpenuhi maka eksekusi berikutnya adalah pernyataan X, tetapi jika syarat tidak terpenuhi maka eksekusi selanjutnya adalah pernyataan Y. Kadang–kadang pernyataan Y tidak diperlukan, yang berarti pengujian syarat dilakukan untuk menentukan apakah pernyataan X perlu dieksekusi atau tidak.
Operator Relasi dan Logika
Untuk menyatakan syarat pemilihan biasanya digunakan perbandingan antara dua buah nilai. Perbandingan dilakukan dengan menggunakan operator relasi. Berikut ini beberapa operator relasi :


  
Nilai benar pada MATLAB dinyatakan dengan nilai 1 dan sebaliknya nilai salah dinyatakan dengan nilai 0. Hasil operasi 0 atau 1 dapat digunakan sebagai syarat pemilihan. Sebaliknya, hasil perbandingan dapat pula digunakan dalam operasi matematis. Operator logika menyediakan cara untuk mengevaluasi ekspresi logika. Operator tersebut adalah


Untuk memastikan urutan operasi maka tiap syarat ditulis dengan menggunakan tanda kurung “(  )“. Hal ini terutama apabila syarat tebentuk dari beberapa syarat yang dievaluasi menggunakan operator logika. Contoh syarat yang tersusun dari beberapa syarat.


Pernyataan If, else, dan elseif
Apabila flowchart dinyatakan dengan pernyataan ini, maka:


Pernyataan Z pada kasus ketiga berguna apabila tidak ada syarat pada pernyataan lain.
Perintah Switch….case
Sering kali pengujian syarat bukan nilai benar (yang berarti syarat tidak terpenuhi) atau salah (yang berarti syarat tidak terpenuhi). Jika syarat berupa operasi matematis, maka yang dievaluasi sebagai syarat adalah kesamaan hasil dengan konstanta yang telah didefinisikan sebelumnya. Pada kasus ini, penggunaan pernyataan if…else…end kurang efektif. Untuk itu telah tersedia pernyataan switch…case…otherwise sebagai berikut :
switch syarat
    case konstanta 1
        pernyataan 1
case konstanta 2
        pernyataan 2
      ...
    otherwise
     pernyataan N
end;
Perulangan
Perulangan atau iterasi adalah bentuk kendali aliran untuk melakukan pekerjaan berulang kali menggunakan suatu nilai yang berfungsi sebagai pencacah atau counter. Nilai pencacah dinaikkan atau diturunkan setiap kali satu pekerjaan dilakukan. Pada operasi yang melibatkan vektor atau matriks, pencacah biasanya juga berfungsi sebagai indeks, yang menunjukkan posisi elemen vektor atau matriks yang dioperasikan. Terdapat dua macam perulangan yaitu perulangan berbatas (for) dan perulangan bersyarat (while).
Perulangan berbatas (for)
Perlangan berbatas menggunakan pernyataan for sebagai berikut :



Perulangan akan dilakukan mulai dari pencacah sama dengan nilai awal. Setelah satu operasi selesai dilakukan, nilai pencacah diubah sebesar nilai perubahan. Jika nilai pencacah hasil pengubahan telah melebihi nilai akhir, maka perulangan dihentikan.
Nilai perubahan dapat positif (naik) aau negatif (turun). Pada perubahan positif, akhir harus lebih besar dari awal, sedangkan pada perubahan negatif, nilai akhir harus lebih kecil dari nilai awal. Nilai perubahan bisa tidak dinyatakan, yang berarti perulangan adalah perulangan positif dengan kenaikan 1, sehingga pernyataan menjadi :

Kadangkala, syarat nilai akhir perulangan tidak bisa ditentukan dengan pasti. Untuk itu, digunakan perulangan bersyarat. Jika nilai pencacah memenuhi syarat perulangan, maka perulangan dilanjutkan. Jika nilai pencacah tidak memenuhi syarat perulangan, maka perulangan dihentikan.
Perulangan bersyarat menggunakan while sebagai berikut :


Inisialisasi biasanya merupakan penetapan nilai awal dari pencacah. Nilai tersebut akan diuji pada syarat perulangan. Syarat perulangan sama sebagaimana pada pencabangan. Padanya berlaku pula operator relasi dan logika.
Aliran logika perulangan sebagai berikut :



Pada pernyataan for nilai pencacah diubah secara otomatis. Berbeda dari hal tersebut pada pernyataan while, nilai pengubahan pencacah harus ditangani sendiri dalam pernyataan operasi.

Readmore »»   Percabangan dan Perulangan pada Matlab

Tugas Komputasi 2


1. Tarif Surat Kabar

clear all
disp('Tarif Pemasangan Iklan Surat Kabar');
disp('**********************************');
disp ('(Minggu, Senin, Selasa, Rabu, Kamis dan Jumat, per baris Rp. 33.000,-');
disp (' Sabtu, per baris Rp. 40.000,-)');
disp(' ');
disp('Hari ke 1 = Minggu - Hari ke 2 = Senin - Hari ke 3 = Selasa');
disp('Hari ke 4 = Rabu - Hari ke 5 = Kamis - Hari ke 6 = Jumat - Hari ke 7 = Sabtu');
disp(' ');
hari = input('Pasang Iklan di Hari ke = ');
bar = input('Jumlah Baris yang Akan di Buat = ');
a = bar * 33000;
b = bar * 40000;
if hari == 1 || hari == 2 || hari == 3 || hari == 4 || hari == 5 || hari == 6;
    disp(['Total yang Harus di Bayar Adalah ', num2str(a)]);
elseif hari == 7
    disp(['Total yang Harus di Bayar Adalah ', num2str(b)]);
end

2. Tarif PDAM

clear all
disp ('Berikut ini adalah tarif pemakaian Air PDAM Kota Surabaya');
disp ('Jumlah Pemakaian (m3)    Harga/m3');
disp ('Pemakaian I      (     <  50 m3) Rp.  200,-');
disp ('Pemakaian II     (    51 – 150 ) Rp.  500,-');
disp ('Pemakaian III    ( 151 – 300 )   Rp.  1.000,-');
disp ('Pemakaian I V    ( >  300 m3 )   Rp.  1.500,-');
disp(' ');
tot = input('jumlah pemakaian = ');
p1 = 50 * 200;
p2 = 100 * 500;
p3 = 150 * 1000;
p4 = (tot - 300) * 1500;
p4i = tot-300;
jum = p1 + p2 + p3 + p4;
disp (['Jumlah Pemakaian = ', num2str(tot), 'm3']);
disp (['Pemakaian I     (<  50 m3)         Rp.   200,-  *   50  = Rp.', num2str(p1),',-']);
disp (['Pemakaian II    (51 -  150 m3)     Rp.   500,-  *   100 = Rp.', num2str(p2),',-']);
disp (['Pemakaian III   (151 -  300 m3)    Rp.   1000,- *   150 = Rp.', num2str(p3),',-']);
disp (['Pemakaian IV    ( >  300 m3)       Rp.   1500,- *   ', num2str(p4i),' = Rp.',num2str(p4),',-']);
disp (['Biaya Total                                             = Rp.', num2str(jum), ',-']);

3.  Nilai Pajak

clear all
disp('Rincian Pajak Penghasilan dan Besar Take Home Pay');
disp(' ');

peng = input('Besarnya Penghasilan = ');
p1= 0.05 * 25000000;
p2= 0.10 * 25000000;
p3= 0.15 * 50000000;
p4= 0.25 * 100000000;
p5= 0.35 * (peng-200000000);
a5=(peng-200000000);
jum=p1+p2+p3+p4+p5;
bay=peng-jum;

disp('5%      x     Rp 25000000     =   Rp  1250000');
disp('10%     x     Rp 25000000         =   Rp  2500000');
disp('15%     x     Rp 50000000         =   Rp  7500000');
disp('25%     x     Rp 100000000        =   Rp  25000000');
disp(['35%    x     Rp ',num2str(a5),'  =   Rp  ',num2str(p5)]);
disp(['Total                            =   Rp  ',num2str(jum)]);
disp(['Take Home Pay = ',num2str(peng),' – ',num2str(jum),' = Rp.  ',num2str(bay)]);
end

4. Konversi Nilai

clear all
t1=input('Masukkan Nilai Tugas 1 = ');
t2=input('Masukkan Nilai Tugas 2 = ');
t3=input('Masukkan Nilai Tugas 3 = ');
UTC=input('Masukkan Nilai UTC  = ');
UAC=input('Masukkan Nilai UAC = ');
rata=(t1+t2+t3)/3;
nil=((rata*0.3)+(UTC*0.3)+(UAC*0.4));

if nil > 80 && nil <= 100
disp('Nilai Anda Adalah A');
elseif nil > 70 && nil <= 80
disp('Nilai Anda Adalah AB');
elseif nil > 65 && nil <= 70
disp('Nilai Anda Adalah B');
elseif nil > 60 && nil <= 65
disp('Nilai Anda Adalah BC');
elseif nil > 55 && nil <= 60
disp('Nilai Anda Adalah C');
elseif nil > 40 && nil <= 55
disp('Nilai Anda Adalah D');
elseif nil > 0  && nil <= 40
disp('Nilai Anda Adalah E');
end

5. Tarif Bioskop
clear all
disp('Harga Tiket di Surabaya City');
disp('- Senin – Kamis       : Rp 15.000,-');
disp('- Jumat s/d Minggu    : Rp 35.000,-');
disp('- Hari Libur          : Rp 35.000,-');
disp('1 = Senin - 2 = Selasa - 3 = Rabu');
disp('4 = Kamis - 5 = Jumat - 6 = Sabtu - 7 = Minggu ');
disp('8 = Hari Libur - 9 = Bukan Hari Libur');
hari = input('Masukkan Kode Hari = ');
jum = input('Jumlah Tiket = ');
lib = input('Apakah Hari Libur = ');
a = jum * 15000;
b = jum * 35000;
if hari == 1 && lib ~= 8 || hari == 2 && lib ~= 8 || hari == 3 && lib ~= 8 || hari == 4 && lib ~= 8
    disp(['Total yang Harus di Bayar Adalah ', num2str(a)]);
elseif hari == 1 && lib == 8 || hari == 2 && lib == 8 || hari == 3 && lib == 8 || hari == 4 && lib == 8
    disp(['Total yang Harus di Bayar Adalah ', num2str(b)]);
elseif hari == 5 ||  hari == 6 || hari == 7
    disp(['Total yang Harus di Bayar Adalah ', num2str(b)]);
end
Readmore »»   Tugas Komputasi 2

Cara Membuat Program di Matlab


Cara membuat program di matlab
Dalam postingan yang lalu, saya telah menjelaskan tentang matlab serta tampilan desktopnya. Kali ini kita akan belajar membuat program di matlab karena ini juga salah satu dari tugas yang diberikan oleh dosen saya, hehe.
Cara membuat program di matlab
1.       Pertama kita harus membuka aplikasi matlab dulu
2.       Lalu klik file, pilih new kemudian pilih function

3.       Setelah itu akan muncul editor pada desktop matlab dan disinilah kita dapat menuliskan program yang akan kita buat. Sebagai contoh, saya akan membuat program tentang bagaimana menghitung luas lingkaran

4.       Setelah program selesai dibuat, simpan dengan mengklik file, pilih save as


5.       Lalu klik run untuk menjalankan program dan menampilkannya di command window

6.       Setelah itu akan ditampilkan hasil eksekusi dari program yang kita buat pada command window dan kita dapat menjalankannya. Selesai ^^

*untuk dapat menampilkan kembali program yang telah kita buat, kita dapat menuliskan nama file program yang telah kita simpan pada command window lalu klik enter.
Readmore »»   Cara Membuat Program di Matlab