00001 00028 #pragma once 00029 00030 #include <vector> 00031 #include <Eigen/Dense> 00032 00033 #include "isam/Node.h" 00034 00035 namespace isam { 00036 00037 // Abstract class to enforce interface for function object. 00038 class Function { 00039 public: 00040 virtual ~Function() {} 00041 virtual int num_measurements() const = 0; 00042 virtual Eigen::VectorXd evaluate() const = 0; 00043 virtual std::vector<Node*>& nodes() = 0; 00044 }; 00045 00053 Eigen::MatrixXd numericalDiff(Function& func); 00054 00055 }