使用MTL庫求解最小二乘解

2021-06-17 14:46:14 字數 1366 閱讀 7357

最小二乘計算最優解不管是哪個行業肯定都用到的非常多。對於遙感影象處理中,尤其是對影象進行校正處理,關於控制點的幾種校正模型中,都用到最小二乘來計算模型的係數。比如幾何多項式,或者通過gcp求解rpc係數,以及rpc的間接優化等都是離不開最小二乘的。下面使用mtl庫編寫的最小二乘求解ax=b形式的x最優解。

關於mtl庫的型別定義可以參考之前寫的求解特徵值和特徵向量那篇部落格。位址為:

首先是函式定義:

/**

* @brief 求解矩陣ax=b的最小二乘解集

* 注意:矩陣a的行數與b的行數必須相等,否則不能計算,此外x的大小與a的列數必須一致

* @param a 係數矩陣

* @param b 增廣矩陣中的b

* @param x 解集

* @return 是否計算成功

*/ bool slovemartix(const matrix a, const matrix b, vector &x);

接下來就是函式實現,其實用mtl庫很簡單,一共也就十幾行的**。實現**如下。

bool slovemartix(const matrix a, const matrix b, vector &x)

{ /*/

/* 求解矩陣 ax = b 的最小二乘解集

/* 注意:矩陣a的行數與b的行數必須相等,否則不能計算,此外x的大小與a的列數必須一致

/* 按最小二乘法組成法方程:

/* (a'*a)*x = (a'*b) 其中a'為a的轉置矩陣

/* 設:n=(a'*a), w=(a'*b) 法方程為 n*x=w

/*/int irows = a.nrows();

int icols = a.ncols();

// 矩陣a的行數與b的行數必須相等,否則不能計算,此外x的大小與a的列數必須一致

if (irows != b.nrows() || icols != x.size())

return false;

matrix at(icols, irows); //a的轉置矩陣

transpose(a,at);

matrix n(icols, icols);

mult(at, a, n); //計算n=(a'*a)

matrix w(icols, 1);

mult(at, b, w); //計算w=(a'*b)

vector pvector(icols);

lu_factor(n, pvector);

vector b(icols);

for(size_t i=0; i上面的**與matlab比較過,計算的結果是完全一樣,除了小數點十幾位後有些精度上的問題。不過一般肯定用不到那麼高的精度。

線性回歸 最小二乘求解

線性回歸 線性回歸用於數值 它的主要思想是利用預定的權值將屬性進行線性組合來表示類別 y w0 w1x1 w2x2 wnxn 其中,y是類別屬性值,x1,x2,xn是一般屬性值,w1,w2,xn是權值,w0稱為偏置,類似於一元線性回歸y ax b中b。求解線性回歸就是通過已知的一些資料點 1,xi1...

最小二乘以及最小二乘求解超定方程組最優解的推導

nabla 表示的是求導運算,設a是乙個 n times n的矩陣,f表示一種函式關係,則 nabla a f a katex parse error can t use function in math mode at position 18 begin partial f a b c均為矩陣 t...

Python知識 7 最小二乘求解

這裡展示利用python實現的最小二乘的直接求解方法。其求解原理,請參考 最小二乘法擬合非線性函式及其matlab excel 實現 1.一般曲線擬合 如下 coding utf 8 created on feb 20,2017 最小二乘擬合 給定的函式 fit fun x 已知資料x 2xn y ...