polak_ribiere(func=None,
dfunc=None,
args=( ) ,
x0=None,
min_options=None,
func_tol=1e-25,
grad_tol=None,
maxiter=1000000.0,
a0=1.0,
mu=0.0001,
eta=0.1,
full_output=0,
print_flag=0,
print_prefix='
' )
| source code
|
Polak-Ribiere conjugate gradient algorithm.
Page 121-122 from 'Numerical Optimization' by Jorge Nocedal and
Stephen J. Wright, 1999, 2nd ed. The algorithm is:
-
Given x0
-
Evaluate f0 = f(x0), g0 = g(x0)
-
Set p0 = -g0, k = 0
-
while g0 != 0:
-
Compute ak and set xk+1 = xk + ak.pk
-
Evaluate gk+1
-
bk+1 = dot(gk+1, (gk+1 - gk)) / dot(gk, gk)
-
pk+1 = -gk+1 + bk+1.pk
-
k = k + 1
|