| 102 | return x0; |
| 103 | } |
| 104 | VectorXf numericGradient( EnergyFunction & efun, const VectorXf & x, float EPS ) { |
| 105 | VectorXf g( x.rows() ), tmp; |
| 106 | for( int i=0; i<x.rows(); i++ ) { |
| 107 | VectorXf xx = x; |
| 108 | xx[i] = x[i]+EPS; |
| 109 | double v1 = efun.gradient( xx, tmp ); |
| 110 | xx[i] = x[i]-EPS; |
| 111 | double v0 = efun.gradient( xx, tmp ); |
| 112 | g[i] = (v1-v0)/(2*EPS); |
| 113 | } |
| 114 | return g; |
| 115 | } |
| 116 | VectorXf gradient( EnergyFunction & efun, const VectorXf & x ) { |
| 117 | VectorXf r( x.rows() ); |
| 118 | efun.gradient( x, r ); |