[Index for tmp_for_tar/deriv_min.doc] [Return to Master Index]

compare_conjgrad_dfp

(tmp_for_tar/deriv_min.doc/compare_conjgrad_dfp.m)


Function Synopsis

dt = mytic()		# Returns the cputime since last 'mytic'

Help text


 Compare conjgrad_min and dfp_min with either a quadratic function or a
 "grating" function (see defs below).

 Last modified: October 2000



Listing of function file tmp_for_tar/deriv_min.doc/compare_conjgrad_dfp.m



##
## Compare conjgrad_min and dfp_min with either a quadratic function or a
## "grating" function (see defs below).
##


## Author:        Etienne Grossmann  <etienne@isr.ist.utl.pt>
## Last modified: October 2000

1 ;
clear dff
clear ff

function dt = mytic()		# Returns the cputime since last 'mytic'
  static last_mytic = 0 ;
  [t,u,s] = cputime() ;
  dt = t - last_mytic ;
  last_mytic = t ;
endfunction


for cnt = 0:1,

  if cnt = 0,			# Quadratic function
    printf ("\n    Comparing with quadratic function\n");

    ## N = 150+floor(100*rand(1)) ;
    N = 15+floor(10*rand(1)) ;
    global truemin ;
    truemin = randn(N,1) ;
    global offset ;
    offset  = 100*randn(1) ;
    global metric ;
    metric = randn(2*N,N) ; 
    metric = metric'*metric ;
    
    if N>1,
      [u,d,v] = svd(metric);
      d = (0.1+[0:(1/(N-1)):1]).^2 ;
      metric = u*diag(d)*u' ;
    end

    eval (["function v = ff(x)\n",\
	   "  global offset ;\n",\
	   "  global truemin ;\n",\
	   "   global metric ;\n",\
	   "  v = sum((x-truemin)'*metric*(x-truemin))+offset ;\n",\
	   "endfunction"]);
    eval (["function df = dff(x)\n",\
	   "  global truemin ;\n",\
	   "  global metric ;\n",\
	   "  df = 2*(x-truemin)'*metric ;\n",\
	   "endfunction"]);

    xinit = 10*randn(N,1) ;

  else				# Grating function

    printf ("\n    Comparing with Grating function\n");

    N = 2;	# Nparams
    truemin = [0;0] ;
    xinit = 10*randn(N,1) ;
    offset = 0;
    
    eval (["function v = ff (x)\n",\
	   "  v = x(1)^2 * (1+sin(x(2)*3*pi)^2) + x(2)^2;\n",\
	   "endfunction;\n"]);
    eval (["function dv = dff (x)\n",\
	   "  u = x(1); v = x(2);\n",\
	   "  w = u^2 * (1+sin(v*3*pi)^2) + v^2;\n",\
	   "  dv = [2*u * (1+sin(v*3*pi)^2), u^2 * sin(v*2*3*pi) + 2*v ];\n",\
	   "endfunction"]);
  end


  gtol = 3*eps;

  printf("gonna do : dfp_min\n");
  mytic() ;
  [xdfp,vdfp,ndfp] = dfp_min("ff","dff",xinit,"gtol",3*eps) ;
  tdfp = mytic() ;

  printf("gonna do : conjgrad_min\n");
  mytic() ;
  [xcg,vcg,ncg] = conjgrad_min("ff","dff",xinit,"gtol",3*eps) ;
  tcg = mytic() ;



  printf("CG  : niter=%4d  N=%4d  time=%8.3g errx=%8.3g   errv=%8.3g\n",...
	 ncg,N,tcg,max(abs( xcg-truemin )),vcg-offset);

  printf("DFP : niter=%4d  N=%4d  time=%8.3g errx=%8.3g   errv=%8.3g\n",...
	 ndfp,N,tdfp,max(abs( xdfp-truemin )),vdfp-offset);


end

Produced by oct2html on Tue Oct 17 10:08:37 2000
Cross-Directory links are: ON