| 30 | #include <cstdio> |
| 31 | |
| 32 | static lbfgsfloatval_t evaluate( |
| 33 | void *instance, |
| 34 | const lbfgsfloatval_t *x, |
| 35 | lbfgsfloatval_t *g, |
| 36 | const int n, |
| 37 | const lbfgsfloatval_t step |
| 38 | ) |
| 39 | { |
| 40 | EnergyFunction * efun = static_cast<EnergyFunction*>( instance ); |
| 41 | |
| 42 | VectorXf vx( n ), vg( n ); |
| 43 | std::copy( x, x+n, vx.data() ); |
| 44 | lbfgsfloatval_t r = efun->gradient( vx, vg ); |
| 45 | |
| 46 | std::copy( vg.data(), vg.data()+n, g ); |
| 47 | return r; |
| 48 | } |
| 49 | |
| 50 | static int progress( |
| 51 | void *instance, |