Anda di halaman 1dari 10

Nama : Sukma Puspita Ramadhani

NIM : 1800015083

Responsi Praktikum Metode Optimasi B

1. [Membuat Program Sederhana]


Buatlah m-file barisan aritmatika dengan input 𝑎, 𝑏, 𝑛, outputnya 𝑈𝑛 dan 𝑆𝑛
a. Barisan 𝑛 suku pertama
b. Jumlah 𝑛 suku pertama

Penyelesaian :

M-file :
function [Un, Sn] = maritmatika(a, b, n)
Un = [];
Sn = [];
k = 1;

while (k <= n)
Un(k) = a + (k-1)*b;
Sn(k) = k*(a + Un(k))/2;
k = k + 1;
end

Penjelasan m-file :

No. M-file Keterangan


Mendefinisikan m-file dengan
1. function [Un, Sn] = maritmatika(a, b, n) input a, b, dan n dan output Un dan
Sn.
Mendefinisikan Un dan Sn
Un = [];
Sn = [];
sebagai vektor kosong yang akan
2.
diisi dengan nilai semua Un dan
Sn.
Mendefinisikan nilai k = 1 untuk
3. k = 1; digunakan sebagai nilai awal
pengulangan.
while (k <= n) Melakukan pengulangan while
Un(k) = a + (k-1)*b;
untuk mencari semua nilai Un dan
4. Sn(k) = k*(a + Un(k))/2;
k = k + 1; Sn dengan kriteria k <= n. Nilai k
end akan bertambah 1.

Hasil :

>> [Un, Sn] = aritmatika(1, 4, 4)

Diperoleh :

a. Barisan 𝑛 suku pertama


Un =

1 5 9 13

b. Jumlah 𝑛 suku pertama


Sn =

1 6 15 28

2. [Gunakan Metode Newton]


Tentukan nilai 𝑥 yang memenuhi persamaan berikut :
𝛼 = 2𝛽
dengan
𝛼 = 2𝑥 − 2 dan 𝛽 = arctan(𝑥).
Gunakan 2 sebagai nilai awal dan aproksimasilah untuk lima angka decimal pertama.
Penyelesaian :
Diketahui : 𝛼 = 2𝑥 − 2 dan 𝛽 = arctan(𝑥).
Diperoleh :

𝛼 = 2𝛽
2𝑥 − 2 = 2(arctan(𝑥))
2𝑥 − 2(arctan(𝑥)) − 2 = 0
Maka (𝑥) = 2𝑥 − 2(arctan(𝑥)) − 2 = 0

Penjelasan m-file :

No. M-file Keterangan


Mendefinisikan m-file dengan input
1. function [xp,fxp]= mnewton(sf,x1,eps,t) sf, x1, eps, dan t dan output xp dan
fxp.

Mendefinisikan e = eps+10 dan


e = eps+10;
2. k=1;
nilai awal k = 1 yang akan
digunakan untuk perulangan.
Mendefinisikan f sebuah fungsi
f = sym(sf); pada object.
df = diff(f); Melakukakan Derivatif tingkat 1
3. ddf =diff(f,2); terhadap fungsi f.
Melakuakan Derivatif tingkat 2
terhadap fungsi f.
Mendefinisikan nilai elemen
4. X(1) = x1;
pertaman vektor X = x1.
while e>=eps Perulangan berlangsung jika nilai
dfx(k) = double(subs(df,X(k))); e eps maka akan dicari nilai
ddfx(k) =
awal yang baru dengan rumus
double(subs(ddf,X(k)));
5. 𝑓′
X(k+1) = X(k)-(dfx(k)/ddfx(k)); (𝑥 𝑘 )
e(k+1)= abs(X(k+1)-X(k)); 𝑥𝑘+1 = 𝑥𝑘 − 𝑓"
k=k+1; Kemudian mengupdate nilai error
end yang baru dan juga k yang baru.
Menghitung titik minimum lokal
xp = double(X(k));
6. fxp = double(subs(f,xp));
(xp) dan nilai fungsi minimum
(fxp)
if t==1
X = X';
Y = X;
Y(1) = [];
Y(k) = NaN; Membuat dan menampilkan tabel
dfx = dfx';
7. dfx(k) = NaN;
yang berisikan nilai X, dfx, ddfx,
ddfx = ddfx'; dan Y.
ddfx(k) = NaN;
table(X,dfx,ddfx,Y)
end
end

Hasil :

>> sf=@(x) 2*x-2*atan(x)-2;

>> [xp,fxp] = mnewton(sf,2,10e-4,1)


Diperoleh :

ans =

X dfx ddfx Y

2 1.6 0.32 -3

-3 1.8 -0.12 12

12 1.9862 0.002283 -858

-858 2 -6.3328e-09 3.1581e+08

