% Storn's Function
% Range of initial points: min <= xj <= max , j=1,2
% It has two global minimum: 
% @ min=-2 and max=2: (x1,x2)=(0,-1.386952327146511),(0,1.386952327146511) >> m=1 and f(x1,x2)=-0.407461605632581
% @ min=-4 and max=4: (x1,x2)=(0,-2.608906424592038),(0,2.608906424592038) >> m=2 and f(x1,x2)=-18.058696657349238
% @ min=-8 and max=8: (x1,x2)=(0,-4.701739810796703),(0,4.701739810796703) >> m=3 and f(x1,x2)=-227.7657499670953
% Coded by: Ali R. Alroomi | Last Update: 23 March 2015 | www.al-roomi.org
  
clear
clc
warning off

x1min=-2; % it can also be -4 or -8
x1max=2; % it can also be 4 or 8
x2min=-2; % it can also be -4 or -8
x2max=2; % it can also be 4 or 8
R=1500; % steps resolution
x1=x1min:(x1max-x1min)/R:x1max;
x2=x2min:(x2max-x2min)/R:x2max;

m=1; % it can also be 2 or 3
    
for j=1:length(x1)
    
    for i=1:length(x2)
        f(i)=(10.^m)*x1(j).^2+x2(i).^2-(x1(j).^2+x2(i).^2).^2+(10.^-m)*(x1(j).^2+x2(i).^2).^4;
    end
    
    f_tot(j,:)=f;

end

figure(1)
meshc(x1,x2,f_tot);colorbar;set(gca,'FontSize',12);
xlabel('x_2','FontName','Times','FontSize',20,'FontAngle','italic');
set(get(gca,'xlabel'),'rotation',25,'VerticalAlignment','bottom');
ylabel('x_1','FontName','Times','FontSize',20,'FontAngle','italic');
set(get(gca,'ylabel'),'rotation',-25,'VerticalAlignment','bottom');
zlabel('f(X)','FontName','Times','FontSize',20,'FontAngle','italic');
title('3D View','FontName','Times','FontSize',24,'FontWeight','bold');

figure(2)
mesh(x1,x2,f_tot);view(0,90);colorbar;set(gca,'FontSize',12);
xlabel('x_2','FontName','Times','FontSize',20,'FontAngle','italic');
ylabel('x_1','FontName','Times','FontSize',20,'FontAngle','italic');
zlabel('f(X)','FontName','Times','FontSize',20,'FontAngle','italic');
title('X-Y Plane View','FontName','Times','FontSize',24,'FontWeight','bold');

figure(3)
mesh(x1,x2,f_tot);view(90,0);colorbar;set(gca,'FontSize',12);
xlabel('x_2','FontName','Times','FontSize',20,'FontAngle','italic');
ylabel('x_1','FontName','Times','FontSize',20,'FontAngle','italic');
zlabel('f(X)','FontName','Times','FontSize',20,'FontAngle','italic');
title('X-Z Plane View','FontName','Times','FontSize',24,'FontWeight','bold');

figure(4)
mesh(x1,x2,f_tot);view(0,0);colorbar;set(gca,'FontSize',12);
xlabel('x_2','FontName','Times','FontSize',20,'FontAngle','italic');
ylabel('x_1','FontName','Times','FontSize',20,'FontAngle','italic');
zlabel('f(X)','FontName','Times','FontSize',20,'FontAngle','italic');
title('Y-Z Plane View','FontName','Times','FontSize',24,'FontWeight','bold');

