Panduan Praktikum Metode Numerik dengan MATLAB 6.1
1
PR AK TIK UM - 1
Galat TUJUAN Mahasiswa dapat menjelaskan dan menghitung galat dari suatu perhitungan dan dapat membuat program untuk menghampiri fungsi dengan menggunakan deret Taylor dan Mac Laurin.
DASAR TEORI Pendahuluan Metode numerik adalah salah satu teknik penyelesaian masalah yang telah diformulasikan secara matematis dengan pendekatan yang dapat dipecahkan dengan menggunakan operasi perhitungan. Pada zaman pra komputer, biasanya para insinyur menggunakan tiga cara yang berbeda dalam memecahkan suatu masalah, yaitu: 1) menggunakan metode analitik atau eksak. 2) menggunakan grafik untuk memberikan ciri perilaku sistem. 3) menggunakan kalkulator manual untuk mengimplementasikan metode numerik. Berikut ini disajikan diagram penyelesaian masalah-masalah rekayasa: Definisi Masalah
Teori
Model Matematis
Data
Alat pemecahan masalah : komputer, statistika, metode numerik,dll Hasil Numerik / Grafik
Tatap muka masyarakat : Optimasi, penjadwalan, komunikasi,dll Implementasi
Gambar 1.1
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
2
Algoritma Algoritma adalah urutan langkah-langkah logika yang menyatakan suatu tugas dalam menyelesaikan suatu masalah. Data Numerik
Algoritma
Keluaran
Dalam bidang pemrograman, algoritma didefinisikan sebagai suatu metode khusus yang tepat dan terdiri dari serangkaian langkah yang terstruktur dan dituliskan secara sistematis yang akan dikerjakan untuk menyelesaikan suatu masalah dengan bantuan komputer. Algoritma dapat dituliskan dalam bentuk kalimat atau dinyatakan sebagai pseudocode. pseudocode. Pseudocode tidak bergantung pada jenis bahasa pemrograman yang digunakan. Terdapat beberapa struktur program yang biasanya digunakan digunakan dalam pseudocod dalam pseudocod , yaitu:
Struktur berurutan Gaji Total
Gaji + Bonus Harian
Struktur Seleksi (a)
IF Kondisi-1 THEN Proses-1 ELSE IF Kondisi-2 THEN Proses-2 ELSE …. …. Proses-n …. END IF END IF
(b)
IF Kondisi-1 THEN Proses-1 ELSE (null) END IF
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
3
Pseudocode untuk seleksi dengan menggunakan perintah CASE tidak berbeda jauh dengan IF – IF – THEN THEN – – ELSE, ELSE, yaitu CASE V OF V1: Proses-1 V2: Proses-2 … Vn:Proses-n END CASE Contoh : CASE Pilihan OF 1: C
A*B
2: C
A+B
3: C
A-B
END CASE
Struktur Perulangan (looping (looping )
While e pseudode strukturnya sebagai berikut: Untuk Do Whil Do While (Kondisi) Perintah-1 Perintah-2 … Perintah-n END DO Untuk Repeat Until pseudode strukturnya sebagai berikut: REPEAT Perintah-1 Perintah-2 … Perintah-n UNTIL (Kondisi)
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
4
Untuk For Next pseudode strukturnya sebagai ber ikut: FOR I:=J TO K BY 2 Perintah-1 Perintah-2 … Perintah-n END FOR Contoh 1.1
Buatlah algoritma dan program dengan menggunakan bahasa pemrograman Matlab 6.1. untuk menghitung nilai p nilai p(( x) x) = 1 + x + x + x2 + x3 +…+ x +…+ xn
Jawab : Input : n, x Output: px Output: px 1. px
1
2. suku
1
3. iterasi
1
4. WHILE (Iterasi < n) DO a. suku b. px
suku* suku* x px + suku
c. iterasi
iterasi +1
5. cetak px px
Output
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
5
L isti isting Prog Pr ogram ram function varargout = poliform(varargin) % TAYLORFORM Application M-file for taylorform.fig % FIG = TAYLORFORM launch poliform GUI. % POLIFORM('ca llback_name', ...) invoke the named callback. % Last Modified by GUIDE v2.0 26-Feb-2010 22:54:03 if nargin == 0
% LAUNCH GUI
fig = openfig(mfilename,'reuse'); % Use system color scheme for figure: set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); % Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} varargout{1} = fig; end elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK try if (nargout) [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard else feval(varargin{:}); % FEVAL switchyard end catch disp(lasterr); end end % ------------------------------------------------------------------function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) formku=guidata(gcbo); n=str2double(get(formku.edit1,'String')); x=str2double(get(formku.edit2,'String')); suku=1; iterasi=1; px=1; while(iterasi
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
6
Tugas 1.1.1 Buatlah program untuk mengkonversi bilangan desimal N ke sistem bilangan
biner jika a.) N bilangan bulat. b.) N Bilangan pecahan
Galat
Galat numerik timbul dari penggunaan hampiran untuk menyatakan besaran matematika yang eksak. Penyelesaian secara numerik dari suatu persamaan matematika hanya memberikan nilai perkiraan yang mendekati nilai eksak dari penyelesaian analitis. Berarti dalam penyelesaian numerik tersebut terdapat kesalahan terhadap nilai eksak. Ada tiga macam kesalahan :
Kesalahan bawaan
Kesalahan pembulatan a.) Chopping b.) Rounding Kesalahan pemotongan
Kesalahan Absolut dan Relatif Hubungan antara nilai eksak, nilai perkiraan dapat diberikan dalam bentuk sebagai berikut : P=P*+Ee Dengan
P
: Nilai Eksak
P*
: Nilai Perkiraan
Ee
: Kesalahan terhadap Nilai Eksak
Indeks e menunjukan bahwa kesalahan dibandingkan terhadap nilai eksak. Dari bentuk persamaan di atas dapat disimpulkan bahwa kesalahan adalah perbedaan antara nilai eksak dan nilai perkiraan yaitu : Ee= P-P* Persamaan diatas disebut Kesalahan Absolut. Kesalahan Relatif adalah perbandingan kesalahan yang terjadi dengan nilai eksak. E e e
P
atau sering juga ditulis dalm bentuk persen
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
E e e
7
100 %
P
Nilai eksak solusi suatu masalah dapat diketahui bila masalah tersebut dapat diselesaikan secara analitik. Untuk masalah yang tidak dapat diselesaikan secara analitis, kesalahan dinyatakan berdasarkan nilai perkiraan terbaik dari nilai eksak, sehingga kesalahan mempunyai bentuk berikut : E a a
100 %,
P *
dengan E a
: Kesalahan terhadap nilai perkiraan terbaik
P*
: Nilai perkiraan terbaik.
Index a menunjukkan bahwa kesalahan dibandingkan terhadap nilai perkiraan. Dalam metode numerik, sering dilakukan pendekatan secara iteratif, sehingga kesalahan ditentukan dengan menghitung perbedaan antara nilai yang diperoleh dari suatu dengan iterasi sebelumnya, sehingga kesalahan relatif diberikan dalam bentuk P
n 1
a
n
* P *
P
n 1
100 %,
*
dengan n
P * : P
n 1
*:
Nilai perkiraan pada iterasi ke n Nilai perkiraan pada iterasi ke n+1
Perambatan Galat Kesalahan yang terjadi karena akumulasi hasil Operasi bilangan : Jumlah, Kurang, Bagi, Kali.
Deret Taylor Definisi:
Andaikan Misalkan
f dan x 0
semua turunannya,
[a, b] ,
f ’, f ’’,…terdefinisi
dalam selang [ a , b ] .
maka untuk nilai-nilai x [ a , b ] di sekitar x , f ( x ) dapat 0
diekspansikan ke dalam deret Taylor f ( x )
f ( x 0 )
( x
x 0 ) 1!
f ' ( x 0 )
( x
x 0 ) 2!
2
f ' ' ( x 0 )
Jurusan Matematika Universitas Brawijaya Malang
...
( x
x 0 ) m!
m
f
(m )
(x0 )
...
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
8
Khususnya, bila fungsi diperluas di sekitar
x 0
= 0, maka diperoleh deret Mac
Laurin. Karena suku-suku deret Taylor tidak berhingga banyaknya, maka untuk alasan praktis deret Taylor dipotong sampai orde tertentu. Deret Taylor yang dipotong sampai orde ke-n dinamakan Deret Taylor terpotong, yang dinyatakan oleh
f ( x )
f ( x 0 )
( x
x 0 ) 1!
( x
f ' ( x 0 )
x 0 ) 2!
2
f ' ' ( x 0 )
...
( x
x 0 ) n!
n
f
(n)
( x 0 )
R n ( x ),
dengan R n ( x )
( x
x 0 ) (n
( n 1)
1)!
f
( n 1)
( c ) , x 0
c
x
disebut galat/ sisa.
Contoh 1.2
Jika nilai e x dapat didekati oleh deret e
x
1
x
x
2
...
2!
Buatlah program untuk menghitung e x dengan menggunakan pendekatan deret tersebut, dimana inputnya adalah x dan iterasi maksimal, dan keluarannya berupa nilai hampiran dari e x dan galatnya.
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
9
Listing program function varargout = MacLaur(varargin) % MACLAUR Application M-file for MacLaur.fig % FIG = MACLAUR launch MacLaur GUI. % MACLAUR('callback_name', ...) invoke the named callback. % Last Modified by GUIDE v2.0 27-Feb-2010 09:01:01 if nargin == 0
% LAUNCH GUI
fig = openfig(mfilename,'reuse'); % Use system color scheme for figure: set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); % Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK try if (nargout) [varargout{1:nargout}] = feval(varargin{:}); FEVAL switchyard else feval(varargin{:}); % FEVAL switchyard end catch disp(lasterr); end
%
end % ------------------------------------------------------------------function varargout = edit1_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit2_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) formku=guidata(gcbo); IterasiMax=str2double(get(formku.edit1,'String')); x=str2double(get(formku.edit2,'String')); y=0; fak=1; eEksak=exp(x);
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
10
Iterasi=1; while (Iterasi<=IterasiMax) if (Iterasi==1) suku=1; fak=1; else suku= suku * x; fak=fak*(Iterasi-1); end; y=y+ suku/fak; Iterasi=Iterasi+1; end; galat=abs(eEksak-y)/eEksak; set(formku.edit3,'String',num2str(y)) set(formku.edit4,'String',num2str(galat))
LATIHAN SOAL 1. Buatlah program untuk menghitung nilai fungsi berikut dengan pendekatan deret Mac Laurin, dengan input berupa harga x, iterasi maksimal dan output berupa nilai hampiran beserta galatnya. a. cos(2 x) b. e3 x c. ln(1+2 x) 2.
Buatlah program untuk menghampiri nilai fungsi ln( x) dengan deret Taylor di sekitar x0 = 1, dengan input berupa harga x, iterasi maksimal dan output berupa nilai hampiran beserta galatnya.
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
11
PR AK TIK UM - 2
Akar-Akar Persamaan Tak Linier TUJUAN Mahasiswa dapat membuat program untuk mencari akar-akar persamaan tak linier dengan menggunakan metode bagi dua, posisi palsu, Newton Raphson dan Secant. Mahasiswa dapat membandingkan tingkat efisiensi metode-metode tersebut dan dapat menentukan metode yang tepat untuk menyelesaikan masalah yang berhubungan dengan penentuan akar-akar persamaan tak linier.
DASAR TEORI Metode Bagi dua Kriteria penghentian iterasi pada metode bagi dua menggunakan galat relatif yang dihitung dengan menggunakan rumus: a
|
c baru
c lama
| 100 %
c baru
Algoritma Metode Bagi Dua Input
: a,b, epsilon
Output : akar 1.) Cek f (a)* f (b) 2.) IF cek <=0 THEN a.) Iterasi 1 b.) cl a c.) REPEAT i) c (a+b)/2 ii) cek f(a)*f(c) iii) if cek<0 then b c else if cek>0 then a c else exit iv) galat Abs((c-cl)/c) v) cl c vi) Iterasi Iterasi+1
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
12
UNTIL(galat
Contoh 2.1 Buatlah program untuk mencari akar f ( x ) menggunakan metode bagi dua !
e
x
5x
2
dalam selang [a,b] dengan
Jawab.
Listing program function varargout = bagi2(varargin) if nargin == 0
% LAUNCH GUI
fig = openfig(mfilename,'reuse'); % Use system color scheme for figure: set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); % Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
13
try if (nargout) [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard else feval(varargin{:}); % FEVAL switchyard end catch disp(lasterr); end end % ------------------------------------------------------------------function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) clear; formku=guidata(gcbo); a=str2double(get(formku.edit4,'String')); b=str2double(get(formku.edit5,'String')); epsilon=str2double(get(formku.edit6,'String')); set(gcf,'UserData',formku.listbox1); str=''; str2=sprintf(' iterasi a b c f(a) f(b) galat') ; str=str2mat(str,' ',str2); set(formku.listbox1,'String',str); h1=exp(a)-5*a^2; h2=exp(b)-5*b^2; if (h1*h2<0) c=(a+b)/2; i=0; h1=exp(a)-5*a^2; h3=exp(c)-5*c^2; h2=exp(b)-5*b^2; str=get(formku.listbox1,'String'); galat=abs(a-c); str2=sprintf(' %d %5.7f %5.7f %5.7f %5.7f %5.7f %5.7f',i,a,b,c,h1,h2,h3,galat) ; if(h1*h3<0) b=c; else a=c; end; str=str2mat(str,' ',str2); set(formku.listbox1,'String',str); while (galat>epsilon) i=i+1; c=(a+b)/2; h1=exp(a)-5*a^2; h3=exp(c)-5*c^2; h2=exp(b)-5*b^2; galat=abs(a-c); str=get(formku.listbox1,'String');
Jurusan Matematika Universitas Brawijaya Malang
f(c)
%5.7f
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
14
str2=sprintf(' %d %5.7f %5.7f %5.7f %5.7f %5.7f %5.7f',i,a,b,c,h1,h2,h3,galat) ; if(h1*h3<0) b=c; else a=c; end; str=str2mat(str,' ',str2); set(formku.listbox1,'String',str); end; end;
%5.7f
Metode Posisi Palsu Algoritma Metode Posisi Palsu Input : a,b, epsilon Output : akar 1.) cek f(a)*f(b) 2.) IF cek <=0 THEN a.) Iterasi 1 b.) cl a c.) REPEAT i) c b-f(b)*(b-a)/(f(b)-f(a)) ii) cek f(a)*f(c) iii) if cek<0 then b c else if cek>0 then a c else exit iv) galat Abs((c-cl)/c) v) cl c vi) Iterasi Iterasi+1 UNTIL(galat
Contoh 2.2 Buatlah program untuk mencari akar f ( x ) menggunakan metode posisi palsu!
e
x
Jurusan Matematika Universitas Brawijaya Malang
5x
2
didalam selang [a,b] dengan
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
15
Jawab.
function varargout = pospal(varargin) % POSPAL Application M-file for pospal.fig % FIG = POSPAL launch pospal GUI. % POSPAL('callback_name', ...) invoke the named callback. % Last Modified by GUIDE v2.0 27-Feb-2010 14:27:49 if nargin == 0
% LAUNCH GUI
fig = openfig(mfilename,'reuse'); % Use system color scheme for figure: set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); % Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK try if (nargout) [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard else feval(varargin{:}); % FEVAL switchyard end catch disp(lasterr); end end
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
16
% ------------------------------------------------------------------function varargout = pushbutton2_Callback(h, eventdata, handles, varargin) clear; formku=guidata(gcbo); a=str2double(get(formku.edit4,'String')); b=str2double(get(formku.edit5,'String')); epsilon=str2double(get(formku.edit6,'String')); set(gcf,'UserData',formku.listbox1); str=''; str2=sprintf(' iterasi a c f(a) galat') ; str=str2mat(str,' ',str2); set(formku.listbox1,'String',str); h1=exp(a)-5*a^2; h2=exp(b)-5*b^2; if (h1*h2<0) c=(a+b)/2; i=0; h1=exp(a)-5*a^2; h2=exp(b)-5*b^2; c=b-h2*(b-a)/(h2-h1); h3=exp(c)-5*c^2;
b f(b)
str=get(formku.listbox1,'String'); if(h1*h3<0) galat=abs(c-a); else galat=abs(c-b); end str2=sprintf(' %d %5.7f %5.7f %5.7f %5.7f %5.7f %5.7f',i,a,b,c,h1,h2,h3,galat) ; if(h1*h3<0) b=c; else a=c; end; str=str2mat(str,' ',str2); set(formku.listbox1,'String',str); while (i<10) i=i+1; h1=exp(a)-5*a^2; h2=exp(b)-5*b^2; c=b-h2*(b-a)/(h2-h1); h3=exp(c)-5*c^2; if(h1*h3<0) galat=abs(c-a); else galat=abs(c-b); end str=get(formku.listbox1,'String'); str2=sprintf(' %d %5.7f %5.7f %5.7f %5.7f %5.7f %5.7f',i,a,b,c,h1,h2,h3,galat) ;
Jurusan Matematika Universitas Brawijaya Malang
f(c)
%5.7f
%5.7f
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
17
if(h1*h3<0) b=c; else a=c; end; str=str2mat(str,' ',str2); set(formku.listbox1,'String',str); end; end;
Metode Newton Raphson Algoritma Metode Newton Raphson Input Output 1.) 2.)
: x_lm, IterasiMax : akar, galat Iterasi 1 REPEAT a.) x_lm x_br b.) x_br x_lm-f(x_lm)/f_aks(x_lm) c.) Iterasi Iterasi+1 UNTIL (galat=IterasiMax) ; 3.) IF iterasi
Metode Secant Algoritma Metode Secant Input : x0, x1, IterasiMax Output : akar, galat 1.) Iterasi 1 2.) REPEAT a.) x x1-f(x1)*(x1-x0)/(f(x1)-f(x0)) b.) galat Abs((x-x1)/x) c.) x0 x1 d.) x1 x e.) Iterasi Iterasi+1 UNTIL (galatIterasiMax) 3.) IF iterasi
LATIHAN SOAL 1) Buatlah program untuk mencari akar f ( x )
e
2x
x
2
dengan menggunakan
x
2
dengan menggunakan
metode Newton Raphson! 2) Buatlah program untuk mencari akar
f ( x )
metode Secant!
Jurusan Matematika Universitas Brawijaya Malang
e
2x
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
3) Buatlah program untuk mencari akar
18
f ( x )
e
x
5x
3
dengan menggunakan
metode bagi dua dan metode posisi palsu!. Kemudian bandingkan hasilnya. 4) Suatu I
arus
10
osilasi t
e
sin( 2
dalam t )
sebuah
rangkaian
listrik
diberikan
oleh
, dengan t menyatakan waktu dalam detik. Buatlah
program metode Newton Raphson untuk menentukan semua t yang memberikan nilai I =2. 5) Kecepatan seorang penerjun payung yang sedang jatuh diberikan oleh v
gm
[1
c
e
( c / m ) t
, dengan g = 9,8. Untuk penerjun payung dengan koefisien
tarik c = 13,5 kg / detik, hitunglah massa m agar t = 6 detik diperoleh kecepatan sebesar v = 3600 m/detik. Buatlah program metode posisi palsu, metode bagi dua dan metode secant untuk mencari hampiran nilai m dengan galat 0,01 .
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
19
PR AK TIK UM - 3
Sistem Persamaan Linear TUJUAN Mahasiswa dapat membuat program untuk menyelesaikan sistem persamaan linier dengan menggunakan metode Gauss Jordan, metode dekomposisi LU dan reduksi Crout.
DASAR TEORI Sistem Persamaan Linier Sistem persamaan linier (SPL) dengan n peubah dinyatakan sebagai: a 11 x 1 a 12 x 2 ...
a 21 x 1 a 22 x 2 ...
a 2 n x n
a 1 n x n
b1
b2
………………………… a n 1 x 1 a n 2 x 2 ...
a nn x n
bn
Dengan menggunakan perkalian matriks, sistem persamaan linier tersebut dapat ditulis oleh: Ax=B Contoh 3.1
Buatlah program penyulihan mundur . Jawab Listing Program fprintf('Metode Sulih Mundur \n'); fprintf('--------------------\n'); n=input('ordo :'); fprintf('Matrik A (Segitiga atas): \n'); for (i=1:n) for (l=1:n) fprintf('A [ %d, %d] =',i,l);a(i,l)=input(''); end; end; fprintf('Matrik B: \n'); for (i=1:n) fprintf('B [ %d] =',i);b(i)=input(''); end;
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
x(n)=b(n)/a(n,n); for (k=1 : n-1) sigma=0; for (l=n+1-k : n) sigma=sigma+a(n-k,l)*x(l); end; x(n-k)=(b(n-k)-sigma)/a(n-k,n-k); end; fprintf('x: \n'); for (i=1:n) fprintf('X[%d] =%4.2f',i,x(i)); end;
Contoh 3.2
Buatlah program eliminasi Gauss dengan memperhatikan elemen pivot . Jawab fprintf('Eliminasi Gauss dengan Pivoting \n'); fprintf('--------------------\n'); ordo=input('ordo :'); fprintf('Matrik A : \n'); for (i=1:ordo) for (l=1:ordo) fprintf('A [ %d, %d] =',i,l);A(i,l)=input(''); end; end; for (i=1 : ordo) fprintf('B [ %d] =',i);B(i)=input(''); end; %........ logika element pivot .......... k=1; singular=0; while(k<=ordo-1) & (singular~=1) pivot=A(k,k); r=k; for (t=k+1 : ordo) if (abs(A(t,k)) > abs(pivot)) pivot=A(t,k); r=t; end; end; if (pivot==0) singular=1 else if (r>k) for (s=1 : ordo) tampung=A(k,s); A(k,s)=A(r,s); A(r,s)=tampung; end; tampung=B(k); B(k)=B(r); B(r)=tampung;
Jurusan Matematika Universitas Brawijaya Malang
20
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
21
end; for (i=k+1 : ordo) m=A(i,k)/A(k,k); for (j=k: ordo ) A(i,j)=A(i,j)-m*A(k,j); end; B(i)=B(i)-m*B(k); end; end; k=k+1; end; X(ordo)=B(ordo)/A(ordo,ordo); for (k=1 : ordo-1) sigma=0; for (l=ordo+1-k : ordo) sigma=sigma+A(ordo-k,l)*X(l); end; X(ordo-k)=(B(ordo-k)-sigma)/A(ordo-k,ordo-k); end; fprintf('x: \n'); for (i=1:ordo) fprintf('X[%d] =%4.2f \n',i,X(i)); end;
Metode Dekomposisi LU Jika A adalah matriks non singular maka ia dapat difaktorkan (diuraikan atau didekomposisi) menjadi matriks segitiga bawah L dan matrik segitiga atas U sedemikian sehingga A = LU Dalam bentuk matriks, pemfaktoran tersebut ditulis sebagai: a 1 ,1 a 1 , 2 .... a 1 , n a 2 ,1 a 2 , 2 .... a 2 , n
1
=
l 2 ,1
0 .. . 1 ....
0 0
u 1 ,1 u 1 , 2 .... u 1 , n 0
u 2 , 2 .... u 2 , n
.......... .......... ......
.......... .......... ......
.......... .......... ......
a n ,1 a n , 2 .... a n , n
l n ,1 l n , 2 .... 1
0
0
.... u n , n
Langkah-langkah penyelesaian Ax = B dengan metode dekomposisi LU adalah sebagai berikut. Faktorkan A menjadi L dan U sedemikian sehingga A = LU. Dengan demikian, Ax= LU x=B Misalkan Ux = y, maka Ly = B Untuk memperoleh y1, y2, ... , yn digunakan metode penyulihan maju terhadap Ly = B, yaitu
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
1
0 .. .
l 2 ,1
1 ....
0 0
22
y 1 y 2
b1
=
b2
.......... .......... ......
.....
.....
l n ,1 l n , 2 .... 1
y n
bn
Selanjutnya, untuk memperoleh solusi SPL x1, x2, ..., xn digunakan teknik penyulihan mundur terhadap Ux = y, yaitu u 1 ,1 u 1 , 2 .... u 1 , n 0
u 2 , 2 .... u 2 , n
.......... .......... ...... 0
0
.... u n , n
x 1 x 2
b1
=
b2
.....
.....
x n
bn
sehingga diperoleh x1, x2, ..., xn. Contoh 3.3
Buatlah program untuk mencari matriks U dari sebuah matrik A. Jawab fprintf('Mencari Matriks U \n'); fprintf('--------------------\n'); ordo=input('ordo :'); fprintf('Matrik A : \n'); for (i=1:ordo) for (l=1:ordo) fprintf('A [ %d, %d] =',i,l);A(i,l)=input(''); end; end; %........ logika gauuus .......... for (k=1 : ordo-1) for (i=k+1 : ordo) m=A(i,k)/A(k,k); for (j=k : ordo ) A(i,j)=A(i,j)-m*A(k,j); end; end; end; A
Contoh 3.4 Buatlah program untuk mencari matrik L dari sebuah matrik A.
Jawab fprintf('Mencari Matriks L \n'); fprintf('--------------------\n'); ordo=input('ordo :'); fprintf('Matrik A : \n');
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
23
for (i=1:ordo) for (l=1:ordo) fprintf('A [ %d, %d] =',i,l);A(i,l)=input(''); end; end; for (i=1:ordo) for (l=1:ordo) if (i~=l) L(i,l)=0; else L(i,l)=1; end; end; end; %........ logika gauuus .......... for (k=1 : ordo-1) for (i=k+1 : ordo) m=A(i,k)/A(k,k); L(i,k)=m; for (j=k : ordo ) A(i,j)=A(i,j)-m*A(k,j); end; end; end; L
LATIHAN SOAL 1) Buatlah program untuk mencari matrik L berdasarkan aturan Dekomposisi LU dengan memperhatikan elemen pivot! 2) Buatlah program untuk mencari matrik U berdasarkan aturan Dekomposisi LU dengan memperhatikan elemen pivot! 3) Buatlah program untuk metode dekomposisi LU untuk menyelesaikan sis tem persamaan linier! 4) Buatlah program untuk mencari matrik L berdasarkan aturan reduksi Crout! 5) Buatlah program untuk mencari matrik U berdasarkan aturan reduksi Crout! 6) Buatlah program reduksi Crout untuk menyelesaikan sistem persamaan linier !
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
24
PR AK TIK UM - 4
Interpolasi Polinomial TUJUAN Mahasiswa dapat membuat program untuk melakukan interpolasi dengan menggunakan polinomial dan dapat memilih metode interpolasi yang tepat untuk menyelesaikan suatu masalah.
DASAR TEORI Interpolasi Polinomial Interpolasi polinom ada banyak jenis yaitu tergantung dari derajat dari polinom, misalnya Interpolasi linier, Interpolasi Kuadratik, Interpolasi Kubik dan Interpolasi berderajat n. Interpolasi linier adalah interpolasi dua buah titik dengan sebuah garis lurus. Polinom yang menginterpolasi titik-titik (x 0,y0) dan (x1,y1). Polinom yang menginterpolasi kedua titik itu berbentuk : p 1(x)=a0+a1x. Contoh 5.1
Buatlah program untuk memperikirakan jumlah penduduk Amerika serikat antara tahun a sampai tahun b, jika disediakan data sebagai berikut: Tahun
a
Jumlah Penduduk (Juta)
T1
Jawab :
Jurusan Matematika Universitas Brawijaya Malang
b T2
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
25
Listing Program function varargout = Interpolasi(varargin) if nargin == 0 % LAUNCH GUI fig = openfig(mfilename,'reuse'); % Use system color scheme for figure: set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); % Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK try if (nargout) [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard else feval(varargin{:}); % FEVAL switchyard end catch disp(lasterr); end end % ------------------------------------------------------------------function varargout = edit1_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit2_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit3_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit4_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit6_Callback(h, eventdata, handles, varargin)
% ------------------------------------------------------------------function varargout = edit7_Callback(h, eventdata, handles, varargin)
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
26
% ------------------------------------------------------------------function varargout = pushbutton2_Callback(h, eventdata, handles, varargin) formku=guidata(gcbo); x0=str2double(get(formku.edit1,'String')); x1=str2double(get(formku.edit2,'String')); y0=str2double(get(formku.edit3,'String')); y1=str2double(get(formku.edit4,'String')); global a0 a1 a0=((y1*x0)-(y0*x1))/(x0-x1); a1=(y0-y1)/(x0-x1); str='P(T)='; if (a1>0) str=strcat(str,num2str(a0)); str=strcat(str,'+'); str=strcat(str,num2str(a1)); str=strcat(str,'T'); else str=strcat(str,num2str(a0)); str=strcat(str,num2str(a1)); str=strcat(str,'T'); end; set(formku.text8,'String',str); % ------------------------------------------------------------------function varargout = pushbutton3_Callback(h, eventdata, handles, varargin) formku=guidata(gcbo); global a0 a1 x2=str2double(get(formku.edit6,'String')); y2=a0+a1*x2; set(formku.edit7,'String',num2str(y2));
Misalkan diberikan tiga buah titik data, (x 0,y0),(x1,y1) dan (x2,y2). Polinom yang menginterpolasi ketiga buah titik itu adalah polinom kuadrat yang berbentuk: p1(x)=a0+a1x+a2x2
LATIHAN SOAL 1.) Diketahui pasangan x dan f(x) yang tidak diketahui, sebagai berikut: X
0,1
0,3
0,5
0,7
f(x)
0,003
0,067
0,148
0,248
Buatlah program untuk mencari nilai f(x) dengan interpolasi kubik . 2.) Diketahui pasangan x dan f(x) yang tidak diketahui, sebagai berikut: X
0,1
0,3
0,5
0,7
0,9
f(x)
0,003
0,067
0,148
0,248
0,370
Buatlah program untuk mencari nilai f(x) dengan interpolasi derajat 4 .
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
27
3.) Buatlah program untuk memperikirakan jumlah penduduk Amerika s erikat antara tahun a sampai tahun d, jika disediakan data sebagai berikut: Tahun
a
b
c
d
Jumlah Penduduk (Juta)
T1
T2
T3
T4
4.) Buatlah program untuk mencari nilai f(x) dengan menggunakan metode polinom derajat n!
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
28
PR AK TIK UM - 5 Interpolasi Lagrange, Selisih Terbagi Newton, Newton Gregory Maju dan Newton Gregory Mundur
TUJUAN Mahasiswa bisa membuat program untuk masalah-masalah interpolasi. Mahasiswa bisa memilih metode interpolasi yang tepat untuk menyelesaikan suatu permasalahan
DASAR TEORI Interpolasi Lagrange Bentuk umum interpolasi Lagrange untuk (n+1) titik yang berbeda adalah sebagai berikut: n
n
p n ( x )
a i L i ( x )
dimana
ai
y i , i
1 .. n
dan L i ( x )
i 0
j j
0 i
( x
x j )
( x i
x j )
Contoh 6.1
Diketahui fungsi y=f(x), diberikan oleh 3 buah titik data dalam tabel: X
a
b
c
f(x)
F1
F2
F3
Buatlah program untuk membuat rumus polinom Lagrange derajat 2 ! Jawab
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
29
Listing Program function varargout = lagrang(varargin) if nargin == 0 % LAUNCH GUI fig = openfig(mfilename,'reuse'); % Use system color scheme for figure: set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); % Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK try if (nargout) [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard else feval(varargin{:}); % FEVAL switchyard end catch disp(lasterr); end end % ------------------------------------------------------------------function varargout = edit1_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit2_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit3_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit4_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit5_Callback(h, eventdata, handles, varargin)
% ------------------------------------------------------------------function varargout = edit6_Callback(h, eventdata, handles, varargin) % -------------------------------------------------------------------
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
30
function varargout = pushbutton2_Callback(h, eventdata, handles, varargin) formku=guidata(gcbo); x(1)=str2double(get(formku.edit1,'String')); x(2)=str2double(get(formku.edit2,'String')); x(3)=str2double(get(formku.edit7,'String')); y(1)=str2double(get(formku.edit3,'String')); y(2)=str2double(get(formku.edit4,'String')); y(3)=str2double(get(formku.edit8,'String')); xx=str2double(get(formku.edit5,'String')); Ly=0; for (i=1 :3 ) L(i)=1; for (j=1 : 3 ) if (i~= j) L(i)=L(i)*(xx-x(j))/(x(i)-x(j)); end; end; Ly=Ly+y(i)*L(i); end; set(formku.edit6,'String',num2str(Ly)); % ------------------------------------------------------------------function varargout = edit7_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit8_Callback(h, eventdata, handles, varargin)
PolinomI nterpolasi Selisih-Terbagi Newton Polinom interpolasi terbagi Newton mempunyai bentuk: P n ( x ) ( x
f ( x 0 )
x n
1
( x
x 0 ) f [ x 1 , x 0 ]
( x
x 0 )( x
x 1 ) f [ x 2 , x 1 , x 0 ]
....
( x
) f [ x n ,..., x 2 , x 1 , x 0 ]
dimana f [ x i , x j ] =
f ( x i )
f [ x i , x j , x k ] =
x i
f ( x j ) x j
f [ x i , x j ] x i
f [ x j , x k ] x k
………………………………… f [ x n , x n
1
,..., x 1 , x 0 ] =
f [ x n ,..., x 1 ] x n
f [ x n
1
,..., x 0 ]
x 0
Contoh 6.2
Diketahui fungsi y=f(x), diberikan oleh 3 buah titik data dalam tabel: X
x1
x2
x3
Jurusan Matematika Universitas Brawijaya Malang
x 0 )( x
x 1 )....
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
f(x) y1
y2
31
y3
Buatlah program interpolasi selisih terbagi Newton untuk mencari nilai f(x) . Jawab
Listing Program function varargout = newt(varargin) if nargin == 0 % LAUNCH GUI fig = openfig(mfilename,'reuse'); % Use system color scheme for figure: set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); % Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK try if (nargout) [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard else feval(varargin{:}); % FEVAL switchyard end catch disp(lasterr); end
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
32
end
% ------------------------------------------------------------------function varargout = edit1_Callback(h, eventdata, handles, varargin)
% ------------------------------------------------------------------function varargout = edit2_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit3_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit4_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit5_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit6_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) formku=guidata(gcbo); x(1)=str2double(get(formku.edit1,'String')); x(2)=str2double(get(formku.edit2,'String')); x(3)=str2double(get(formku.edit7,'String')); y(1)=str2double(get(formku.edit3,'String')); y(2)=str2double(get(formku.edit4,'String')); y(3)=str2double(get(formku.edit8,'String')); x1=str2double(get(formku.edit5,'String')); for (k=0:2 ) ST(k+1,1)=y(k+1); end; for (k=1:2) for (i=0:2-k) ST(i+1,k+1)=(ST(i+2,k)-ST(i+1,k))/(x(i+k+1)-x(i+1)) end; end; jumlah=ST(1,1); for (i=1 : 2) suku=ST(1,i+1); for (k=0 : i-1 ) suku=suku*(x1-x(k+1));
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
33
end; jumlah=jumlah+suku; end; y1=jumlah; set(formku.edit6,'String',num2str(y1)); % ------------------------------------------------------------------function varargout = edit7_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit8_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = listbox1_Callback(h, eventdata, handles, varargin)
LATIHAN SOAL 1.) Diketahui pasangan x dan f(x) yang tidak diketahui, sebagai berikut: X
0,1
0,3
0,5
0,7
0,9
f(x)
0,003
0,067
0,148
0,248
0,370
a.) Buatlah program untuk mencari nilai f(x) dengan menggunakan metode polinom lagrange dan polinom iterpolasi selisih terbagi Newton! 2.) Buatlah program untuk mencari nilai f(x) dengan menggunakan metode polinom Newton Gregory Mundur! 3.) Buatlah program untuk mencari nilai f(x) dengan menggunakan metode polinom Newton Gregory Maju!
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
34
PR AK TIK UM - 6
Turunan Numerik TUJUAN Mahasiswa bisa membuat program untuk menyelesaikan masalah turunan
DASAR TEORI Turunan Turunan fungsi didefinisikan sebagai f ' ( x )
f ( x
l im x
h)
f ( x )
h
0
Turunan numerik adalah menentukan hampiran nilai turunan fungsi f yang diberikan dalam bentuk tabel. Misal diberikan nilai-nilai x di x0 – h, dan x0 + h serta nilai fungsi untuk nilai – nilai tersebut. Titik-titik yang diperoleh adalah (x -1, f -1), (x0, f 0), dan (x1, f 1), yang dalam hal ini x -1= x0 – h
dan x 1= x0 + h. Terdapat tiga pendekatan untuk
menghitung nilai f ’(x0) :
Hampiran Selisih Maju f ' ( x 0 )
h)
f ( x 0 )
f 1
h
f 0 h
Hampiran Selisih Mundur f ' ( x 0 )
f ( x 0
f ( x 0 )
f ( x 0
h)
f 1
h
f 0 h
Hampiran Selisih Pusat f ' ( x 0 )
f ( x 0
h)
f ( x 0 2h
h)
f 1
f 1 2h
Contoh 7.1
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
35
Buatlah program untuk menghitung turunan pertama ( f ’)dari fungsi y=x2 pada x=a dengan menggunakan metode Selisih Maju .
Jawab
Listing Program function varargout = maju(varargin)
if nargin == 0
% LAUNCH GUI
fig = openfig(mfilename,'reuse'); % Use system color scheme for figure: set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); % Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK try if (nargout) [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard else feval(varargin{:}); % FEVAL switchyard end catch disp(lasterr); end end
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
36
% ------------------------------------------------------------------function varargout = edit1_Callback(h, eventdata, handles, varargin)
% ------------------------------------------------------------------function varargout = edit2_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit4_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) formku=guidata(gcbo); a=str2double(get(formku.edit1,'String')); h=str2double(get(formku.edit2,'String')); x0=a; x1=a+h; f0=x0*x0; f1=x1*x1; Turun=(f1-f0)/h; set(formku.edit4,'String',num2str(Turun));
Contoh 7.2
Buatlah program untuk menghitung turunan pertama ( f ’) dari fungsi y=x 2 pada x=a dengan menggunakan metode Selisih Mundur . Jawab
Listing Program function varargout = Mundur(varargin)
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
if nargin == 0
37
% LAUNCH GUI
fig = openfig(mfilename,'reuse'); % Use system color scheme for figure: set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); % Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK try if (nargout) [varargout{1:nargout}] = feval(varargin{:}); FEVAL switchyard else feval(varargin{:}); % FEVAL switchyard end catch disp(lasterr); end
%
end
% ------------------------------------------------------------------function varargout = edit1_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit2_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit3_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) formku=guidata(gcbo); a=str2double(get(formku.edit1,'String')); h=str2double(get(formku.edit2,'String')); x0=a-h; x1=a; f0=x0*x0; f1=x1*x1; Turun=(f1-f0)/h;
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
38
set(formku.edit3,'String',num2str(Turun));
Contoh 7.3
Buatlah program untuk menghitung turunan pertama ( f ’)dari fungsi y=x2 pada x=a dengan menggunakan metode Selisih Terpusat! Jawab
Listing Program function varargout = pusat(varargin) if nargin == 0
% LAUNCH GUI
fig = openfig(mfilename,'reuse'); % Use system color scheme for figure: set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); % Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK try if (nargout) [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard else feval(varargin{:}); % FEVAL switchyard end catch disp(lasterr); end end
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
39
% ------------------------------------------------------------------function varargout = edit1_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit2_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit3_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) formku=guidata(gcbo); a=str2double(get(formku.edit1,'String')); h=str2double(get(formku.edit2,'String')); x0=a-h; x1=a+h; f0=x0*x0; f1=x1*x1; Turun=(f1-f0)/(2*h); set(formku.edit3,'String',num2str(Turun));
LATIHAN SOAL 1.) Buatlah program untuk menyelesaikan turunan pertama ( f ’) dari f(x)= sin(2x) pada x=a (satuan radian) dengan menggunakan metode : a.) Selisih Maju b.) Selisih Mundur c.) Selisih Terpusat 2.) Buatlah program untuk menghitung turunan keempat ( f (4))dari f(x)=cos(x) pada x=a dengan menggunakan metode a.) Selisih Maju b.) Selisih Terpusat
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
40
PR AK TIK UM - 7
Integrasi Numerik TUJUAN Mahasiswa bisa membuat program untuk menyelesaikan masalah integral .
DASAR TEORI Integral Integral merupakan secara numerik.
anti turunan, integral dapat diperoleh secara analitik dan
Ada berbagai masalah integral yang sulit dikerjakan bila
menggunakan secara analitik sehingga harus diselesaikan secara numerik. Integral tertentu menangani perhitungan integral antara batas-batas yang telah ditentukan,yang dinyatakan sebagai: b
I
b
f ( x ) dx
F ( x ) | a
F ( b )
F ( a )
a
Integrasi numerik adalah menghitung integral secara numerik. Kaidah Segiempat
y
f ( x )
h x0
x1
Luas satu pias adalah x1
I
f ( x ) dx
hf ( x 0 )
dimana
f ( x 0 )
adalah tinggi pias atau
f ( x ) dx
hf ( x 1 )
dimana
f ( x 1 )
adalah tinggi pias
x 0 x1
I x 0
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
41
Untuk memperkecil galat maka daerah harus dipecah menjadi pias-pias yang lebih kecil sehingga berdasarkan kaidah segi empat integral dapat dihitung dengan rumus: x n
I
h
f ( x ) dx
2
x 0
dengan
h
a
[ f ( x 0 )
f ( x 1 )
...
f ( x n
1
)]
b n
Contoh 8.1
Dengan menggunakan kaidah segiempat buatlah program untuk menghitung b 2
integral I
x dx a
Jawab
Listing Program function varargout = Segi4(varargin) if nargin == 0 % LAUNCH GUI fig = openfig(mfilename,'reuse'); % Use system color scheme for figure: set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); % Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles);
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
42
if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK try if (nargout) [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard else feval(varargin{:}); % FEVAL switchyard end catch disp(lasterr); end end % ------------------------------------------------------------------function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) formku=guidata(gcbo); a=str2double(get(formku.edit1,'String')); b=str2double(get(formku.edit2,'String')); n=str2double(get(formku.edit3,'String')); h=(b-a)/n; x=a; Integral=x*x; sigma=0; for (i=1 : n-1) x=x+h; sigma=sigma+x*x; end; Integral=(Integral+sigma)*h; set(formku.edit4,'String',num2str(Integral));
Kaidah Trapesium
y
f ( x )
h x0
x1
Luas satu trapesium adalah x 1
I
f ( x ) dx x 0
h 2
[ f ( x 0 )
f ( x 1 )]
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
43
Rumus diatas dikenal sebagai kaidah trapesium. Untuk memperkecil galat maka daerah harus dipecah menjadi pias-pias yang lebih kecil s ehingga berdasarkan kaidah trapesium integral dapat dihitung dengan rumus: x n
I
h
f ( x ) dx
2
x 0
[ f ( x 0 )
2 f ( x 1 )
...
2 f ( x n
1
)
f ( x n )]
Contoh 8.2
Dengan menggunakan kaidah trapesium buatlah program untuk menghitung b 2
integral I
x dx a
Jawab
Listing Program function varargout = Trapesium(varargin) if nargin == 0
% LAUNCH GUI
fig = openfig(mfilename,'reuse'); % Use system color scheme for figure: set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); % Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
44
elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK try if (nargout) [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard else feval(varargin{:}); % FEVAL switchyard end catch disp(lasterr); end end
% ------------------------------------------------------------------function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) formku=guidata(gcbo); a=str2double(get(formku.edit1,'String')); b=str2double(get(formku.edit2,'String')); n=str2double(get(formku.edit3,'String')); h=(b-a)/n; x=a; sigma=0; for (i=0 : n ) if (i==0) | (i==n) sigma=sigma+(x+i*h)*(x+i*h); else sigma=sigma+2*(x+i*h)*(x+i*h); end; end; Integral=(sigma)*h/2; set(formku.edit4,'String',num2str(Integral));
Kaidah Titik Tengah
y
f ( x )
)
hf ( x 1 / 2 )
h x0
x1/2
x1
Luas satu pias adalah x1
I
f ( x ) dx x 0
h f ( x 0
h 2
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
45
Untuk memperkecil galat maka daerah harus dipecah menjadi pias-pias yang lebih kecil sehingga berdasarkan kaidah titik tengah integral dapat dihitung dengan rumus: x n
I
h
f ( x ) dx
2
x 0
[ f ( x 1 / 2 )
f ( x 3 / 2 )
...
f ( x ( n
1) / 2
)]
Contoh 8.3
Dengan menggunakan kaidah Titik Tengah buatlah program untuk menghitung b 2
integral I
x dx a
Jawab
Listing Program function varargout = titiktengah(varargin) if nargin == 0
% LAUNCH GUI
set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); % Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
46
try if (nargout) [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard else feval(varargin{:}); % FEVAL switchyard end catch disp(lasterr); end end
% ------------------------------------------------------------------function varargout = edit1_Callback(h, eventdata, handles, varargin)
% ------------------------------------------------------------------function varargout = edit2_Callback(h, eventdata, handles, varargin)
% ------------------------------------------------------------------function varargout = edit3_Callback(h, eventdata, handles, varargin)
% ------------------------------------------------------------------function varargout = edit4_Callback(h, eventdata, handles, varargin)
% ------------------------------------------------------------------function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) formku=guidata(gcbo); a=str2double(get(formku.edit1,'String')); b=str2double(get(formku.edit2,'String')); n=str2double(get(formku.edit3,'String')); h=(b-a)/n; x=a+h/2; Integral=x*x; sigma=Integral; for (i=1 : n-1) x=x+h; sigma=sigma+x*x; end; Integral=sigma*h; set(formku.edit4,'String',num2str(Integral));
Kaidah Simpson
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
47
Kaidah Simpson 1/3 Kaidah simpson 1/3 dirumuskan oleh: x n
h
f ( x ) dx
I
[ f ( x 0 )
3
x 0
h
[ f ( x n
3
h 3
4 f ( x 1 )
2
)
4 f ( x n
n 1
( f ( x 0 )
n
4
f ( x i )
1
)
3
[ f ( x 2 )
4 f ( x 3 )
f ( x 4 )].
.. .
f ( x n )]
2
2
i 1 , 3 , 5 ,..
h
f ( x 2 )]
f ( x i )
f ( x n )]
i 2 , 4 , 6 ,..
n harus genap. Kaidah Simpson 3/8 Kaidah simpson 3/8 dirumuskan oleh: x n
I
3h
f ( x ) dx
8
x 0
[ f ( x 0 )
3h 8 3h 8
[ f ( x n
3 f ( x 1 )
3
)
3 f ( x n
n 1
( f ( x 0 )
3
3 f ( x 2 )
2
)
f ( x 3 )]
3 f ( x n
1
)
3h 8
[ f ( x 3 )
3 f ( x 4 )
3 f ( x 5 )
f ( x n )]
n 3
f ( x i ) i 1 i 3,6 ,9
2
f ( x i )
f ( x n )]
i 3 , 6 , 9 ,..
n harus habis dibagi 3.
Contoh 8.4
Dengan menggunakan kaidah Simpson 3/8 buatlah program untuk menghitung b 2
integral I
x dx a
Jawab
Jurusan Matematika Universitas Brawijaya Malang
f ( x 6 )].
.. .
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
48
Listing Program function varargout = simpson(varargin) if nargin == 0
% LAUNCH GUI
fig = openfig(mfilename,'reuse'); % Use system color scheme for figure: set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); % Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK try if (nargout) [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard else feval(varargin{:}); % FEVAL switchyard end catch disp(lasterr); end
Jurusan Matematika Universitas Brawijaya Malang
Panduan Praktikum Metode Numerik dengan MATLAB 6.1
49
end
% ------------------------------------------------------------------function varargout = edit1_Callback(h, eventdata, handles, varargin)
% ------------------------------------------------------------------function varargout = edit2_Callback(h, eventdata, handles, varargin)
% ------------------------------------------------------------------function varargout = edit3_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = edit4_Callback(h, eventdata, handles, varargin) % ------------------------------------------------------------------function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) formku=guidata(gcbo); a=str2double(get(formku.edit1,'String')); b=str2double(get(formku.edit2,'String')); n=str2double(get(formku.edit3,'String')); h=(b-a)/n; x=a; Integral=a*a+b*b; sigma=Integral; for (i=1 : n-1) x=x+h; if (rem(i,3) ~=0) sigma=sigma+3*x*2; else sigma=sigma+2*x*x; end; end; Integral=sigma*h*3/8; set(formku.edit4,'String',num2str(Integral));
Jurusan Matematika Universitas Brawijaya Malang