最小二乘計算最優解不管是哪個行業肯定都用到的非常多。對於遙感影象處理中,尤其是對影象進行校正處理,關於控制點的幾種校正模型中,都用到最小二乘來計算模型的係數。比如幾何多項式,或者通過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 ...