Sabtu, 04 Juli 2020

Cara Mencari Nilai Minimum dan Maksimum Fungsi dengan MATLAB

Dalam analisis lanjutan dari fungsi di kalkulus, suatu fungsi dapat memiliki nilai minimum (minimum value) dan/atau nilai maksimum (maximum value). Nilai-nilai ini biasa juga disebut dengan nilai ekstrim (extreme values) dari fungsi. Kedua nilai ini sering digunakan dalam mencari solusi optimum suatu masalah yang berhubungan dengan optimasi. Sebagai contoh, mencari nilai minimum dari fungsi biaya produksi, menentukan nilai maksimum dari laba, dan lain sebagainya.
MATLAB menyediakan algoritma yang dapat digunakan untuk menentukan nilai minimum suatu fungsi dengan metode numerik atau iteratif. Untuk menentukan nilai maksimum suatu fungsi f(x) dalam MATLAB diperlukan sedikit manipulasi fungsi. Hal ini dikarenakan dalam MATLAB tidak tersedia perintah tersebut.  Adapun caranya adalah dengan mengubah fungsi f(x) menjadi g(x) = -f(x). Kemudian mencari nilai minimum dari fungsi g(x).  
MATLAB menyediakan fungsi atau perintah yang disebut optimizers yang khusus dipakai untuk mencari nilai minimum suatu fungsi. Terdapat dua optimizers MATLAB yang populer, yakni:
fminbnd(fun,x1,x2): untuk mencari nilai minimum lokal x dari fungsi fun, dimana fun merupakan fungsi satu variabel dan x1 < x < x2.
fminsearch (fun,x0): untuk mencari nilai minimum x dari fungsi fun dimulai dari titik tebakan awal (initial points) x0. Perintah ini digunakan untuk meminimumkan fungsi dengan lebih dari satu variabel atau multivariabel. 

Perhatikanlah contoh-contohnya berikut ini.
Contoh 1
Misalkan kita ingin mencari nilai minimum dari fungsi cosinus dalam rentang/interval 0 < x < 2pi. Masalah ini merupakan contoh dari meminimumkan fungsi satu variabel dengan menggunakan fminbnd. 
Ketiklah perintah berikut ini pada command window MATLAB.
>> x=fminbnd('cos',0,2*pi)
x =
    3.1416
>> rad2deg(x)%mengubah radian ke derajat
ans =
   180
>> [x,fval]=fminbnd('cos',0,2*pi)
x =
    3.1416
fval =
    -1
Hasil di atas menunjukkan bahwa nilai minimum fungsi cosinus dalam rentang/interval  0 < x < 2pi terjadi pada titik x = 3,1416 dengan nilai fungsi fval (objective function value)  = -1.
Contoh 2
Menentukan nilai minimum dari fungsi  dalam rentang/interval .
>> x=fminbnd(@(x)(1/3)*x^3+2*x^2-3*x+7,-10,10)
x =
   0.6458
  
Apabila ingin dicari nilai maksimum fungsi  dalam rentang/interval , kita tinggal menambahkan tanda negatif “ – “ di depan fungsi.
>> x=fminbnd(@(x)-((1/3)*x^3+2*x^2-3*x+7),-10,10)
x =
   -4.6457

Kita juga dapat memantau nilai-nilai dalam proses pencarian nilai minimum/maksimum fungsi dengan menggunakan perintah optimset seperti di bawah ini.
options = optimset('Display','iter');
[x,fval]=fminbnd(@(x)(1/3)*x^3+2*x^2-3*x+7,-10,10,options)
Tampilan hasil keluaran program di atas adalah sebagai berikut:
Func-count     x          f(x)         Procedure
    1       -2.36068      20.8425        initial
    2        2.36068      15.4488        golden
    3        5.27864      95.9203        golden
    4       0.151933      6.59154        parabolic
    5       0.278546      6.32674        parabolic
    6       0.572083      6.00072        parabolic
    7        1.25527      7.04489        golden
    8       0.663228       5.9873        parabolic
    9       0.647039       5.9865        parabolic
   10       0.645665      5.98649        parabolic
   11       0.645753      5.98649        parabolic
   12       0.645719      5.98649        parabolic
   13       0.645786      5.98649        parabolic

