package joshua.discriminative.training.lbfgs; public class Sdrive { static int ndim = 2000 , msave = 7 ; static int nwork = ndim * ( 2 * msave + 1 ) + 2 * msave ; public static void main( String args[] ) { double x [ ] , g [ ] , diag [ ] , w [ ]; x = new double [ ndim ]; g = new double [ ndim ]; diag = new double [ ndim ]; w = new double [ nwork ]; double f, eps, xtol, gtol, t1, t2, stpmin, stpmax; int iprint [ ] , iflag[] = new int[1], icall, n, m, mp, lp, j; iprint = new int [ 2 ]; boolean diagco; n=100; m=5; iprint [ 1 -1] = 1; iprint [ 2 -1] = 0; diagco= false; eps= 1.0e-5; xtol= 1.0e-16; icall=0; iflag[0]=0; for ( j = 1 ; j <= n ; j += 2 ) { x [ j -1] = - 1.2e0; x [ j + 1 -1] = 1.e0; } do { f= 0; for ( j = 1 ; j <= n ; j += 2 ) { t1 = 1.e0 - x [ j -1]; t2 = 1.e1 * ( x [ j + 1 -1] - x [ j -1] * x[j-1] ); g [ j + 1 -1] = 2.e1 * t2; g [ j -1] = - 2.e0 * ( x [ j -1] * g [ j + 1 -1] + t1 ); f= f+t1*t1+t2*t2; } try { LBFGS.lbfgs ( n , m , x , f , g , diagco , diag , iprint , eps , xtol , iflag ); } catch (LBFGS.ExceptionWithIflag e) { System.err.println( "Sdrive: lbfgs failed.\n"+e ); return; } icall += 1; } while ( iflag[0] != 0 && icall <= 200 ); } }