• 大小: 2.8 KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-09-19
  • 语言: Matlab
  • 标签: 共轭梯度  

资源简介

MATLAB编写的共轭梯度函数,适合处理二次型问题

资源截图

代码片段和文件信息



ta http-equiv=Content-Type content=“text/html; charset=iso-8859-1“>
% Conjugate Gradients minimization routine.  Uses gradient magnitude
% for termination condition.
%
% function [x] = conjgrad(x0lsfunlsparamsogfunogparamsvarargin)
% x0 - initial value of the solution [d1]
% lsfun - pointer to line search function
% function [alpha] = lsfun(x0directionogfunparams)
%         x0 - location to start line search [d1]
%         direction - direction from x0 along which to search [d1]
%         ogfun - poitner to objective/gradient function
%         params - cell array of parameters to pass to ogfun
%         alpha - appx. location of minimum along direction
%                 appx. minimium is: x0+alpha.*direction
% lsparams - cell array of parameters to pass to lsparams
% ogfun - pointer to objective/gradient calculation function
% function [objgrad] = ogfun(xparams)
%     x - parameter value at which to calculate obj/grad [d1]
%     params - additional parameters
%     obj - objective value at x [scalar]
%     grad - gradient at x [d1]
% ogparams - cell array of parameters to pass to ogfun
% x - final value of the solution (appxroximate local minimum) [d1]
%
% Additional parameters given by name/value pairs via varagin.
% E.g. conjgrad(x0lsfunparamsogfun‘verbose‘0)
%
% This is an implementation of the Polak-Ribiere Nonlinear Conjugate
% Gradients as described by “An introduction to the conjugate
% gradient method without the agonizing pain“ by Shewchuk (1994) and
% “Numerical Optimization“ by Nocedal and Wright.
%
% Note: this code automatically uses the last alpha as initial value for
% line search.  This can backfire causing lots of backtracking if the
% optimization surface isn‘t nice.  To avoid this pass a value of alpha0
% as part of lsparams (e.g. ‘alpha0‘1e-6)
%
% Written by Jason Rennie February 2005
% Last modified: Wed Mar 29 22:46:42 2006

function [xnumiter] = conjgrad(x0lsfunlsparamsogfunogparamsvarargin)
  fn = mfilename;
  if nargin < 5
    error(‘insufficient parameters‘)
  end

  % Parameters to be set via varargin
  verbose = 1; % print progress information if true
  tol = 1e-3; % geometric decrease in gradient magnitude to declare minimum
  maxiter = 1000; % stop after this many iterations (if no minimum found)
  nu = 0.1;
  abstol = 0; % stop if gradient magnitude goes below this
  allowNonDecrease = 0; % don‘t stop if line search fails to find decrease
  % Process varargin
  paramgt;

  t0 = clock;
  t1 = t0;
  ogcalls = 0;
  x = x0;
  numiter = 0;
  j = 0;
  alpha = 1e-10;

  ogcalls = ogcalls + 1;
  [objdx] = ogfun(xogparams{:});
  r = -dx;
  s = r;
  d = s;
  deltanew = full(r‘*d);
  deltazero = deltanew;
  if verbose
    fprintf(1‘Begin deltazero=%1.1e tol=%.0e obj=%.1f\n‘deltazerotolobj);
  end
  while numiter &l

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        585  2009-05-07 16:39  prpconj.m

     文件       4909  2006-06-03 09:44  conjgrad.m

     文件        678  2009-05-08 22:04  gongehanshu.m

----------- ---------  ---------- -----  ----

                 6172                    3


评论

共有 条评论