from Steepest Accent Method by Siamak Faridani
Solves multivariant unconstrained optimization using the Steepest Accent Method

acent.m
%steepest ascent Method for Multiple Variable Functions


%faridani@gmail.com
%11/16/2008
%University of California, Berkeley


clc;
close all;
clear all;
format long;
disp('Steepest Accent Method');
disp('=============');
%Starting points
x01=-1;
x02=0;

%Function F in Symbolic Format

a='(3*x1+x2+6*x1*x2-2*(x1^2)+2*(x2^2))';
%Insert the desired magnitude of final direction vector (0.0001 is fine)
eserror=0.0001;

%Leave the rest unchanged
%=================================
syms x1 x2
% Hessian Of F
disp( sprintf('Function = %s', a));
A=[diff(diff(a,x1),x1),diff(diff(a,x1),x2);...
    diff(diff(a,x2),x1),diff(diff(a,x2),x2)];

%First Order Derivative of F
B=[diff(a,x1);diff(a,x2)];
disp 'Hessian......';
pretty(simplify(A))

disp 'Gradient......';
pretty(simplify(B))

disp('Eigen Values');
[v,d]=eig(A);
disp(d);


num_of_iterations=1;

syms alpha
f=(subs(subs(a,x1,x01),x2,x02));
    disp(sprintf('f(x0)=%f',f));


while (num_of_iterations<7)

    disp('_________________________________________');
    disp(sprintf('Iteration = %d', num_of_iterations));

    temp=(subs(subs(B,x1,x01),x2,x02));
    disp(sprintf('Gradient of X%d', num_of_iterations-1));
    disp(temp);

    temp4=([x01;x02]);
    disp(sprintf('X%d =', num_of_iterations-1));
    disp(temp4);

    temp = temp4+alpha.*(temp);
    disp(sprintf('X%d - alpha. gradient(X%d) =', num_of_iterations-1, num_of_iterations-1));
    disp(temp);


    f_alpha= subs(subs(a,x1, temp(1,1)), x2, temp(2,1));
    disp(sprintf('f(X%d - alpha. gradient(X%d)) =', num_of_iterations-1, num_of_iterations-1));
    disp(f_alpha);




    diff_f_alpha = diff(f_alpha,alpha);
    disp(sprintf('diff(f(X%d - alpha. gradient(X%d)))/diff alpha =', num_of_iterations-1, num_of_iterations-1));
    disp(diff_f_alpha);


    alphaval=solve(diff_f_alpha, 'alpha')
    alphaval2=eval(alphaval)
    if alphaval2<0
        disp 'Diverges';
        break;
    end


    newxkplus1 = [x01;x02]+alphaval2.*(subs(subs(B,x1,x01),x2,x02));


    x01 = newxkplus1(1,1);
    x02 = newxkplus1(2,1);
    disp(sprintf('x%d =',num_of_iterations));
    disp(newxkplus1)
    num_of_iterations=num_of_iterations+1;
     f=(subs(subs(a,x1,x01),x2,x02));
    disp(sprintf('f(x%d)=%f',num_of_iterations,f));


end

Contact us at files@mathworks.com