3.1581e+08 2 1.2699e-25 -1.5749e+25

-1.5749e+25 2 -1.0239e-75 1.9533e+75

1.9533e+75 2 5.3675e-226 -3.7261e+225

-3.7261e+225 2 0 Inf

Inf 2 NaN NaN


NaN NaN NaN NaN
xp =
NaN
fxp =
NaN
Aproksimasi lima angka desimal pertama yaitu:
-3 , 12 , -858 , 3.1581e+08 , -1.5749e+25

Plot fungsi fxp terhadap xp :

>> dataX = 2:0.01:10;


>> dataY = 2*dataX-2*atan(dataX)-2;
>> plot(dataX,dataY,'-b')
>> grid on
>> hold on
>> plot(xp,fxp,'*')
Diperoleh :

Pada grafik tidak terlihat nilai x karena ada titik tertentu yang menyebabkan turunan
keduanya 0 sehingga hasil aproksimasinya tak terdefinisi (NaN) seperti pada saat x = -
3.7261e+225 yang membuat hasil turunan keduanya sama dengan 0.

Perhitungan secara manual :

𝑓 (𝑥 ) = 2𝑥 − 2 arctan(𝑥 ) − 1
2
𝑓 ′ (𝑥 ) = 2 −
1 + 𝑥2
4𝑥
𝑓 ′′ (𝑥 ) =
(1 + 𝑥 2 )2
Menentukan aproksimasi lima angka decimal pertama :
2
2−
𝑥 (1) = 2 − 1 + 22 = −3
4(2)
(1 + (2)2 )2

2
2−
1 + (−3)2
𝑥 (2) = −3 − = 12
4(−3)
(1 + (−3)2 )2

