# GradientChecker

```cpp
class GradientChecker
```

该类将代价函数返回的雅各比与使用有限差分估算的导数进行比较。它是用于单元测试的工具，比求解器选项中的 check\_gradients 选项提供更精细的控制。强制执行的条件是

$$
\forall i, j: \frac{J\_{i j}-J\_{i j}^{\prime}}{\max *{i j}\left(J*{i j}-J\_{i j}^{\prime}\right)}\<r
$$

其中，$$J\_{i j}$$ 是通过提供的成本函数乘以 Manifold::PlusJacobian 计算得出的 jacobian，$$J\_{i j}^{\prime}$$ 是通过有限差分计算得出的 jacobian，同样乘以 Manifold::PlusJacobian，r 是相对精度。

使用方法如下

```cpp
// my_cost_function takes two parameter blocks. The first has a
// manifold associated with it.

CostFunction* my_cost_function = ...
Manifold* my_manifold = ...
NumericDiffOptions numeric_diff_options;

std::vector<Manifold*> manifolds;
manifolds.push_back(my_manifold);
manifolds.push_back(nullptr);

std::vector parameter1;
std::vector parameter2;
// Fill parameter 1 & 2 with test data...

std::vector<double*> parameter_blocks;
parameter_blocks.push_back(parameter1.data());
parameter_blocks.push_back(parameter2.data());

GradientChecker gradient_checker(my_cost_function,
                                 manifolds,
                                 numeric_diff_options);
GradientCheckResults results;
if (!gradient_checker.Probe(parameter_blocks.data(), 1e-9, &results) {
  LOG(ERROR) << "An error has occurred:\n" << results.error_log;
}
```
