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



Contoh 3
Menentukan nilai minimum dari fungsi f(x1,x2) = 3 + x1 – x2 + 3x12 + 2x1x2 + x22 dengan nilai tebakan awal (initial points) x0 = [0,0]. Masalah ini merupakan contoh dari meminimumkan fungsi multivariabel dengan menggunakan fminsearch. 
Caranya, ketiklah perintah berikut pada jendela editor, simpan dengan nama file tertentu lalu jalankan.
fun = @(x)3+x(1)-x(2)+3*x(1)^2 + 2*x(1)*x(2)+x(2)^2;
x0 = [0,0];
options = optimset('PlotFcns',@optimplotfval);
[x,fval] = fminsearch(fun,x0,options)

Tampilan hasil keluaran program di atas adalah sebagai berikut:
x =
   -0.5000    1.0000
fval =
    2.2500
Nilai x menyatakan nilai minimum fungsi, yaitu di titik [-0.5,1] dengan nilai fungsi fval = 2.2500.
Selain itu MATLAB juga secara otomatis akan menampilkan plot proses optimasi hingga mencapai nilai minimum, seperti di bawah ini.
Plot proses optimasi fungsi
Dari plot di atas, dapat kita perhatikan bahwa fungsi f(x1,x2) = 3 + x1 – x2 + 3x12 + 2x1x2 + x22 mencapai nilai minimum sebesar 2,25 setelah iterasi ke-60.
Contoh 4
Misalkan kita ingin mencari nilai minimum dari fungsi Rosenbrock yang cukup terkenal dan sering dibahas dalam topik optimasi. Fungsi ini terdiri dari dua variabel dan dapat dinyatakan sebagai berikut:
f(x1,x2) = 100(x2-x12)2 + (1-x1)2
Selanjutnya, akan dicari nilai minimum dari fungsi tersebut dengan nilai tebakan awal (initial points) x0 = [-2,2].

Caranya, ketiklah perintah berikut pada jendela editor, simpan dengan nama file tertentu lalu jalankan.

fun = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
x0 = [-2,2];
options = optimset('PlotFcns',@optimplotfval);
[x,fval] = fminsearch(fun,x0,options)

Tampilan hasil keluaran program di atas adalah sebagai berikut:
x =
      1.0000    1.0000

fval =
      3.9243e-10

Nilai x menyatakan nilai minimum fungsi, yaitu di titik [1,1] dengan nilai fungsi fval = 3.9243e-10 atau mendekati 0. Adapun tampilan plot proses optimasi hingga mencapai nilai minimum ditunjukkan seperti pada gambar berikut ini.
Plot proses optimasi fungsi
      Apabila ingin mengamati lokasi nilai minimum fungsi secara visual, maka sebaiknya dilakukan pemplotan fungsi tiga-dimensi. Dengan pemplotan fungsi ini, maka posisi nilai minimumnya dapat diamati dengan jelas. Teknik ini berlaku untuk fungsi dengan dua variabel bebas. Perhatikanlah sintaks dalam pemplotan berikut ini.
fun = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
X=linspace(-2,2,50);
Y=linspace(-2,3,50);
for i = 1:length(X)
    for j=1:length(Y)
        Z(i,j)=fun([X(i) Y(j)]);
    end
end
surf(X,Y,Z);
Plot fungsi f(x1,x2) = 100(x2-x12)2 + (1-x1)2

Demikianlah pembahasan tentang cara mencari nilai minimum dan maksimum suatu fungsi dengan menggunakan MATLAB. Nantikan artikel menarik lainnya seputar pemrograman MATLAB. Semoga bermanfaat.😊

Baca juga:

Tidak ada komentar:

Posting Komentar