X-Git-Url: http://gitweb.michael.orlitzky.com/?p=octave.git;a=blobdiff_plain;f=optimization%2Fstep_length_cgm.m;fp=optimization%2Fstep_length_cgm.m;h=60f7cd491431b94cf183cb7caa375ebff19e929f;hp=0000000000000000000000000000000000000000;hb=69d4adf22828f26858e89de560078e1b5ed1714a;hpb=2b94bdc2496c384cd7cdb9d11aa7815e63c61f4a diff --git a/optimization/step_length_cgm.m b/optimization/step_length_cgm.m new file mode 100644 index 0000000..60f7cd4 --- /dev/null +++ b/optimization/step_length_cgm.m @@ -0,0 +1,40 @@ +function alpha = step_length_cgm(r, A, p) + ## + ## Compute the step length for the conjugate gradient method (CGM). + ## The CGM attempts to solve, + ## + ## Ax = b + ## + ## or equivalently, + ## + ## min[phi(x) = (1/2) - ] + ## + ## where ``A`` is positive-definite. In the process, we need to + ## compute a number of search directions ``p`` and optimal step + ## lengths ``alpha``; i.e., + ## + ## x_{k+1} = x_{k} + alpha_{k}*p_{k} + ## + ## This function computes alpha_{k} in the formula above. + ## + ## INPUT: + ## + ## - ``r`` -- The residual, Ax - b, at the current step. + ## + ## - ``A`` -- The matrix ``A`` in the formulation above. + ## + ## - ``p`` -- The current search direction. + ## + ## OUTPUT: + ## + ## - ``alpha`` -- The minimizer of ``f(x) = x + alpha*p`` along ``p`. + ## + ## NOTES: + ## + ## All vectors are assumed to be *column* vectors. + ## + + ## A simple calculation should convince you that the gradient of + ## phi(x) above is Ax - b == r. + alpha = step_length_positive_definite(r, A, p); +end