重複造輪子雖然很多人不推薦,但是個人認為,不重複造一下輪子,也就不能真正的懂輪子的寫作邏輯優點和考慮,更別說優化輪子.會導致像高中一聽就會,一做就錯的感覺,所以筆者挑選一下極具代表性的演算法進行手寫,收貨頗豐.
本**基於高翔博士#include
#include
#include
"opencv2/opencv.hpp"
#include
#include
using
namespace eigen;
using
namespace std;
using
namespace cv;
void
makethetestnum
(vector<
double
>
&xset ,vector<
double
>
&yset)
;void
gaussnewton
(const vector<
double
>
&xset ,
const vector<
double
>
&yset ,
double
&a,double
&b,double
&c);
intmain()
void
makethetestnum
(vector<
double
>
&xset ,vector<
double
>
&yset)
cout size() != yset. size() ) cout<< "data is bad!" <}void gaussnewton (const vector< double > &xset , const vector< double > &yset , double &a,double &b,double &c)//使用eigen結算線性方程組 vector3d delta_abc = h. ldlt() .solve (g); //vector3d delta_abc = h.ldlt().solve(g); //迭代的停止條件,模仿ceres if(delta_abc. norm() < 1e-5 ) cout<< "delta_abc" (delta_abc[0] )||isnan (delta_abc[1] )||isnan (delta_abc[2] ))// if(i>1 && cost >=lastcost) lastcost = cost; a += delta_abc[0] ; b + = delta_abc[1] ; c + = delta_abc[2] ; cout<< "第"<"次:" "a : " "b : " "c : " "delta_abc" <(flag) else } project( guassnewton ) set( cmake_build_type "release" )set( cmake_cxx_flags "-std=c++11 -o3" )# eigen find_package(eigen3 3.3 required) include_directories($) # opencv find_package(opencv 3.1 required) include_directories($) add_executable( guassnewton gaussnewton.cc ) target_link_libraries(guassnewton $ ) a :1.93561315 b :0.994692891 c :1.06252461 delta_abc1. 48018345 delta_abc 0.0661428147 0.000961872899 -0.0599845384 第198次: a :2.00175596 b :0.995654764 c :1.00254007 delta_abc0. 0892969316 delta_abc- 0.00175240116 0.00433912412 -0.00253747612 第199次: a :2.00000356 b :0.999993888 c :1.0000026 delta_abc0. 00532331598 已收斂,結果為: final a : 2.00000356 final b : 0.999993888 final c : 1.0000026 cmake minimum required version 3.15 project guassnewton set cmake cxx standard 14 opencv find package opencv required include directories eigen includ... 擬合曲線 取100個帶有高斯雜訊的數,利用高斯牛頓法進行擬合求取估計值 a b c 主要步驟 1.構造誤差項 2,求雅克比,以及cost 3,判斷cost是否小於上次cost,小 執行4,大 輸出結果 4,求h g 5求dx 6,更新估計量,到步驟2 高斯牛頓法練習 created by fangu... 在我們日常開發普通的spring framework專案過程中 enable用的不是很多,但在springboot開發過程,我們經常會遇到 enable開始的好多註解,比如 enablewebmvc enableeurekaserver enableasync enablescheduling等,今...cmake_minimum_required( version 2.8 )
第197次:
手寫高斯牛頓法
手寫高斯牛頓曲線擬合(c
Spring系列之手寫自定義的 Enable 註解