Optimization terminated: the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-04
x =
    0.6458
fval =
    5.9865

Pencocokan Kurva (Curve-Fitting) dengan MATLAB

Halo sobat semua. Dalam tulisan kali ini saya ingin berbagi tentang metode pencocokan kurva dengan menggunakan MATLAB. Yuk, simak uraiannya berikut ini. 
Pencocokan kurva (curve-fitting) merupakan suatu proses pencocokan (fitting) data ke dalam suatu fungsi suku banyak atau polinomial. Kurva yang terbentuk dapat berubah hasil dari fungsi linear (garis lurus), kuadrat, eksponensial, suku banyak/polinomial pangkat tiga, empat dan lain sebagainya. Dalam proses pencocokan kurva biasanya error atau kesalahan dihitung dengan metode kuadrat terkecil (least squares method).
MATLAB menyediakan perintah yang dapat kita gunakan untuk mencocokkan sekumpulan data dengan kurva tertentu. Dengan menggunakan perintah polyfit, MATLAB akan menampilkan koefisien dari suatu polinom yang tepat untuk data yang diberikan.
polyfit(x,y,n): menentukan koefisien polinomial berderajat n yang cocok dengan y.

Contoh 1
Diketahui data berikut:

x
10
20
30
40
50
60
70
80
90
100
y
27.53
52.43
75.63
102.67
125.34
150.33
177.4
202.34
228.56
253.7
Misalkan kita menduga data tersebut cocok digambarkan dengan fungsi linear, maka pada MATLAB dituliskan:

x=[10   20  30  40  50  60  70  80  90  100];
y=[22.53 49.43 75.63   95.67   100.34  150.33  177.4   189.34  228.56  233.7];
p=polyfit(x,y,1)
MATLAB akan menampilkan hasil berikut:
p =
    2.4353    -1.6460
Artinya bahwa data di atas dapat dinyatakan dengan fungsi:

Sekarang, mari kita coba lihat hasilnya:
x=[10   20  30  40  50  60  70  80  90  100];
y=[22.53 49.43 75.63   95.67   100.34  150.33  177.4 189.34  228.56  233.7];
p=polyfit(x,y,1)
y1=polyval(p,x);
plot(x,y,'*')
hold on
plot(x,y1)
Pencocokan kurva dengan fungsi linear
Contoh 2
Dari suatu penelitian diperoleh data berikut:

x
1
2
3
4
5
6
7
8
9
10
y
0.93
2.1
8.5
15.5
24.3
28.7
42.2
50
80.2
90.3
Selanjutnya data tersebut akan dicocokkan dengan polinomial tertentu.
Misalkan dengan mengamati data sekilas, kita menduga bahwa fungsi yang cocok mewakili data tersebut adalah fungsi kuadrat. Pada MATLAB kita tuliskan.
x=[1    2   3   4   5   6   7   8   9   10];
y=[0.93 2.1 8.5 15.5 24.3 28.7  42.2 50  80.2 90.3];
>> p=polyfit(x,y,2)

p =
    1.0166   -1.2247    1.8703

Artinya bahwa data di atas dapat dinyatakan dengan fungsi:

Sekarang, mari kita coba lihat hasilnya:
x=[1  2   3   4   5   6   7   8   9   10];
y=[0.93 2.1 8.5 15.5 24.3 28.7  42.2 50  80.2 90.3];
p=polyfit(x,y,5);
y1=polyval(p,x);
plot(x,y,'o')
hold on
plot(x,y1)
Pencocokan kurva dengan fungsi kuadrat