Exemple #1
0
Vector quasi_newton(Vector& x, F f, Grad grad_f, Step step, Update update, Iter& iter) 
{    
    typedef typename mtl::Collection<Vector>::value_type value_type;
    Vector         d, y, x_k, s;
    Matrix         H(size(x), size(x));
    
    H= 1;
    for (; !iter.finished(two_norm(grad_f(x))); ++iter) {
	d= H * -grad_f(x);                                                  // std::cout << "d is " << d << '\n'; 
	value_type alpha= step(x, d, f, grad_f); assert(alpha == alpha);
	x_k= x + alpha * d;                                                 // std::cout << "x_k is " << x_k << '\n';
	s= alpha * d;                                                       // std::cout << "alpha is " << alpha << '\n';
	y= grad_f(x_k) - grad_f(x);
	update(H, y, s);                               
	x= x_k;                                                             
    }
    return x;
}