docs: protected void computeNumericalJacobian( DenseMatrix64F param ,
                                               DenseMatrix64F pt ,
                                               DenseMatrix64F deriv )
      {
          double invDelta = 1.0/DELTA;
  
          func.compute(param,pt, temp0);
  
          // compute the jacobian by perturbing the parameters slightly
          // then seeing how it effects the results.
          for( int i = 0; i < param.numRows; i++ ) {
              param.data[i] += DELTA;
              func.compute(param,pt, temp1);
              // compute the difference between the two parameters and divide by the delta
              add(invDelta,temp1,-invDelta,temp0,temp1);
              // copy the results into the jacobian matrix
              System.arraycopy(temp1.data,0,deriv.data,i*pt.numRows,pt.numRows);
  
              param.data[i] -= DELTA;
          }
      }