% Needle-Eye Function
% Range of initial points: -10 <= xj <= 10 , j=1,2,...,n
% For n=1:
% Infinite global minimum: any value between -1 <= xj <= 1
% f(x)=1
% For n=2:
% Infinite global minimum: as per x1 and x2 approach 0
% f(x1,x2)=1
% Coded by: Ali R. Alroomi | Last Update: 03 June 2015 | www.al-roomi.org

% Minimization of this function becomes more difficult with smaller eye and larger n (dimension)

clear
clc
warning off

eye=0.0001;

x1min=-10;
x1max=10;
x2min=-10;
x2max=10;
R=1500; % steps resolution
x1=x1min:(x1max-x1min)/R:x1max;
x2=x2min:(x2max-x2min)/R:x2max;
    
for j=1:length(x1)
    
    % For 1-dimensional plotting
    if abs(x1(j)) <= eye
        f1(j)=1;
    else
        if abs(x1(j)) > eye
            t1=1;
        else
            t1=0;
        end
        f1(j)=(100+abs(x1(j)))*t1;
    end
    
    % For 2-dimensional plotting
    for i=1:length(x2)
        
        if abs(x1(j)) <= eye && abs(x2(i)) <= eye
            fn(i)=1;
        else            
            if abs(x2(i)) > eye
                t2=1;
            else
                t2=0;
            end
            fn(i)=(100+abs(x1(j)))*t1+(100+abs(x2(i)))*t2;
        end
        
    end

    fn_tot(j,:)=fn;

end

figure(1)
plot(x1,f1);set(gca,'FontSize',12);
xlabel('x','FontName','Times','FontSize',20,'FontAngle','italic');
ylabel('f(x)','FontName','Times','FontSize',20,'FontAngle','italic');
title('2D View','FontName','Times','FontSize',24,'FontWeight','bold');

figure(2)
meshc(x1,x2,fn_tot);colorbar;set(gca,'FontSize',12);shading interp;
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(3)
mesh(x1,x2,fn_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(4)
mesh(x1,x2,fn_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(5)
mesh(x1,x2,fn_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');