1

Ceres を使用して適合を行っていますが、適合パラメーターの不確実性を取得したいと考えています。クラスを使用するように提案されていますがCovariance、ドキュメントを正しく読んだかどうかわかりません。これは、単純な線形フィットの不確実性を得るために、ドキュメントに類推して試したことです。

void Fit::fit_linear_function(const std::vector<double>& x, const std::vector<double>& y, int idx_start, int idx_end, double& k, double& d) {

  Problem problem;
  for (int i = idx_start; i <= idx_end; ++i) {
    //std::cout << "i x y "<<i<< " " << x[i] << " " << y[i] << std::endl;
    problem.AddResidualBlock(
        new ceres::AutoDiffCostFunction<LinearResidual, 1,1,  1>(
            new LinearResidual(x[i], y[i])),
        NULL, &k, &d);
  }
  Covariance::Options options;
  Covariance covariance(options);
  std::vector<std::pair<const double*, const double *>> covariance_blocks;
  covariance_blocks.push_back(std::make_pair(&k,&k));
  covariance_blocks.push_back(std::make_pair(&d,&d));
  CHECK(covariance.Compute(covariance_blocks,&problem));
  double covariance_kk;
  double covariance_dd;
  covariance.GetCovarianceBlock(&k,&k, &covariance_kk);
  covariance.GetCovarianceBlock(&d,&d, &covariance_dd);
  std::cout<< "Covariance test k" << covariance_kk<<std::endl;
  std::cout<< "Covariance test d" << covariance_dd<<std::endl;

コンパイルして出力を生成しますが、結果は私が得たものとはかなり異なるscipyため、間違いを犯したに違いありません.

4

1 に答える 1