這是乙個資料擬合的例子,並沒有採用物件導向的設計方法是使能更好的理解lm演算法的流程,簡約而不簡單。演算法詳細過程不多介紹。程式中用到opencv庫中的矩陣類mat。
例:
#pragma once
#include #include "opencv2\core\core.hpp"
#pragma comment(lib,"opencv_core248d.lib")
const int maxtime = 50;
using namespace cv;
filestorage fs;
mat jacobin(const mat& pk/*[a,b]*/, const mat& x); //f = a*exp(-b*x)
mat yestimate(const mat& p, const mat& x);
inline void outdata(filestorage& fs, mat & m, char* filename)
void lm(double* p0, int pn, double* x, int xn, double* y, double lamda, double step, double ep = 0.0001)
mat_nm = jm.t()*jm + lamda*(mat::eye(pn, pn, cv_64f));
if (solve(nm, gm, dpm))
else
}else
}else
}}mat jacobin(const mat& pk/*[a,b]*/, const mat& x)
mat yestimate(const mat& p, const mat& x)
#include "lmm.h"
int main()
; double obs = ;
double p0 = ;
lm(p0, 2, data, 9, obs, 0.01, 10);
}
LM演算法初識
由於工作內容接觸到點雲標定,需要用到最小二乘法,所以特意花了點時間研究lm演算法,但是由於大學的高等數學忘得差不多了,所以本文從最基本的一些數學概念開始 在最優化演算法中,都是要求乙個函式的極小值,每一步迭代中,都要求目標函式值是下降的,而信賴域法,顧名思義,就是從初始點開始,先假設乙個可以信賴的最...
LM演算法詳解
殘差函式f x 為非線性函式,對其一階泰勒近似有 這裡的j是殘差函式f的雅可比矩陣,帶入損失函式的 令其一階導等於0,得 這就是 裡常看到的normal equation。lm是對高斯牛頓法進行了改進,在求解過程中引入了阻尼因子 2.1 阻尼因子的作用 2.2 阻尼因子的初始值選取 乙個簡單的策略就...
LM螞蟻聚類演算法
實驗表明 工蟻能在幾小時內將分散在蟻穴各處的大小不同的螞蟻屍體聚成幾類,小的蟻堆通過吸引螞蟻積攢更多的屍體來逐漸變大,這種正反饋會導致蟻堆逐漸越積越大,以達到聚類資料的目的。deneubourg 等人提出了一種基本模型 basic model 簡稱bm 用來解釋螞蟻屍體堆積成螞蟻墓的行為,並模擬實現...