/* test_macII.c example executable that minimizes a quadratic function using macopt
(c) 2002 David J.C. MacKay and Steve Waterhouse
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
GNU licenses are here :
http://www.gnu.org/licenses/licenses.html
Author contact details are here :
http://www.inference.phy.cam.ac.uk/mackay/c/macopt.html mackay@mrao.cam.ac.uk
*/
#include "r.h"
#include "macopt.h"
/*
test program for macopt solution of equation A x = b.
this equation is solved by minimizing the function 1/2 xAx - bx
*/
#include "test_fn.h"
int main(int argc, char *argv[])
{
double *x ;
int n ;
double epsilon=0.001 ;
/* Load up the parameters of the function that you want to optimize */
printf("============================================================\n");
printf("= Demonstration program for macopt =\n");
printf("= Solves A x = b by minimizing the function 1/2 xAx - bx =\n");
printf("= A must be positive definite (e.g. 2 1 1 2) =\n");
printf("\n Dimension of A (eg 2)?\n");
inputi(&(n));
Test_fn* test_fn = new Test_fn(n);
x=dvector(1,n);
typeindmatrix(test_fn->param_A, 1, n, 1, n);
printf(" b vector?\n");
typeindvector(test_fn->param_b,1,n);
printf(" Initial condition x?\n");
typeindvector(x,1,n);
/* Check that the gradient_function is the gradient of the function */
/* You don't have to do this, but it is a good idea when debugging ! */
test_fn->maccheckgrad ( x , n , epsilon , 0 ) ;
/* Do an optimization */
test_fn->macoptII ( x , n ) ;
printf("Solution:\n");
test_fn->func(x);
}