%tugas sistem kendali optimal metode line searching oleh isni %
function isni;%membuat fungsi dengan nama isni
disp('=================mencari J min=====================')
flag=1;
disp('Optimisasi dengan menggunakan metode Line Searching');
xmin=-1;%memasukkan nilai x min %
ymin=-1;%memasukkan nilai y min %
xmax=1;%memasukkan nilai x max %
ymax=1;%memasukkan nilai y max %
deltax=0.01;%memasukkan nilai delta x %
deltay=0.01;%%memasukkan nilai delta y %
x=xmin;%inisialisasi x min%
for k=1:1000;%untuk melakukan looping 1000 kali%
    cek=(-1)^k;
    if cek==-1%jika cek=-1,memanggil subrutin yang berubah
        [ymin,ymax,flag,y]=yberubah(ymin,ymax,x,flag,deltay);
    else
        [xmin,xmax,flag,x]=xberubah(xmin,xmax,y,flag,deltax);
    end
    V(k)=y;
    A(k)=x
    l(k)=flag;
    J(k)=biaya(A(k),V(k));
    if k>3
        if J(k)==J(k-3);
            disp(sprintf('harga J max:%3.3f',J(k)))%Jmin=J(k);
            disp(sprintf('harga x:%3.2f',A(k)))%sudut=A(k);
            disp(sprintf('harga y:%3.2f',V(k)))%kecepatan=V(k);
            return
        end
    end
end
%_______________________________________________________________
function[ymin,ymax,flag,y]=yberubah(ymin,ymax,x,flag,deltay)
%subrutin untuk mencari y berubah%
switch flag%untuk menset nilai flag%
case 1%untuk kasus 1%
    y=ymin:deltay:ymax;%y berubah dari ymin-ymax dengan x yang konstan=tetap%
    x=ones(1,length(y)).*x;%mengambil nilai alfa yang paling terakhir%
    J=biaya(x,y);%mencari nilai j%
    [m,n]=min(J);%mengambil nilai Jmin%
    yberubah=ymin;%y yang diperoleh untuk Jmin dianggap sebagai ymin baru%
    ymax=y(n);%inisialisasi nilai ymax%
    Jmin=J(n);%inisialisasi nilai jmin baru yang diperoleh%
    clear y;%membersihkan nilai variabel y%
    y=ymax;%inisialisasi nilai y%
    flag==3;
case 2;%untuk kasus 2%
    %untuk kasus 2 sama dengan kasus satu hanya saja pada kasus dua y
    %berubah dari max ke min dan nilai x adalah xmax%
    y=ymax:-deltay:ymin;
    x=ones(1,length(y)).*x;
    J=biaya(x,y);
    [m,n]=min(J);
    ymin=y(n);
    yberubah=ymax;
    Jmin=J(n);
    clear y,y=ymin;
    flag==4;
otherwise;%untuk nilai flag yang lain, kembali ke awal%
    return
end
%__________________________________________________________________________
function[xmin,xmax,flag,x]=xberubah(xmin,xmax,y,flag,deltax)
%subrutin untuk mencari nilai x min dimana y tetap%
if flag==3;
    %Pada kasus ini, sama seperti kasus 1, hanya saja yang berubah adalah x
    %dan y tetap%
    x=xmax:-deltax:xmin;
    y=ones(1,length(x)).*y;
    J=biaya(x,y);
    [m,n]=min(J);
    xberubah=xmin;
    xmax=x(n);
    clear x;
    x=xmax;
    Jmin=J(n);    
    flag=2;
    %Pada kasus ini sama seperti pada kasus 2,hanya saja yang berubah
    %adalah ymax,sedangkan x berubah dari max ke min%
    x=xmax:-deltax:xmin;
    y=ones(1,length(x)).*y;
    J=biaya(x,y);
    [m,n]=min(J);
    xmin=x(n);
    xmax=x(n);
    clear x;
    x=xmin;
    Jmin=J(n);    
    flag=1;
end
function J=biaya(x,y);
J=(x.^4+(9.*(x.^2))-8.*x+(2.*x.*y)+((2.*x.*y).^2)+y-1);%fungsi biaya%
    
   
    
    
    