Quasi-Newton mininization with Broyden's update of the Hessian matrix

Task

Implement a function with the signature

vector broyden(Func<vector,double> f, vector x, double acc)
that takes the function f and runs the quasi-Newton algorithm from the starting point x, using the Broyden's update of the Hessian matrix until the accuracty goal acc is reached (see the book for the details).

Test your implementation on some functions with known minima.

Apply your implementation to a more complicated problem

Implement also the symmetrized Broyden's update and check whether it is any better.