clear all
close all
clc

%METODOS:                      FUNCOES:                     GRADIENTES:
Metodos=cell(17,1);            Funcoes=cell(13,1);          Gradientes=cell(13,1);
Metodos{1}='coggins';          Funcoes{1}='test1';          Gradientes{1}='gtest1';
Metodos{2}='univar';           Funcoes{2}='test2';          Gradientes{2}='gtest2';
Metodos{3}='hkjeeves';         Funcoes{3}='test3';          Gradientes{3}='gtest3';
Metodos{4}='rosembr';          Funcoes{4}='test4';          Gradientes{4}='gtest4';
Metodos{5}='powell';           Funcoes{5}='test5';          Gradientes{5}='gtest5';
Metodos{6}='search';           Funcoes{6}='test6';          Gradientes{6}='gtest6';
Metodos{7}='complex';          Funcoes{7}='test7';          Gradientes{7}='gtest7';
Metodos{8}='buscarnd';         Funcoes{8}='test8';          Gradientes{8}='gtest8';
Metodos{9}='swarm';            Funcoes{9}='test9';          Gradientes{9}='gtest9';
Metodos{10}='steepdes';        Funcoes{10}='test10';        Gradientes{10}='gtest10';
Metodos{11}='cgrad';           Funcoes{11}='test11';        Gradientes{11}='gtest11';
Metodos{12}='lmarqua';         Funcoes{12}='test12';        Gradientes{12}='gtest12';
Metodos{13}='newtong';          Funcoes{13}='test13';        Gradientes{13}='gtest13';
Metodos{14}='newtont';
Metodos{15}='bfgs';
Metodos{16}='dfp';
Metodos{17}='gmurray';

N=length(Funcoes);
mxit=250;
tolx=1e-4 ;
tolf=1e-4; 
nvar=2*ones(length(Funcoes),1);nvar(6:8)=4;


%DIRECOES PARA COGGINS:
d1=[8 5];%
d2=[1 1 1 1];
%VARIVEIS NO OTIMO:
Vxo1=[1;1;1;1;3;1;0;0;3;0;.5;5;2.5 ];Vxo2=[1;1;1;1;0.5;1;0;1;2;0;-1;6 ;0];
Vxo3=zeros(length(Funcoes),1);Vxo4=zeros(length(Funcoes),1);
Vxo3(6:8)=[1 ;0 ;1]; Vxo4(6:8)=[1 ;0 ; 1/pi];

%CHUTES INICIAIS:
Vxi1=[-1.2;-1.2;-1.2;-1.2;1;-3;-3;1;1;1;1;8;3];Vxi2=[1;1;1;1;1;-1;-1;2;1;1;0;9;1]; 
Vxi3=zeros(length(Funcoes),1);Vxi4=zeros(length(Funcoes),1);
Vxi3(6:8)=[-3 ;0 ;2 ]; Vxi4(6:8)=[-1 ;1 ;2 ];

%VALORES OTIMOS:
VOt=zeros(length(Funcoes),1);%*****************ate 13
VOt(end)=-3.25;

met=menu('Escolha o Método','coggins',...         
'univar',...            
'hkjeeves' ,...        
'rosembr' ,...         
'powell'  ,...         
'search'  ,...         
'complex' ,...         
'buscarnd' ,...        
'swarm'  ,...          
'steepdes'  ,...      
'cgrad'   ,...        
'lmarqua'  ,...       
'newtong' ,...       
'newtont',... 
'bfgs',... 
'dfp',... 
'gmurray' ); 

fun=menu('Escolha a Funçao','teste 1','teste 2','teste 3','teste 4','teste 5',...
'teste 6','teste 7','teste 8','teste 9','teste 10','teste 11','teste 12','teste 13');

      
%=========================================================================%
%INICIO DO LOOP:
for i=met
    for j=fun
        
    if nvar(j)==2
        xi=[Vxi1(j) Vxi2(j)];
        d=d1;
    else
        xi=[Vxi1(j) Vxi2(j) Vxi3(j) Vxi4(j)];
        d=d2;
    end
    
     if i>=10
      %Avaliacao da funcao j pelo metodo i:
       STR=[ 'tic;[xo,Ot,nS,niter]='Metodos{i} '(''' Funcoes{j} ''',xi,[],'  ''''Gradientes{j} ''');temp(i,j)=toc;'];
       eval(STR);
         
      else
          if i>1
          %Avaliacao da funcao j pelo metodo i:
           STR=[ 'tic;[xo,Ot,nS,niter]='Metodos{i} '('''Funcoes{j} ''',xi);temp(i,j)=toc;'];
           eval(STR);
           else
           STR=[ 'tic;[xo,Ot,nS,niter]='Metodos{i} '('''Funcoes{j} ''',xi,d);temp(i,j)=toc;'];
           eval(STR);
               
           end
     end

%FIM DO LOOP: 
clc
end
end
clc
%=========================================================================%
disp('Função Teste 1')
disp(' Para ver a Função--> >>type test1')
disp('Resultados:')
disp('Otimo')
xo
disp('Função Objetivo no Otimo')
Ot
disp('Numero de Avaliações da Função Objetivo')
nS
disp('Numero de Iterações')
niter
