在研究zernike多項式過程中,需要使用到矩陣的最小二乘擬合。所以在這裡記錄分享eigen庫的最小二乘擬合使用方法。
by hpc_zy b=(
xtx)
−1xt
yb = (x^tx)^x^ty
b=(xtx
)−1x
tyb :n
×1矩陣
b:n \times 1 矩陣
b:n×1矩陣x:
m×n矩
陣,輸入
變數/特
徵x:m \times n 矩陣,輸入變數/特徵
x:m×n矩
陣,輸入
變數/特徵y:
m×1矩
陣,輸出
變數/擬
合目標y:m \times 1 矩陣,輸出變數/擬合目標
y:m×1矩
陣,輸出
變數/擬
合目標m:樣
本數m:樣本數
m:樣本數n:特
徵個數n:特徵個數
n:特徵個數
如一組樣本數為3、特徵數為3的矩陣,進行最小二乘擬合如下,
// 初始化
matrixxf x(3
,3);
matrixxf y(3
,1);
x <<3,
1,2,
3,2,
4,5,
5,2;
y <<2,
2,3;
// 最小二乘擬合
matrixxf xt = x.
transpose()
;matrixxf b =
(xt*x)
.inverse()
*xt*y;
// 檢驗
matrixxf yfit = x*b;
// 顯示
cout <<
"x = "
<< endl << x << endl << endl;
cout <<
"y = "
<< endl << y << endl << endl;
cout <<
"b = "
<< endl << b << endl << endl;
cout <<
"yfit = "
<< endl << yfit << endl << endl;
對應的matlab計算方法如下
x =[3
,1,2
;3,2
,4;5
,5,2
]y =[2
;2;3
]b =
inv(x'*x)*x'
*y % 也可以寫作 b =
(x'*x)\x'
*yyfit = x*b
結果對比如下,結果一致,ok
上文c**中我使用手動賦值的方式,其實對於大矩陣還可以使用迴圈賦值,如下
float a[9]
=;matrixxf x(3
,3);
for(
int i =
0; i <
3; i++
)for
(int j =
0; j <
3; j++)x
(i, j)
= a[i *
3+ j];
cout <<
"x = "
<< endl << x << endl << endl;
最小二乘擬合 6 7 最小二乘擬合問題
資料擬合問題的一般形式 任給一組離散資料 注 這裡的擬合函式不一定為多項式函式 記殘量的平方和為 求使得殘量平方和最小得一組係數就是線性最小二乘問題,為最小二乘問題得基函式,求得的擬合函式為資料的最小二乘擬合。求解 利用偏導數為零得到極值點的原理可以得到最小二乘問題滿足的方程組,求解方程組中未知係數...
最小二乘擬合
來自 某小皮 最優化函式庫optimization 優化是找到最小值或等式的數值解的問題。scipy.optimization子模組提供函式最小值,曲線擬合和尋找等式的根的有用演算法。最小二乘擬合 假設有一組實驗資料 xi,yi 事先知道它們之間應該滿足某函式關係yi f xi 通過這些已知的資訊,...
最小二乘線性擬合
實驗 給出實驗資料 程式 如下 write by void,2013.4.15,beijing import matplotlib.pyplot as plt import numpy as np x 13,15,16,21,22,23,25,29,30,31,36,40,42,55,60,62,6...