1 Pengantar untuk
Pemrograman MATLAB
1.1 Pendahuluan
MATLAB (Matrix Laboratory) adalah sebuah program
untuk analisis dan komputasi numerik dan merupakan suatu
bahasa pemrograman matematika lanjutan yang dibentuk
dengan dasar pemikiran menggunkan sifat dan bentuk
matriks. Pada awalnya, program ini merupakan interface
untuk koleksi rutin-rutin numerik dari proyek LINPACK dan
EISPACK, dan dikembangkan menggunkan bahasa FORTRAN
namun sekarang merupakan produk komersial dari
perusahaan Mathworks, Inc.yang dalam perkembangan
selanjutnya dikembangkan menggunakan bahasa C++ dan
assembler (utamanya untuk fungsi-fungsi dasar MATLAB).
MATLAB telah berkembang menjadi sebuah
environment pemrograman yang canggih yang berisi fungsi-
fungsi built-in untuk melakukan tugas pengolahan sinyal,
aljabar linier, dan kalkulasi matematis lainnya. MATLAB juga
berisi toolbox yang berisi fungsi-fungsi tambahan untuk
aplikasi khusus . MATLAB bersifat extensible, dalam arti
bahwa seorang pengguna dapat menulis fungsi baru untuk
ditambahkan pada library ketika fungsi-fungsi built-in yang
tersedia tidak dapat melakukan tugas tertentu. Kemampuan
pemrograman yang dibutuhkan tidak terlalu sulit bila Anda
telah memiliki pengalaman dalam pemrograman bahasa lain
seperti C, PASCAL, atau FORTRAN.
MATLAB merupakan merk software yang
dikembangkan oleh Mathworks.Inc.(lihat
2 Judul Buku
online.
demo : Digunakan untuk mencoba beberapa
tampilan
demo yang disediakan oleh Matlab
b. MATLAB Editor/Debugger (Editor M-File/Pencarian
Kesalahan)
Window ini merupakan tool yang disediakan oleh
Matlab 5 keatas. Berfungsi sebagai editor script Matlab
(M-file). Walaupun sebenarnya script ini untuk
pemrograman Matlab dapat saja menggunakan editor
yang lain seperi notepad, wordpad bahkan word. Untuk
mengakses window m-file ini dapat dilakukan dengan cara
:
1. Memilih File kemudian pilih New
2. Pilih m-file, maka MATLAB akan menampilkan
editor window :
exp - Exponential.
log - Natural logarithm.
log10 - Common (base 10) logarithm.
log2 - Base 2 logarithm and dissect floating
point number.
pow2 - Base 2 power and scale floating point
number.
sqrt - Square root.
nextpow2 - Next higher power of 2.
Complex.
abs - Absolute value.
angle - Phase angle.
complex - Construct complex data from real and
imaginary parts.
conj - Complex conjugate.
imag - Complex imaginary part.
real - Complex real part.
unwrap - Unwrap phase angle.
isreal - True for real array.
cplxpair - Sort numbers into complex conjugate
pairs.
Keterangan:
Untuk setiap perintah di atas sebelum ke perintah
selanjutnya maka tekan enter agar dapat ditampilkan
outputnya.
Operasi Simbol
Penambahan, a + +
b
Pengurangan a-b -
14 Judul Buku
Perkalian a x b *
Pembagian a : b / atau \
Pemangkatan ab ^
Urutan operasi tersebut yang dikerjakan dalam suatu
ekspresi yang mengikuti aturan prioritas yang biasa (hirarki).
Aturan tersebut dapat diringkas sebagai berikut :
Ekspresi dikejakan dari kiri ke kanan dengan
pemangkatan mempunyai prioritas tertinggi,
diikuti dengan perkalian atau pembagian yang
mempunyai prioritas yang sama, diikuti dengan
penambahan dan pengurangan yang juga
memiliki prioritas yang sama. Tanda kurung
dapat digunakan untuk merubah urutan
pengerjaan yang biasa dimana bagian yang
dikerjakan terlebih dahulu adalah bagian yang
yang ada di bagian kurung paling dalam
kemudian keluar.
Contoh :
Misalnya anda mengambil kuliah sebanyak 12 SKS , yang
terdiri dari seismologi 4 sks , Analisis sinyal 3 sks , Tomografi
2 sks dan Gravitasi 3 sks . Lalu pada akhir semester anda
mendapat nilai sebagai berikut seismologi A , Analisis sinyal B
, Tomografi C dan gravitasi A . Dengan point nilai A=4 , B=3 ,
C=2 Berapa nilai IP anda ?
Untuk memyelesaikan ini kita menggunakan pendekatan
seperti perhitungan di kalkulator :
ip=(4*4+3*3+2*2+3*4)/(4+3+2+3)
ip =
3.4167
Sebagai alternatif kita bisa menyelesaikan masalah di atas
dengan terlebih dahulu menyimpan informasi yang kita
punya pada variabel.
Pemrograman Linier dengan MATLAB 15
seismologi=4
tomografi=2
analisis_sinyal=3
gravitasi=4
seismologi =
4
tomografi =
2
analisis_sinyal =
3
gravitasi =
4
total_sks=12
total_sks =
12
ip=(seismologi*4+tomografi*2+analisis_sinyal*3+gravitasi*
3)/total_sks
ip =
3.4167
V =
4
3
(
π RE 3 − RI 3 )
Dimana RE adalah diameter luar dan RI adalah diameter
dalam
Penyelesaian :
re=6.3125;ri=5.762;
v=4/3*pi*(re^3-ri^3);
disp(['Volume = ',num2str(v)])
Volume = 252.3169
18 Judul Buku
Operator Deskrips
Logika i
& AND
| OR
~ NOT
1.9. Demos
Untuk mengetahui atau belajar lebih banyak
mengenai MATLAB, MATLAB menyediakan fasilitas yang
dapat dijalankan dengan menggunakan command demo
yang diketikkan pada Command Window atau dengan
mengklik pada menu Help dan pilih Examples dan
Demos dari menu pull-down yang disediakan. Beberapa
demos MATLAB menggunakan Command Window dan
Figure Window sekaligus.
Sebagai contoh untuk belajar lebih jauh mengenai
matriks dalam MATLAB, dapat membuka demo window
dengan menggunakan satu metode yang dijelaskan di
atas tadi. Pada jendela kiri pilih Matrices dan pada
jendela kanan pilih Basic matrix operations kemudian
klik pada Run Basic matrix. Tampilan yang dihasilkan
adalah sebagai berikut :
Pemrograman Linier dengan MATLAB 21
Bab 2
2 TIPE DATA
2.1 String
String dalam MATLAB adalah type data yang terdiri
atas huruf-huruf dan atau nilai-nilai ASCII yang
ditampilkan representasinya. String adalah teks yang
diawali dan diakhiri dengan apostrof ‘ ‘.
Contoh :
» p='hallo apa kabar'
p =
hallo apa kabar
» size(p)
ans =
1 15
» whos
Name Size Bytes Class
ans 1x2 16 double array
p 1x15 30 char array
Pemrograman Linier dengan MATLAB 25
t =
kabar
string juga dialamati seperti array. Dari contoh di atas elemen
ke 11 sampai ke 15 memuat kata kabar.
Jika kata tersebut dibalik maka perintahnya dapat diketikkan
sebagai berikut :
» t=p(15:-1:11)
t =
rabak
dan jika penggunaan operator transpose maka kata kabar
akan dibaca dalam format kolom yaitu :
» t=p(11:15)'
t =
k
a
b
a
r
3. fungsi fprintf
Command ini berfungsi untuk menampilkan output di
layar atau menyimpan output di suatu external file ( sama
halnya dengan command fprint di C/C++). Fungsi ini
mempunyai argumen sbb:
fprintf( ' nama file ' ,' format string ' , list)
dimana list adalah nama variabel yang dipisahkan dengan
koma. Untuk format string :
%P.Qe untuk eksponensial
%P.Qf untuk fixed point
/n untuk membuat baris baru
dan lebih detailnya dapat dilihat di help untuk fprintf.
Dibawah ini diberikan contoh penggunaannya.
Contoh 1.
» z='ini cuma mo nyoba aja..';
» y='semoga berhasil';
» fprintf('%s\n',z);
ini cuma mo nyoba aja..
» fprintf('%s\n',z,y);
ini cuma mo nyoba aja..
semoga berhasil
» fprintf('%s%s\n',z,y);
ini cuma mo nyoba aja..semoga berhasil
Contoh 2.
x=1007.46 ; y=2.1278;k=17;
fprintf('x= %8.2f y=%8.2f k=%2.0f',x,y,k)
x= 1007.46 y= 2.13 k=17
Pemrograman Linier dengan MATLAB 29
2.2. Scalar
Scalar adalah nama lain dari data numeric, Dalam
MATLAB data scalar dapat dimanipulasikan dengan
menggunakan beberapa fungsi, seperti type string
sebelumnya. Berikut ini beberapa contohnya:
» x=0:0.1:1;
» y=[x;tan(x)];
» fid=fopen('c:\backup\tan.txt','w');%
» fprintf(fid,'&6.2f %12.8f\n',y);
» fclose(fid);
akan menyimpan tabel berisikan x dan tan(x) di file tan.txt
(nama ini sebarang, sesuai dengan keinginan anda) yang
disimpan di direktori c:\backup berisikan data berikut :
0.00 0.00000000
0.10 0.10033467
0.20 0.20271004
0.30 0.30933625
0.40 0.42279322
0.50 0.54630249
0.60 0.68413681
0.70 0.84228838
0.80 1.02963856
0.90 1.26015822
30 Judul Buku
1.00 1.55740772
2.3. Array.
MATLAB menangani array secara intuitif. Untuk
membuat array dalam MATLAB, yang perlu dilakukan
hanyalah mengetikkan kurung kotak kiri, memasukkan
elemen-elemen denagn dipisahkan oleh spasi atau koma,
kemudian menutup array dengan kurung kotak kanan.
Berikut ini akan diberikan beberapa contoh
assignment untuk array :
a. Pengalamatan array
Dalam MATLAB elemen-elemen array diakses
menggunkan subcript; misalnya x(1) adalah elemen
pertama x, x(2) adalah elemen kedua x, dan seterusnya.
Contoh :
1. » x=[2 4 6 8 10]
» y=x(2:4)
y =
2 1 2
» n=n(1:length(n)-1)
n =
1 3 5 7
a. Menghapus elemen pada index
tertentu
Misalkan z =[1 2 3 4 5 ] dan ingin dihapus z
pada index ke 2 dan 4 maka:
» z=[1 2 3 4 5]
z =
1 2 3 4 5
» z([2 4])=[]
z =
1 3 5
2.4. Matriks
Matriks merupakan bentuk utama dari MATLAB,
seperti halnya array matriks juga didefenisikan elemen
Pemrograman Linier dengan MATLAB 33
>> C*D
??? Error using ==> *
No functional support for matrix inputs.
By the same token, the exponentiation operator ^ is only
defined for square 2-dimensional arrays (matrices).
Dan operasi-operasi lainnya seperti :
1. >>x=A/f
2. >>A=A’
36 Judul Buku
3. >>2*A
4. >>inv(B)
Pembahasan detail mengenai matriks ini akan
dibahas pada Bab Matriks dan Aljabar linier.
Pemrograman Linier dengan MATLAB 37
Bab 3
3 FUNGSI M-FILE
function k = isint(x);
% Check whether or not x is an integer number.
% If it is, function isint returns 1 otherwise it returns 0.
if abs(x - round(x)) < realmin
k = 1;
else
k = 0;
end
Function baru yang digunakan disini adalah the
absolute value function (abs) dan the round function
(round).realmin adalah bilangan real positif terkecil di
komputer anda.
format long
realmin
ans =
2.225073858507201e-308
format short
3
x 2x πx
− + cos , maka script untuk program
2.4 2. 4 2. 4
m-filenya dapat dituliskan sebagai berikut :
function p=coba(x)
x=x/2.4;
p=x^3-2*x+cos(pi*x);
BAB 4
4 CONTROL FLOW
fasilitas kontrol ini , maka bab ini bukanlah hal yang baru
bagi anda . Namun jika kontrol program ini dianggap sebagai
sesuatu yang baru,maka materi ini mungkin tampak rumit.
Jika hal itu terjadi, maka pelajarilah materi ini pelan-pelan.
Matlab menyediakan empat struktur kontrol program,
yaitu loop for, loop while, kontruksi switch-case dan
kontruksi if-else-end. Kontruksi-kontruksi tersebut seringkali
melibatkan banyak perintah Matlab, yang oleh karenanya
konstruksi ini lebih banyak terdapat dalam M-file.
4.1.Loop for
Loop for memungkinkan sekelompok perintah diulang
sebanyak suatu jumlah yang tetap. Be ntuk umum loop for
adalah:
for x= *array/matriks
statement1;
statement 2;
…
end
Keterangan: *aturan pembuatan array seperti yang telah dibahas
pada bab sebelumnya.
Perintah antara statement for dan statement end
dikerjakan sekali untuk setiap kolom dalam array. Untuk tiap
iterasi, x diisi dengan kolom array berikutnya, yaitu dalam
iterasi ke-n dalam loop.
Contoh :
for i=1:10
x(i)=sin(i*pi/10);
end
x
52 Judul Buku
x =
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090
0.5878 0.3090 0.0000
x =
-4
x =
-4
x =
-4
x =
-4
Biasanya loop for dapat dibuat sehingga berada dalam
loop for yang lain sebanyak yang diinginkan,
contoh:
for i=1:10
for j=1:5
U(i,j)=i^2+j^2;
end
end
U
U =
2 5 10 17 26
5 8 13 20 29
10 13 18 25 34
17 20 25 32 41
26 29 34 41 50
37 40 45 52 61
50 53 58 65 74
65 68 73 80 89
82 85 90 97 106
101 104 109 116 125
54 Judul Buku
while (1+eps)>1
eps=eps/2;
num=num+1;
end
n=n+1;
end
disp(n)
4.3.Kontruksi switch-else
Bila sederetan perintah harus dikerjakan dengan
didasarkan pada penggunaan berulang-ulang suatu tes
dengan argumen yang sama, kontruksi switch – else akan
lebih tepat digunakan. Konstruksi ini mempunyai bentuk:
switch ekspresi
case test ekspresi 1
deret perintah 1 (statement,…,statement)
case {test ekspresi 2, test ekspresi 3, test
ekspresi 4}
deret perintah 2 (statement,…,statement)
….
otherwise
deret perintah 3 (statement,…,statement)
end
Expresi harus berupa skalar atau karakter string. Jika
ekspresinya adalah skalar, ekspresi= =test_ekspresi di test
oleh statemen case. Jika ekspresi berupa karakter string
maka strcm(ekspresi, test_ekspresi) ditest.
Pada contoh diatas ekspresi dibandingkan dengan
dengan test ekspresi 1 pada statemen case pertama, jika
keduanya sama maka deret perintah akan dikerjakan, dan
deret statemen berikutnya yang berada sebelum
58 Judul Buku
switch x
case {1,2}
disp('Probability = 20%');
case {3,4,5}
disp('Probability = 30%');
otherwise
disp('Probability = 50%');
end
Dalam contoh sebelumnya dapat dilihat bahwa ada 3 fungsi
built in MATLAB yang digunakan yaitu :
rand – bilangan acak distribusi uniform dalam interval (0, 1)
ceil – Pembulatan ke atas.
disp – menampilkan string/array
dari contoh di atas, misalkan di coba untuk :
for k = 1:10
fswitch
end
Probability = 50%
Probability = 30%
Probability = 50%
Probability = 50%
Probability = 50%
Probability = 30%
Probability = 20%
Probability = 50%
Probability = 30%
Probability = 50%
60 Judul Buku
harga=(1-20/100)*harga;
end
» harga
harga =
900
end
eps =
2.2204e-016
num
num =
53
Contoh 1.
Chebyshev polynomials Tn(x), n = 0, 1, … merupakan salah
satu masalah yang penting dalam analisa numerik. Fungsi
didefinisikan secara rekursif seperti berikut ini:
Tn(x) = 2xTn – 1(x) – Tn – 2(x), n = 2, 3, … ,
T0(x) = 1, T1(x) = x.
fungsi di atas dapat diimplementasikan ke pemrograman
MATLAB sebagai berikut :
function T = ChebT(n)
% Coefficients T of the nth Chebyshev polynomial of the
first kind.
% They are stored in the descending order of powers.
t0 = 1;
t1 = [1 0];
if n == 0
T = t0;
elseif n == 1;
T = t1;
else
for k=2:n
T = [2*t1 0] - [0 0 t0];
t0 = t1;
t1 = T;
end
end
jika koefisien Chebyshev polynomial nya berpangkat 3 maka
bentuk fungsinya diperoleh sebagai berikut :
coeff = ChebT(3)
coeff =
4 0 -3 0
64 Judul Buku
Contoh 2:
Akan dicari nilai dari persamaan x2-x=10, diketahui suatu
persamaan iterasi untuk mencari nilai x sbb: xr+1=1+(1/xr)
untuk r = 0,1,2, …
diberikan nilai Xo=2 ,iterasi berhenti setelah nilai xr+1-
xr<0.0005
Penyelesaian :
clear all
x1=2; % didefinisikan terlebih dahulu nilai Xo=2
err=1; % dibuat nilai error 1 supaya lebih dari 0.0005
while err > 0.0005 % untuk nilai error lebih dari 0.0005
dilakukan perintah seperti dibawah
x2=1+(1/x1); % persamaan untuk mencari nilai x r+1
err=abs(x2-x1);% mencari nilai error
x1=x2; % membuat looping agar nilai x2 yg didapat menjadi
masukkan bagi persamaan diatas end err
err =
2.0429e-004
x1
x1 =
1.6180
Contoh 2:
Buat grafik nilai x nya dari contoh 1 tersebut sampai didapat
nilai error
0.0005!
Penyelesaian :
Pemrograman Linier dengan MATLAB 65
clear all
x1=2;
err=1;
i=1; % dibuat indeks kompenen 1 untuk array x
x=[ ];
x(1)=x1; % membuat elemen pertama array x == x1
while err > 0.0005
i;
x2=1+(1/x1);
err=abs(x2-x1);
x(i+1)=x2; % Untuk menyimpan nilai x yang didapat di
array x
x1=x2;
i=i+1; % Membuat indeks 1 bertambah 1 tiap satu kali
looping
end
t=1:length(x); % membuat array berdasarkan banyaknya
looping
plot(t,x)
Contoh 3 :
Diketahui data porositas dari sebuah sumur bor
Well ID X Y Porosity
1 2280 890 4
2 1240 1210 1,5
3 1651 1290 5,7
4 2169 1230 2,9
5 2059 1690 10,4
6 1722 1630 16,1
7 891 1820 1,9
8 1385 2060 7,7
9 1682 2020 15,2
10 1885 2050 7,6
11 1991 2310 11,9
12 1694 2420 15,8
66 Judul Buku
end
end
well=[ ]; % membuat ruang untuk matriks yang berisi no
sumur
% diambil komponen dimana i <> j dan (i-j) > 0
for i=1:n
for j=1:n
if (i~=j) & (i-j) > 0
wel=[i j];
well=[well;wel];
end
end
end
m=length(well);
% membuat array d_2 yang berisi jarak yg telah
ditentukan
for i=1:m
d_2(i)=d(well(i,1),well(i,2));
end
format short g % membuat tampilan bilangan agar
berbentuk integer
% menampilkan well ID dan jaraknya
disp([well d_2' c]);
Pemrograman Linier dengan MATLAB 67
Contoh 4 :
clear all
% Input Data Koordinat source dan receiver ,t dan s
s=[0,-250;0,-633;1000,0]; % source
r=[2000,-1000]; % receiver
t=[1.509;1.447;0.707]; % waktu tempuh gelombang
n=length(s);
% menghitung kecepatan awal
for i=1:n
pj(i,1)=sqrt((r(1)-s(i,1))^2+(r(2)-s(i,2))^2);
end
v0=mean(pj);
% menghitung t calculate
for i=1:n
t_cal(i,1)=pj(i)/v0;
end
% menghitung delta_t
for i=1:n
del_t(i,1)=t(i)-t_cal(i);
end
% membuat matrix model
blok=2;
sumber=3;
for i=1:sumber
for j=1:blok
M(i,j)=pj(i)/2;
end
end
M(3,:)=[0 ,pj(3)];
% bentuk : M*ds=del_t;
% ds=inv(M)*del_t;
% ds=inv(M'*M)*M'*del_t;
ds=inv(M'*M)*M'*del_t;
for i=1:2
dv(i,1)=(-ds(i)*v0^2)/(1+ds(i)*v0);
end
for i=1:2
v(i,1)=v0+dv(i);
end
fprintf('\nkecepatan V1 adalah : %5.3f\n' ,v(1));
68 Judul Buku
Bab 5
5 MATRIKS DAN VEKTOR
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15]
b =
2 4 6 8 10
1 3 5 7 9
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
a. Transpose Matriks
Jika ingin membuat transpose dari sebuah matriks
dapat dilakukan dengan memberikan tanda apostrope
pada notasi matrik tersebut. Contohnya, jika diketahui
matriks :
1 2 3
P =
4 5 6
maka untuk mendapatkan transpose dari
7 8 9
matriks P adalah dengan mengetikkan perintah berikut di
MATLAB :
» P=[1 2 3;4 5 6;7 8 9]
P =
1 2 3
4 5 6
7 8 9
» Q=P'
Pemrograman Linier dengan MATLAB 71
Q =
1 4 7
2 5 8
3 6 9
atau
» conj(P')
ans =
1 4 7
2 5 8
3 6 9
b. Matriks Kompleks
Jika X adalah suatu matriks kompleks seperti :
1 j
X = maka di MATLAB dapat dientrikan
− j 5 2
sebagai berikut :
» X=[1 j;-j*5 2]
akan menghasilkan :
X =
1.0000 0 + 1.0000i
0 - 5.0000i 2.0000
Catatan bahwa jika Y=X’ maka akan dihasilkan :
» Y=X'
Y =
72 Judul Buku
1.0000 0 + 5.0000i
0 - 1.0000i 2.0000
c. Invers Matriks
Function inv dalam MATLAB digunakan untuk
menghitung invers matriks
Misalkan diketahui matriks A didefinisikan sebagai berikut
A = [1 2 3;4 5 6;7 8 10]
A =
1 2 3
4 5 6
7 8 10
maka
B = inv(A)
B =
-0.6667 -1.3333 1.0000
-0.6667 3.6667 -2.0000
1.0000 -2.0000 1.0000
d. Determinant
Dalam beberapa aplikasi Aljabar linear pengetahuan
tentang determinan dari suatu matriks dibutuhkan. MATLAB
mempunyai fungsi built-in untuk ini yaitu function det yang
dirancang untuk perhitungan determinan.
Misalkan
A = magic(3)
A=
8 1 6
3 5 7
4 9 2
Maka determinan dari A sama dengan
det(A)
ans =
-360
Salah satu metode klasik untuk menghitung
determinan adalah dengan menggunakan ekpansi kofaktor,
dan functionnya dapat dituliskan dalam bentuk :
Function ckl = cofact(A, k, l) menghitung kofaktor ckl dari
akl elemen matriks A
15
end
B = A([1:k-1,k+1:n],[1:l-1,l+1:n]);
ckl = (-1)^(k+l)*det(B);
Misalkan :
A = rand(25);
Adalah matriks dengan ukuran 25x25 yang dibangkitkan dari
bilangan acak berdistribusi uniform dengan interval ( 0, 1 ).
Penggunaan function det diperoleh
flops(0)
det(A)
ans =
-0.1867
flops
ans =
10100
sebagai perbandingannya, dihitung jumlah flops dengan
menggunakan function mydet dan hasilnya adalah sebagai
berikut :
mydet(A)
ans =
-0.1867
flops
ans =
223350
Matriks adjoint atau disingkat adj(A) dari matriks A juga hal
yang menarik dalam aljabar linear. Dan functionnya dapat
dituliskan sebagai berikut :
function B = adj(A)
% Adjoint matrix B of the square matrix A.
[m,n] = size(A);
if m ~= n
error('Matrix must be square')
76 Judul Buku
end
B = [];
for k = 1:n
for l=1:n
B = [B;cofact(A,k,l)];
end
end
B = reshape(B,n,n);
2 3
4 5
6 7
» B=[1 0;2 3;6 7]
B =
1 0
2 3
6 7
» C=A+B
C =
3 3
6 8
12 14
» D=A-B
D =
1 3
2 2
78 Judul Buku
0 0
Contoh 2 :
Jika diketahui vektor x adalah
5
x =
4 dan y merupakan mengurangi 1 dari setiap
6
elemen vektor x, y=x-1, maka dengan MATLAB hal di atas
dapat dikerjakan sebagai berikut :
» x=[5;4;6]
x =
5
4
6
» y=x-1
y =
4
3
5
b. Perkalian Matriks
1. Perkalian Matriks dengan skalar
Jika A adalah suatu matriks dan c adalah suatu skalar
maka hasil kali cA adalah matriks yang diperoleh
dengan mengalikan masing-masing entri dari A oleh c.
Contoh :
2 3
A =
4 5
dan c=8,
6 7
Pemrograman Linier dengan MATLAB 79
1 2 4
80 Judul Buku
2 6 0
4 1 4 3
0 -1 3 1
2 7 5 2
» C=A*B
C =
12 27 30 13
8 -4 26 12
Contoh 2.
» P=A'
P =
1 2
2 6
4 0
» D=P*B
Pemrograman Linier dengan MATLAB 81
Diketahui matriks a :
» a=[2 3 4 5 6;-4 -5 -6 -7 -8;3 5 7 9 1;4 6 8 10 12;
-2 -3 -4 -5 -6]
a =
2 3 4 5 6
-4 -5 -6 -7 -8
3 5 7 9 1
4 6 8 10 12
-2 -3 -4 -5 -6
» v=[1 3 5];
» b=a(v,2)
b =
3
5
-3
» c=a(v,:)
c =
2 3 4 5 6
Pemrograman Linier dengan MATLAB 83
3 5 7 9 1
-2 -3 -4 -5 -6
» Q=[5 6;7 8]
Q =
5 6
7 8
» P*Q
ans =
19 22
43 50
dapat dilihat bahwa hasil perkalian di atas merupakan hasil
perkalian dari matriks dengan operasi standar.
» P.*Q
Pemrograman Linier dengan MATLAB 85
ans =
5 12
21 32
hasil di atas merupakan hasil perkalian elemen per
elemen dari matriks P dan Q.
» P.^Q
ans =
1 64
2187 65536
1
2
3
4
5
maka
angle = acos((a*b)/(norm(a)*norm(b)))
angle =
1.1303
function cp = crossprod(A)
% Cross product cp of a set of vectors that are stored in
columns of A.
[n, m] = size(A);
if n ~= m+1
error('Number of columns of A must be one less than the
number of
rows')
end
if rank(A) < min(m,n)
cp = zeros(n,1);
else
C = [ones(n,1) A]';
cp = zeros(n,1);
88 Judul Buku
for j=1:n
cp(j) = cofact(C,1,j);
end
end
Misalkan
A = [1 -2 3; 4 5 6; 7 8 9; 1 0 1]
A =
1 -2 3
4 5 6
7 8 9
1 0 1
perkalian silang vektor kolom A adalah
cp = crossprod(A)
cp =
-6
20
-14
24
Vektor cp adalah orthogonal terhadap kolom dalam ruang
matriks A. Untuk membuktikannya adalah dengan
menghitung perkalian vektor-matriks :
cp'*A
ans =
0 0 0
Pemrograman Linier dengan MATLAB 89
Bab 6
6 SISTEM PERSAMAAN LINEAR
DAN NILAI EIGEN
90 Judul Buku
» b=[36;40;70]
b =
Pemrograman Linier dengan MATLAB 93
36
40
70
» det(A)
ans =
-70
» x=inv(A)*b
x =
16.0857
12.7714
-12.6000
4.08x1 - x2 =2.90
SPL di atas adalah suatu persamaan yang inconsisten,
sehingga untuk menyelesaikan sistem ini digunakan
script MATLAB berikut :
a=[1 1;2.05 -1;3.06 1;-1.02 2;4.08 -1]
b=[1.98;0.95;3.98;0.92;2.90]
x=a\b %menghitung penyelesaian kuadrat terkecil
r=(a*x-b)' %residu ini mempunyai normal terkecil
Contoh 2.
» A=[0 1;-1 0]
A =
0 1
-1 0
» eig(A)
ans =
98 Judul Buku
0 + 1.0000i
0 - 1.0000i
karena pemecahan-pemecahan persamaan di atas adalah
imaginer yaitu λ=i dan λ=-I dan karena dianggap bahwa
semua skalar adalah bilangan riil maka A tidak
mempunyai nilai eigen.
Contoh 3:
» C=[0 1 0;0 0 1;4 -17 8]
C =
0 1 0
0 0 1
4 -17 8
» eig(C)
ans =
0.2679
3.7321
4.0000
lambda =
-1.0000 0 0
0 -2.0000 0
0 0 -3.0000
100 Judul Buku
Bab 7
7 PEMROGRAMAN ANALISA
NUMERIK DENGAN MATLAB
8
MATLAB mempunyai banyak tool yang sangat sesuai
untuk perhitungan numerik. Bab ini akan membahas tentang
menhitung akar-akar dari suatu persamaan, interpolasi,
penyelesaian diferensial dan integral secara numerik, dan
penyelesaian persamaan differensial biasa.
104 Judul Buku
format long
r = roots(p)
r =
-1.00000000000000
0.16666666666667 + 0.55277079839257i
0.16666666666667 - 0.55277079839257i
untuk memeriksa tingkat kebenaran hasil yang diperoleh
maka dapat dilakukan dengan cara menggunakan function
polyval, dan hasilnya adalah :
err = polyval(p, r)
err =
1.0e-014 *
0.22204460492503
0 + 0.01110223024625i
0 - 0.01110223024625i
y = cos(x) - x;
Untuk menghitung pembuat nol dengan MATLAB maka
digunakan function fzero.
r = fzero('f1', 0.5)
r =
0.73908513321516
Untuk memeriksa error dari hasil perhitungan adalah dengan
menggunakan function feval :
err = feval('f1', r)
err =
0
Dalam kasus ini bila pembuat nolnya adalah dalam
bentuk interval maka dalam MATLAB untuk perhitungannnya
dapat dimasukkan 2 elemen vektor yang merupakan interval
awal. Contohnya dipilih interval [ 0 1]
r = fzero('f1', [0 1])
r =
0.73908513321516
(niter == maxiter)
break
end
end
r = xnew;
Berikut ini adalah sistem non linear
f1(x) = x1 + 2x2 – 2,
f2(x) = x12 + 4x22 – 4
mempunyai pembuat nol pasti r = [0 1]T dan r = [2 0]T .
Functions fun1 dan J1 mendefinisikan sistem persamaan
dan matriks Jacobian. M-file nya seperti berikut ini:
function z = fun1(x)
z = zeros(2,1);
z(1) = x(1) + 2*x(2) - 2;
z(2) = x(1)^2 + 4*x(2)^2 - 4;
function s = J1(x)
s = [1 2;2*x(1) 8*x(2)];
Misalkan
x0 = [0 0];
maka
[r, iter] = NR('fun1', 'J1', x0, eps, eps, 10)
¨??? Error using ==> nr
Try a new initial approximation x0
110 Judul Buku
function s = J2(x)
s = [1 1;
2*x(1)*cos(x(1)^2 + x(2)^2)-1 2*x(2)*cos(x(1)^2 +
x(2)^2)];
dengan nilai awalnya adalah :
x0 = [0 1];
sehingga pembuat nol r diperoleh
[r, niter] = NR('fun2', 'J2', x0, eps, eps, 10)
r =
Pemrograman Linier dengan MATLAB 111
0.48011911689839
0.51988088310161
niter =
5
bila nilai awalnya
x0 = [1 1];
[r, iter] = NR('fun2', 'J2', x0, eps, eps, 10)
r =
-0.85359545600207
1.85359545600207
iter =
10
7.3 Interpolasi
Jika kita melakukan suatu penelitian terhadap n+1 titik
pengamatan maka akan diperoleh pasangan data (x0, y0), (x1,
112 Judul Buku
yi = val(:);
function a = divdiff(x, y)
% Divided differences based on points stored in arrays x and y.
n = length(x);
for k=1:n-1
y(k+1:n) = (y(k+1:n) - y(k))./(x(k+1:n) - x(k));
end
a = y(:);
Untuk data dari contoh sebelumnya maka akan dihitung
interpolasi polinomial dengan menggunkan bentuk Newton's
pada derajat terbesar adalah 5, dengan menggunakan
function Newtonpol. Selain itu juga akan ditampilkan grafik
dari titik-tik interpolasi tersebut
[yi, a] = Newtonpol(x, y, xi);
plot(x, y, 'o', xi, yi), title('Quintic interpolant of y = sin(2x)')
end
dengan mengetikkan showint di dalam Command
Window maka prompt akan mmeinta untuk megisikan nilai
parameter m= merupakan jumlah polinomial interpolasi
yang diinginkan untuk dibangkitkan, dan juga harus diisikan
nilai derajat interpolasi polinomial. Dalam contoh ini di ambil
m = 1 dan n = 9. Hasilnya adalah seperti gambar di bawah
ini :
X -2 -1 0 1 2
[x, y] = meshgrid(-1:.25:1);
z = sin(x.^2 + y.^2);
[xi, yi] = meshgrid(-1:.05:1);
zi = interp2(x, y, z, xi, yi, 'linear');
surf(xi, yi, zi), title('Bilinear interpolant to sin(x^2 + y^2)')
∫ f ( x)dx = ∑wk f ( x k )
a 1
∫ f ( x)dx = ∑wk f ( x k )
a 1
if n < 2
error(' Number of nodes must be greater than 1')
end
x = (0:n-1)/(n-1);
f = 1./(1:n);
V = Vander(x);
V = rot90(V);
w = V\f';
w = (b-a)*w;
x = a + (b-a)*x;
x = x';
s = feval(fun,x,varargin{:});
s = w'*s;
function w = exp2(x)
% The weight function w of the Gauss-Hermite quadrarure
formula.
w = exp(-x.^2);
approx_v = [];
for n =2:4
Pemrograman Linier dengan MATLAB 131
∫ p( x) f ( x)dx = ∑wk f ( x k )
a k =1
Bobot Nama
p(x) Interval [a,b] Quadratur
1 [-1,1] Gauss-Legendre
132 Judul Buku
1/ 1 − x [-1,1] Gauss-
Chebyshev
e-x [0, ∞) Gauss – Laquerre
e −x 2 (∞, -∞) Gauss Hermiet
Bentuk di atas dikenal dengan nama bobot formula Gauss,
semua positif dan simpul –simpulnya adalah akar-akar dari
golongan polinomial yang ortogonal, dengan masing-masing
diketahui fungsi bobot p(x) nya.
Berikut ini function untuk perhitungan numerik dari
integral tertentu menggunakan formula quadratur Gauss
yaitu Gquad1 dan Gquad2.
function [s, w, x] = Gquad1(fun, a, b, n, type, varargin)
% Numerical integration using either the Gauss-Legendre (type =
'L')
% or the Gauss-Chebyshev (type = 'C') quadrature with n (n > 0)
nodes.
% fun is a string representing the name of the function that is
% integrated from a to b. For the Gauss - Chebyshev quadrature
% it is assumed that a = -1 and b = 1.
% The output parameters s, w, and x hold the computed
approximation
% of the integral, list of weights, and the list of nodes,
% respectively.
d = zeros(1,n-1);
if type == 'L'
k = 1:n-1;
d = k./(2*k - 1).*sqrt((2*k - 1)./(2*k + 1));
fc = 2;
J = diag(d,-1) + diag(d,1);
[u,v] = eig(J);
[x,j] = sort(diag(v));
Pemrograman Linier dengan MATLAB 133
w = (fc*u(1,:).^2)';
w = w(j)';
w = 0.5*(b - a)*w;
x = 0.5*((b - a)*x + a + b);
else
x = cos((2*(1:n) - (2*n + 1))*pi/(2*n))';
w(1:n) = pi/n;
end
f = feval(fun,x,varargin{:});
s = w*f(:);
w = w';
approx_v = [];
for n=2:8
approx_v = [approx_v; (2/sqrt(pi))*Gquad1('exp2', 0, 1,
n, 'L')];
end
approx_v
approx_v =
0.84244189252255
0.84269001848451
0.84270117131620
0.84270078612733
0.84270079303742
0.84270079294882
134 Judul Buku
0.84270079294972
exact_v = erf(1)
exact_v =
0.84270079294971
f = zeros(1,n);
fc = sqrt(pi);
end
J = diag(d,-1) + diag (f) + diag(d,1);
[u,v] = eig(J);
[x,j] = sort(diag(v));
w = (fc*u(1,:).^2)';
w = w(j);
f = feval(fun,x,varargin{:});
s = w'*f(:);
function z = pow(x, e)
% Power function z = x^e
z = x.^e;
dalam contoh ini akan diakprosimasi fungsi gamma untuk t =
1, 1.1, … , 2 dan membandingkan hasilnya dengan hasil
yang diperoleh dengan menggunakan fungstion built in
MATLAB yaitu function gamma. File scriptnya adalah
testmyg untuk menghitung nilai aproksimasi fungsi gamma
menggunakan dua fungsi yaitu functions mygamma and
gamma.
% Script testmyg.m
format long
disp(' t mygamma gamma')
disp(sprintf('\n
_____________________________________________________'))
for t=1:.1:2
s1 = mygamma(t);
s2 = gamma(t);
disp(sprintf('%1.14f %1.14f %1.14f',t,s1,s2))
end
t mygamma gamma
_____________________________________________________
1.00000000000000 1.00000000000000 1.00000000000000
1.10000000000000 0.95470549811706 0.95135076986687
1.20000000000000 0.92244757458893 0.91816874239976
1.30000000000000 0.90150911731168 0.89747069630628
1.40000000000000 0.89058495940663 0.88726381750308
1.50000000000000 0.88871435840715 0.88622692545276
1.60000000000000 0.89522845323377 0.89351534928769
1.70000000000000 0.90971011289336 0.90863873285329
1.80000000000000 0.93196414951082 0.93138377098024
1.90000000000000 0.96199632935381 0.96176583190739
2.00000000000000 1.00000000000000 1.00000000000000
∫∫ f ( x, y )dxdy
D
f ( x + h) − f ( x − h)
f ' ( x) =
2h
dimana h adalah h ukuran langkah awal. Langkah pertama
dari metode ini adalah menghitung barisan aproksimasi
untuk f'(x) menggunakan beberapa nilai h. Bila aproksimasi
selanjutnya ditemukan untuk nilai h sebelumnya maka dibagi
dua. Langkah berikutnya adalah menggunakan ekstrapolasi
Richardson's .
Function numder berikut mengimplementasikan metode
untuk menghitung integrasi numerik.
s = zeros(n-j+1,1);
s = d(j:n) + diff(d(j-1:n))/(l - 1);
d(j:n) = s;
l = 4*l;
end
der = d(n);
function y = derexp2(x)
% First order derivative of f(x) = exp(-x^2).
Pemrograman Linier dengan MATLAB 143
y = -2*x.*exp(-x.^2);
Berikut ini adalah hasil yang diperoleh denan menggunakan
function testndr, dengan mengetikkan :
testnder(0.01, 10)
dan diperoleh hasil :
x numder exact
_____________________________________________________
0.10000000000000 -0.19800996675001 -0.19800996674983
0.20000000000000 -0.38431577566308 -0.38431577566093
0.30000000000000 -0.54835871116311 -0.54835871116274
0.40000000000000 -0.68171503117430 -0.68171503117297
0.50000000000000 -0.77880078306967 -0.77880078307140
0.60000000000000 -0.83721159128436 -0.83721159128524
0.70000000000000 -0.85767695185699 -0.85767695185818
0.80000000000000 -0.84366787846708 -0.84366787846888
0.90000000000000 -0.80074451919839 -0.80074451920129
format long
tspan = [0 .25 .5 .75 1]; y0 = 1;
[t1 y1] = ode23('eq1', tspan, y0);
[t2 y2] = ode45('eq1', tspan, y0);
Untuk membandingkan hasil yang diperoleh, maka dibuat
tiga kolom untuk hasil evaluasinya dan nilai y diperoleh
dengan bantuan function ode23 dan ode45.
[t1 y1 y2]
ans =
0 1.00000000000000 1.00000000000000
0.25000000000000 0.94118221525751 0.94117646765650
0.50000000000000 0.80002280597122 0.79999999678380
146 Judul Buku
BAB 9
9 Pemrograman MATLAB untuk
Kriptografi
Contoh 1.
Program ini digunakan untuk melakukan proses
merubah data dari bentuk asli ke bentuk baru (enkripsi) dan
proses pengembalian dari bentuk baru ke bentuk asli
(dekripsi). Untuk proses cipher yang digunakan
menggunakan metode transposisi yaitu dengan mengubah
posisi karakter-karakternya dengan cara tertentu. Pada
bagian ini akan digunakan 2 cara, yaitu:
1. Metode zig-zag menggunaan n baris
Pada metode ini pada prinsipnya pesan yang akan
dikirimkan ditulis perbaris sebanyak baris yang
ditentukan (sesuai dengan nilai n nya). Dengan
sebelumnya carakter disusun dalam posisi baris dan
kolom dengan urutan penyusunan sebagai berikut :
baris ke-1 dengan menyusun karakter dengan
urutan menggunakan jeda ke-1 = 2*n baris – 2
dan jeda 2 = 0
baris ke-2 dengan menyusun karakter dengan
urutan menggunakan jeda ke-1 sebelumnya
dikurangi 2 dan jeda ke-2 dengan menambah
nilai jeda ke-2 sebelumnya dengan 2
demikian seterusnya sampai baris ke-n
Ilustrasi :
Plaintext = a1 a2 a3 a4 … an
Dikirim menggunakan metode zig-zag : n baris
Pemrograman Linier dengan MATLAB 153
2. Metode permutasi
Prinsip pada metode ini plaintext dibagi menjadi
beberapa kolom sesuai dengan banyak permutasi
yang aan digunakan, kemudian masing-masing kolom
dilakukan proses transpose sehingga menjadi baris
kemudian ciphertext dihasilkan dengan menyusun
barisan karakter sesuai dengan urutan permutasi yang
diinginkan.
Ilustrasi :
Permutasi yang digunakan misalnya a1 a2 a3 ..
an
Maka plaintext dibagi menjadi n kolom
Kolom 1 a1 a2 a3 .. an
Kolom 2
Kolom 3
Kolom n
154 Judul Buku
Permasalahan 1 :
Fungsi encipher dan decipher menggunakan proses
transposisi dengan formula zig-zag.
a. Fungsi Enchiper
Fungsi enchiper diberi nama function enkripsi
function c=enkripsi(x,baris)
n=size(x,2);
jeda1=2*baris-2;
jeda2=0;
c=[];
for i=1:baris
k=i;
c=[c x(k)];
while k<=n
k=k+jeda1;
if k<=n & jeda1~=0
c=[c x(k)];
end
k=k+jeda2;
if k<=n & jeda2~=0
c=[c x(k)];
end
end
Pemrograman Linier dengan MATLAB 155
jeda1=jeda1-2;
jeda2=jeda2+2;
end
» baris=5
baris =
5
» c=enkripsi(x,baris)
c =
M UDAHARIAMHMMA
b. Fungsi Dechiper
Fungsi dechiper diberi nama function dekrip
function c=dekrip(x,baris)
n=size(x,2);
jeda1=2*baris-2;
jeda2=0;
pos=0;
for i=1:baris
k=i;
pos=pos+1;
156 Judul Buku
deciper(k)=[x(pos)];
while k<=n
k=k+jeda1;
if k<=n & jeda1~=0
pos=pos+1;
deciper(k)=[x(pos)];
end
k=k+jeda2;
if k<=n & jeda2~=0
pos=pos+1;
deciper(k)=[x(pos)];
end
end
jeda1=jeda1-2;
jeda2=jeda2+2;
end
c=[];
for i=1:n
c=[c deciper(i)];
end
» baris=5
baris =
Pemrograman Linier dengan MATLAB 157
5
» d=dekrip(x,baris)
d =
MUHAMMAD ARHAMI
Permasalahan 2 :
Fungsi encipher dan decipher menggunakan proses
transposisi dengan formula permutasi.
a. Fungsi Enchiper
Fungsi enchiper diberi nama function enkripsi
function c=enkripsiP(x,permutasi)
k=size(permutasi,2);
n=size(x,2);
y=mod(n,k);
if y==0
b=n/k;
else
b=((n-y)/k)+1;
end
index=1;
for i=1:b
for j=1:k
if index>n
ciper(i,j)=[' '];
158 Judul Buku
else
ciper(i,j)=[x(index)];
end
index=index+1;
end
end
cb=1:1:b;
ciperp=ciper(cb,permutasi);
d=ciperp(:);
c=d';
» permutasi=[3 5 1 4 2 6]
permutasi =
3 5 1 4 2 6
» c=enkripsiP(x,permutasi)
c =
b. Fungsi Dechiper
Fungsi dechiper diberi nama function dekrip
function c=dekripP(x,permutasi)
k=size(permutasi,2);
n=size(x,2);
y=mod(n,k);
if y==0
b=n/k;
else
b=((n-y)/k)+1;
end
index=1;
for i=1:k
for j=1:b
deciper(i,j)=[x(index)];
index=index+1;
end
end
for i=1:k
j=1;
while permutasi(j)~=i
j=j+1;
end
for l=1:b
deciperp(i,l)=deciper(j,l);
end
160 Judul Buku
end
deciperk=deciperp(:);
c=deciperk';
» permutasi=[3 5 1 4 2 6]
permutasi =
3 5 1 4 2 6
» d=dekripP(x,permutasi)
d =
Contoh 2.
1. Diket : matrik permutasi = m = [7 3 5 6 1 4 2]
Kunci = k = sugengraharjo
Spasi antar kata = X
Plaintext = p = SELAMA UJIAN BERLANGSUNG
TIDAK BOLEH MEMINJAM BUKU
TEMANNYA
Pemrograman Linier dengan MATLAB 161
Ciphertext=QCDSPSNSJTMLUCMSHJFBLQNNPLDPTL
SHNQMXJJXFFL
Buatlah :
a. enkripsi plaintext dengan transposisi kemudian
dengan monoalfabetik
b. dekripsi ciphertext dengan monoalfabetik kemudian
dengan transposisi
Program yang digunakan untuk enkripsi plaintext
dengan algoritma permutasi memanggil fungsi blok dalam
program fungsi permutasi (transposisi). Program untuk
enkripsi monoalfabetik memanggil program kuncibaru.
Fungsi blok gunanya untuk membuat blok pesan
menjadi matrik dengan jumlah kolom yang
sama dengan jumlah elemen matrik
permutasinya.
function b=blok(p,sblok)
sisa=input('masukkan abjad pengisi blok
dibelakang : ','s');
sisa=upper(sisa);
n=size(p,2);
nblok=ceil(n/sblok);
p=upper(p);
temp=[];
for i=1:sblok*nblok-n
temp=[temp sisa];
end;
p=[p temp];
for j=1:nblok
b(j,1:sblok)=p((j-1)*sblok+1:j*sblok);
end
162 Judul Buku
pjkunci=[];
for x=1:round(i/j);
pjkunci=[pjkunci abskunci];
end;
for x=1:rem(i,j);
pjkunci=[pjkunci abskunci(x)];
end;
%encripsi
hasil=[];
for x=1:i;
%if penampung(x)~=32;
hasil(x)=penampung(x)-65;
if hasil(x)>90;
hasil(x)=hasil(x)-26;
end;
%end;
end;
v=setstr(hasil);
%disp(v);
>> m = [7 3 5 6 1 4 2]
m =
7 3 5 6 1 4 2
>> k = 'sugengraharjo'
k =
sugengraharjo
>> p = 'SELAMA UJIAN BERLANGSUNG TIDAK BOLEH MEMINJAM
BUKU TEMANNYA'
p =
Pemrograman Linier dengan MATLAB 167
temp=[];
for p=1:n
for q=1:n
if asli(p)==trans(q)
temp=[temp asli(q)];
end;
end;
end;
disp(temp)
%baca matriks ciphertext
dt=[];
for i=1:a
for j=1:z
for k=1:n
if temp(k)==j;
dt(i,k)=b(i,j);
end;
end;
end;
end;
disp('pesan aslinya dalam blok adalah:');
disp(setstr(dt));
%menyatukan blok
d=[];
for i=1:a
for j=1:z
d=[d dt(i,j)];
end;
170 Judul Buku
end;
dt=setstr(d);
end;
end;
end;
>> k = 'sugengraharjo'
k =
sugengraharjo
>> c='QCDSPSNSJTMLUCMSHJFBLQNNPLDPTLSHNQMXJJXFFL'
c =
QCDSPSNSJTMLUCMSHJFBLQNNPLDPTLSHNQMXJJXFFL
>> jawab=soal1b(m,k,c)
hasil dekripsi dengan monoalfabetik adalah :
TLMASAEAIURQBLRAHINKQTEESQMSUQAHETRXIIXNNQ
hasil bloknya menjadi :
172 Judul Buku
TLMASAE
AIURQBL
RAHINKQ
TEESQMS
UQAHETR
XIIXNNQ
pesan aslinya dalam blok adalah:
SELAMAT
QLIBURA
NQAKHIR
QSEMEST
ERQTAHU
NQINIXX
hasil dekripsi dengan transposisi adalah :
jawab =
SELAMATQLIBURANQAKHIRQSEMESTERQTAHUNQINIXX
2. Diket : nkunci = 3
kunci1= programmagister
kunci2 = ilmukomputer
kunci3 = fakultasmipa
kunci vigenere= kv = pilprescapres
plaintext = p = pilihlah presiden dan wakil
presiden
sesuai hati nurani anda
spasi antar kata = Q
ciphertext=c=TXQXGJPESVZBSZKWUTMPDLMSTVYCYM
Pemrograman Linier dengan MATLAB 173
IYTKDMZTKCYCDOBPZK
ukuran blok = 8
Buatlah program
a. enkripsi plaintext dengan polialfabetik kemudian
dengan vigenere
b. dekripsi ciphertext dengan vigenere kemudian
dengan polialfabetik
Program yang digunakan untuk enkripsi plaintext dengan
algoritma polialfabetik fungsi blok dan fungsi kuncibaru .
kemudian dienkripsi lagi dengan program fungsi vigenere.
Untuk fungsi blok dan fungsi kuncibaru sama seperti listing
program pada no 1.
l=b(i,j)-'A'+1;
c=[c alfakunci(k,l)];
end;
end;
for x=1:rem(i,j);
pjkunci=[pjkunci abskunci(x)];
end;
%menambahkan pesan+kunci dalam numerik
penampung=[];
for x=1:i;
penampung(x)=abspesan(x)+pjkunci(x);
end;
Pemrograman Linier dengan MATLAB 175
%encripsi
hasil=[];
for x=1:i;
hasil(x)=penampung(x)-65;
if hasil(x)>90;
hasil(x)=hasil(x)-26;
end;
end;
%merubah kembali kehuruf
v=setstr(hasil);
nkunci =
3
>> p = 'pilihlah presiden dan wakil presiden sesuai hati
nurani anda'
p =
pilihlah presiden dan wakil presiden sesuai hati nurani
anda
>> vg='pilprescapres'
vg =
pilprescapres
>> blok=8
blok =
8
>> s2a=soal2a(blok,p,nkunci,vg)
masukkan huruf pengganti spasi : q
pesan barunya menjadi :
pilihlahQpresidenQdanQwakilQpresidenQsesuaiQhatiQnuraniQa
nda
masukkan abjad pengisi blok dibelakang : x
Masukin kunci :programmagister
Masukin kunci :ilmukomputer
Masukin kunci :fakultasmipa
hasil enkripsi polialfabetiknya adalah :
JTCTSCPSHGJKNEUKEJUFEJWFBTCKJLANEUKDHNKNRFIJMFQIKFULPFTKI
DUIXXXX
hasil enkripsi dengan vigenerenya adalah :
s2a =
Pemrograman Linier dengan MATLAB 177
YBNIJGHUHVAOFTCVTAYXGJLWFLRSUARRWWKSYRCCZQXAQ
XSIZWYDENEZZHMKXMOB
if hasil(x)<65;
hasil(x)=hasil(x)+26;
end;
end;
%merubah kembali kehuruf
dv=setstr(hasil);
end;
end;
%merubah kembali ke huruf
bp=setstr(c);
>> blok=8
blok =
180 Judul Buku
8
>> c='TXQXGJPESVZBSZKWUTMPDLMSTVYCYMIYTKDMZTKCYCDOBPZK'
c =
TXQXGJPESVZBSZKWUTMPDLMSTVYCYMIYTKDMZTKCYCDOBPZK
>> s2b=soal2b(blok,c,nkunci,vg)
hasil dekripsi dengan vigenerenya adalah :
EPFIPFXCSGIXAKCLFCIXBLXBPDJUNXRUBIDXIPSNQROXXXXK
Masukin kunci :programmagister
Masukin kunci :ilmukomputer
Masukin kunci :fakultasmipa
hasil dekripsi polialfabetiknya adalah :
s2b =
JANGANXLUPAXKEMBALIXKEXKAMPUSXBULANXAGUSTUSXXX
XC
Fungsi polibaru
function p=polibaru(kunci,baris,text)
alfabet1='A':'P';
alfabet2='R':'Z';
alfabet=[alfabet1 alfabet2];
text=upper(text);
kunci=kuncibaru(upper(kunci));
disp('kuncinya menjadi: ');
disp(kunci);
alfabet=[kunci setdiff(alfabet,kunci)];
mat_kunci=blok(alfabet,baris);
disp('matrik kuncinya adalah');
disp(mat_kunci);
n=size(text,2);
if mod(n,2)==1
text=[text 'X'];
n=size(text,2);
end;
p=[];
for i=1:n
if text(i)=='Q'
text(i)='X';
n=size(text,2);
end;
end;
for j=1:2:n
[baris1,kolom1]=find(mat_kunci==text(j));
[baris2,kolom2]=find(mat_kunci==text(j+1));
182 Judul Buku
if text(j)==text(j+1)
p=[p text(j) 'X' text(j+1)];
elseif baris1==baris2
kolom1=kolom1+2;
kolom2=kolom2+2;
if kolom1>5
kolom1=1;
end;
if kolom2>5
kolom2=1;
end;
p=[pmat_kunci(baris1,kolom1)mat_kunci(baris2
,k olom2)];
elseif kolom1==kolom2
baris1=baris1+2;
baris2=baris2+2;
if baris1>5
baris1=1;
end;
if baris2>5
baris2=1;
end;
p=[pmat_kunci(baris1,kolom1)mat_ku
nci(baris2,kolom2)];
elseif (baris1~=baris2) & (kolom1~=kolom2)
p=[pmat_kunci(baris1,kolom2)mat_kunci
(baris2,kolom1)];
end;
end;
disp('Hasil CIPHER-nya :')
Pemrograman Linier dengan MATLAB 183
>> p='berikanyangterbaikbuatsaudaraanda'
p =
berikanyangterbaikbuatsaudaraanda
>> pb=polibaru(k,5,p)
kuncinya menjadi:
DILARNGMEYOTK
matrik kuncinya adalah
DILAR
NGMEY
OTKBC
FHJPS
UVWXZ
Hasil CIPHER-nya :
pb = XPDABLMNDEHVYAXBLTOXIBPRDODDAXAFOBA
3 1
4. Diket : m =
7
4
184 Judul Buku
Penyelesaian
untuk menjawab soal 4a diperlukan program fungsi hill yang
digabungkan dengan program fungsi pesanbaru untuk
memasukkan abjad pengganti spasi.
>> p=pesanbaru(plaintext)
masukkan huruf pengganti spasi : x
p =
dilarangXmerokokXdiXlantaiXtigaXgedungXsic
>> c=hill(m,p)
c =
RBHZZPTLDBDSAIAIURVSHZGLIGKDECXOWGDXTLJZA
M
end;
end;
ki=mod(j*kij,26);
end;
fungsi dhill
function d=dhill(k,text)
text=upper(text);
co=size(k,2);
b=blok(text,co);
bb=b';
x=abs(bb)-65;
ki=invers(k);
xx=ki*x;
yy=mod(xx,26);
y=char(yy+65);
m=[];
for i=1:size(y,2)
for j=1:size(y,1)
m=[m y(j,i)];
d=m;
end;
end;
>> c='KCHZESKBOWNTSWBGRBCXPINASQKB'
c =
KCHZESKBOWNTSWBGRBCXPINASQKB
>> hsl = dhill(m,c)
hsl =
SILAKANXMEROKOKXDIXLAPANGANX
Pemrograman Linier dengan MATLAB 189
BAB 10
10 Graphic User Interfaces
'plot(fdat,pdat);xlabel(X);ylabel(Y);');
linlogBtn = uicontrol('style','pushbutton',...
'string','lin-log',...
'position',[240,395,40,20],...
'callback',...
'semilogy(fdat,pdat);xlabel(X);ylabel(Y);');
loglinBtn = uicontrol('style','pushbutton',...
'string','log-lin',...
'position',[280,395,40,20],...
'callback',...
'semilogx(fdat,pdat);xlabel(X);ylabel(Y);');
loglogBtn = uicontrol('style','pushbutton',...
'string','log-log',...
'position',[320,395,40,20],...
'callback',...
'loglog(fdat,pdat);xlabel(X); ylabel(Y);');
% Create exit pushbutton with red text.
exitBtn = uicontrol('Style','pushbutton',...
'string','EXIT','position',[510,395,40,20],...
'foregroundcolor',[1 0 0],'callback','close;');
% pressure vectors
pdat = data(2:2:length(data));
fdat = data(1:2:length(data));
% Plot pressure signal in a lin-lin diagram
plot(fdat,pdat);
% Define suitable axis labels
xlabel('Frequency, [Hz]');
ylabel('Pressure amplitude, [Pa]');
setelah m-filenya selesai, maka di command MATLAB
(diprompt nya) diketikkan specplot, maka akan muncul :
BAB 11
11 Pemrograman Linier
dengan MATLAB
11.1 Pendahuluian
Program linier merupakan salah satu cabang riset
operasi yang khusus yang terdiri dari fungsi objektif dan
kendalanya yang kedua-duanya linier. Bentuk umum dari
program linier ini adalah:
Maks
Z=p1x1 + p2x2 +…+ pnxn
Kendala
a11x1 + a12x2 +…+ a1nxn ≤ a1
a21x1 + a22x2 +…+ a2nxn ≤ a2
.
.
.
am1x1 + am2x2 +…+ amnxn ≤ am
x1 , x2,…, xn ≥ 0
ada beberapa terminologi dalam program linier
diantaranya adalah :
• daerah feasible yaitu daerah yang memenuhi
semua kendala
• Vertex yaitu titik potong dua kendala
• Vertex feasible yaitu vertek yang terletak pada
daerah feasible.
Pemrograman Linier dengan MATLAB 195
j = [];
for k =1:n
c = d(:,k);
for l=k+1:n
if norm(c - d(:,l),'inf') <= 100*eps
j = [j l];
end
end
end
if ~isempty(j)
j = sort(j);
d(:,j) = [ ];
end
format long
eps
ans =
2.220446049250313e-016
format short
m = length(a);
c = 1:m;
a = a(:);
b = b(:);
l = c(b > 0);
[mi, row] = min(a(l)./b(l));
row = l(row);
function col = MRTD(a, b)
% The Maximum Ratio Test performed on vectors a and b.
% This function is called from within the function dsimplex.
% Output parameter:
% col - index of the pivot column.
m = length(a);
c = 1:m;
a = a(:);
b = b(:);
l = c(b < 0);
[mi, col] = max(a(l)./b(l));
col = l(col);
DAFTAR KEPUSTAKAAN
http://hmgm.geoph.itb.ac.id/data/paper/Tutorial%20Matlab/Tutorial%20I.pdf.
Pendidikan:
1. Sekolah Dasar Negeri No.1 Teupin Raya lulus tahun
1986
2. Sekolah Menengah Pertama Negeri Glumpang
Minyeuk lulus tahun 1989
3. Sekolah Menengah Atas Negeri Beureunuen lulus
tahun 1992
4. FMIPA Jurusan Matematika UNSYIAH, Banda Aceh lulus
tahun 1998
5. Program Pascasarjana Ilmu Komputer UGM
Yokyakarta, lulus tahun 2004
Karya tulis/Ilmiah
1. Rancangan Pelayanan Informasi melalui Teknologi
Informasi Intranet di Politeknik Negeri Lhokseumawe.
2. Perbandingan Algoritma Metode Image Averaging
Berdasarkan Mean dan Median Filtering untuk
Meningkatkan Kualitas Visual Citra.
CURICULUM VITAE PENULIS II
Pemrograman Linier dengan MATLAB 203
Pendidikan Formal :
Th 1984 - 1990 SD Negeri 131 di Palembang
PEMROGRAMAN MATLAB
204 Judul Buku
OLEH:
MUHAMMAD ARHAMI
ANITA DESIANI