先從簡單的開始學習。
1.繼承sizedcostfunction,構造costfunction
#include
#include "ceres/ceres.h"
#include "glog/logging.h"
using ceres::costfunction;
using ceres::sizedcostfunction;
using ceres::problem;
using ceres::solver;
using ceres::solve;
// class inheritance of sizedcostfunction
class quadraticcostfunction
: public sizedcostfunction<1
/* number of residuals */,
1/* size of first parameter */>
virtual
bool evaluate(double
const* const* parameters,
double* residuals,
double** jacobians) const
return
true;
}};// main
int main(int argc, char** argv)
這個例子並沒能解決我的疑惑,jacobians用在**?我們繼續下乙個例子。
2.曲線擬合與lossfunction
#include "ceres/ceres.h"
#include "glog/logging.h"
using ceres::autodiffcostfunction;
using ceres::costfunction;
using ceres::problem;
using ceres::solver;
using ceres::solve;
// 用於擬合曲線的點數量
const
int knumobservations = 67;
const
double data =
// 構建costfunction結構體
struct exponentialresidual
// 函式y = e^.
// 殘差為 y_ - y
template
bool
operator()(const t* const m,
const t* const c,
t* residual) const
private:
const
double x_;
const
double y_;
};// main
int main(int argc, char** argv)
solver::options options;
options.max_num_iterations = 25;
options.linear_solver_type = ceres::dense_qr;
options.minimizer_progress_to_stdout = true;
solver::summary summary;
solve(options, &problem, &summary);
std::cout
<< summary.briefreport() << "\n";
std::cout
<< "initial m: "
<< 0.0
<< " c: "
<< 0.0
<< "\n";
std::cout
<< "final m: "
<< m << " c: "
<< c << "\n";
return
0;}
介紹了兩個簡單的例子,下一節介紹更複雜一點的ba Ceres Solver學習筆記 1
ceres solver是google出的解決非線性最小二乘問題的庫,非線性最小二乘問題具有如下形式 i fi xi1,xik 2 是我們所說的殘差,fi 在ceres中叫做costfunction,i 叫做lossfunction,用來剔除異常值影響。ceres最簡單的應用,其他博主的部落格中已經...
利用ceres solver解大規模線性方程組
在工程應用中,最後要求解的線性方程組往往是原來的殘差模型進行線性化後的誤差方程。通常情況下,模型的線性化由人工完成,而求解誤差方程則借助eigen等矩陣運算庫 參考1 來實現。現在,我們有了另一種選擇,那就是ceres solver。ceres是google公司用來解決非線性優化問題的開源庫,主要是...
學習筆記 雜湊學習筆記
hash基本原理 hash就是乙個像函式一樣的東西,你放進去乙個值,它給你輸出來乙個值。輸出的值就是hash值。一般hash值會比原來的值更好儲存 更小 或比較。那字串hash就非常好理解了。就是把字串轉換成乙個整數的函式。而且要盡量做到使字串對應唯一的hash值。它的主要思路是選取恰當的進製,可以...