2
2−
1 + 12)2
(
𝑥 (3) = 12 − = −858
4(12)
(1 + (12)2 )2

2
2−
1 + (−858)2
𝑥 (4) = −858 − = 3.1581 × 108
4(−858)
(1 + (−858)2 )2

2
2−
1 + ( 3.1581 × 108 )2
𝑥 (5) = 3.1581 × 108 − = −1.5749 × 1025
4(3.1581 × 108 )
(1 + (3.1581 × 108 )2 )2
Nilai yang diperoleh dari perhitungan secara manual sama dengan nilai yang diperoleh
dari MATLAB.

3. [Gunakan Metode Fibonacci]


Tentukan pendekatan minimum fungsi dibawah ini :
𝑔(𝑥 ) = 4𝑥 5 + 8𝑥 4 − 32𝑥 3 + 16𝑥 2 − 128𝑥 + 10
dengan interval [−3,5] dan 𝑑𝑒𝑙𝑡𝑎 = 8.
Penyelesaian :

No. Mfile Keterangan

function [xp,fxp] = mfibonacci(f,a1,b1,delta)


Mendefinisikan m-file dengan
1.
input : f yaitu berupa fungsi, a1
dan b1 sebagai interval dan delta
yang merupakan batas panjang
interval; output : titik minimum
lokal fungsi f.

Mendefinisikan eps = 0.05; Interval L1=b1-


2. eps = 0.05; a1; z sebagai bilangan terkecil awal; dan i=0
L1 =b1-a1;
z = (L1/delta)*(1+2*eps); yang artinya i dimulai dar 0 dan ini belum
i=0; dihitung sebagai iterasi.

3. while (fibonacci(i) < z) Looping dimana perintah akan dijalanan


i =i+1;
end
selama fibonacci masih kurang dari nilai
bilangan terkecil awal (z).

4. N=i-1; Ketika syarat atas masih terpenuhi makan


a = NaN*zeros(N+1,1);
b = NaN*zeros(N+1,1);
akan dijalankan pada program dibawah ini,
rho = NaN*zeros(N+1,1); yaitu :
alpha = NaN*zeros(N+1,1); Mendefinisikan N=i-1;
falpha = NaN*zeros(N+1,1); Mendefinisikan a dan b ;
fbeta = NaN*zeros(N+1,1);
L = NaN*zeros(N+1,1); Mendefinisikan rho dan alpha ;
Mendefinisikan falpha dan fbeta ; dan
Mendefinisikan L.

Mendefinisikan a(1), b(1) dan L(1) sebagai


5. a(1) = a1; nilai a, b dan L awal yang diperolah dari
b(1) = b1;
L(1) = L1; inputan.

Looping untuk k dari 1 sampai N, maka


6. for k=1:N rho(k ) nya didefinisikan untuk k dalam
rho(k) = 1-(fibonacci(N-
k+1)/fibonacci(N-k+2)); range 1:N.

7. if (k<N) Ini adalah kriteria syarat, yaitu jika k lebih


alpha(k) =
a(k)+rho(k)*(b(k)-
besar dari N maka alpha dan beta yang baru
a(k)); beta(k) = didefinisikan seperti dalam program.
a(k)+(1-rho(k))*(b(k)-
a(k));

8 else jika syarat if di atas tidak terpenuhi, yaitu k


alpha(k) = a(k)+(rho(k)-
. eps)*(b(k)-a(k)); beta(k) =
tidak lebih kecil dari N maka alpha dan beta
a(k)+(1-(rho(k)-eps))*(b(k)- yang baru yang diambil adalah seperti yang
a(k)); end didefinisikan dalam else.

9. falpha(k) = f(alpha(k)); Kemudian mendefinisikan falpha dan fbeta


fbeta(k) = f(beta(k));
yang nilainya nantinya akan berubah.

10. if falpha(k) <fbeta(k) Ini adalah kriteria syarat, yaitu jika falpha
a(k+1) = a(k);
b(k+1) = beta(k);
yang baru masih lebih kecil dari fbeta maka
didefinsikan a dan b yang baru dengan a =
a(k) dan b= beta(k).

11. else jika syarat if diatas tidak terpenuhi, yaitu


a(k+1) = alpha(k);
b(k+1) = b(k);
jika falpha yang baru sudah tidak lebih kecil
end dari fbeta maka didefinsikan a dan b yang
baru dengan a baru = nilai alpha pada iterasi
sebelumnya dan b baru = nilai b pada iterasi
sebelumnya.

12. L(k+1) = b(k+1)-a(k+1); Didapatkan atau didefinisikan L yang baru,


dari masukan nilai b dan a yang baru.

13. end Mendefinisikan Nilai Output dan didapatkat


table(a,b,rho,alph
a,beta,falpha,fbet
nilai xp dan fxp, dimana xp adalah titik
a,L) xp = peminimal dan fxp adalah nilai fungsi dari
a(N+1)+(b(N+1)- titik peminimal xp.
a(N+1))/2;
fxp = f(xp);
end

Hasil :

>> f=@(x) 4*x^5+8*x^4-32*x^3+16*x^2-128*x+10

f =

function_handle with value:

@(x) 4*x^5+8*x(4)-32*x(3)+16*x(2)-128*x+10

>> [xp,fxp] = mfibonacci(f,-3,5,8)

ans =

a b rho alpha beta falpha fbeta L

___ _ ___ _____ ____ _______ ______ ___

-3 5 0.5 0.6 1.4 -66.604 -173.4 8

0.6 5 NaN NaN NaN NaN NaN 4.4


xp =

2.8000

fxp =

254.7155

4. [Bonus]
Buatlah m-file dengan input 𝑛 dan outputnya :
0 1 0 1 0 1
0 1 0 ⋯ 1 0 0
0 1 0 1 0 0
⋮ ⋱ ⋮
0 1 1 1 0 0
0 1 0 ⋯ 1 0 0
[1 1 0 1 0 0]
Penyelesaian :
M-file :
function A = matriks(n)
A = zeros(n);
for i=1:n
for j = 1:floor(n/2)
A(:, 2*j) = 1;
A(:, end) = 0;
end
A(n,i) = 1;
n = n-1;
end
end
Penjelasan m-file :

No. M-file Keterangan

Mendefinisikan m-ile dengan input n(ukuran


1. function A = matriks(n) matriks) dan output A(matriks yang
diinginkan).

2. A = zeros(n); Membuat matrik nol A berukuran n x n.


for i=1:n
for j = 1:floor(n/2)
A(:, 2*j) = 1;
A(:, end) = 0; Proses perulangan untuk membentuk
4. end matriks yang sesuai.
A(n,i) = 1;
n = n-1;
end

Perulangan bagian ini digunakan untuk


for j = 1:floor(n/2) mengubah nilai-nilai elemen pada bagian
A(:, 2*j) = 1;
5. A(:, end) = 0; baris genap menjadi satu. Akan tetapi,
end elemen-elemen pada baris terakhir akan
diubah menjadi nol.

for i=1:n Perulangan bagian ini digunakan untuk


A(n,i) = 1; mengubah nilai pada elemem-elemen
6. n = n-1; yang berada pada bagian diagonal
end terbalik pada matriks menjadi 1.
Hasil :

>> A = mmatriks(6)

A =

0 1 0 1 0 1 0 1
0 1 0 1 0 1 1 0
0 1 0 1 0 1 0 0
0 1 1 1 0 1 0 0
0 1 0 1 0 1 0 0
1 1 0 1 0 1 0 0

>> A = mmatriks(7)

A =

0 1 0 1 0 1 0 1 1
0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 1 1 0
0 1 0 1 0 1 0 1 0
0 1 1 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0
1 1 0 1 0 1 0 1 0

Anda mungkin juga menyukai