C 實現多項式曲線擬合 polyfit

2021-08-18 05:39:17 字數 1543 閱讀 4731

基本原理:冪函式可逼近任意函式。

上式中,n表示多項式階數,實際應用中一般取3或5;

假設n=5,則:

共有6個未知數,僅需6個點即可求解;

可表示為矩陣方程:

y的維數為[r*1],u的維數[r * 6],k的維數[6 * 1]。

r> 6時,超定方程求解:

下面是使用c++實現的多項式擬合的程式,程式中使用opencv進行矩陣運算和影象顯示。程式分別執行了n=3,5,7,9時的情況,結果如下:

//n:多項式階次

int n = 9;

mat mat_k = polyfit(in_point, n);

//計算結果視覺化

mat out(150, 500, cv_8uc3,scalar::all(0));

//畫出擬合曲線

for (int i = in[0].x; i < in[size(in)-1].x; ++i)

circle(out, ipt, 1, scalar(255, 255, 255), cv_filled, cv_aa);

} //畫出原始散點

for (int i = 0; i < size(in); ++i)

imshow("9次擬合", out);

waitkey(0);

return 0;

}mat polyfit(vector& in_point, int n)

for (int i = 0; i < mat_y.rows; ++i)

//矩陣運算,獲得係數矩陣k

mat mat_k(x_num, 1, cv_64f);

mat_k = (mat_u.t()*mat_u).inv()*mat_u.t()*mat_y;

cout << mat_k << endl;

return mat_k;

}

多項式曲線擬合

給定資料點pi xi,yi 其中i 1,2,m。求近似曲線y x 並且使得近似曲線與y f x 的偏差最小。近似曲線在點pi處的偏差 i xi y,i 1,2,m。損失計算 1.使偏差絕對值之和最小 2.使偏差絕對值最大的最小 3.使偏差平方和最小 推導 擬合多項式 計算誤差 求引數,求偏導 得到 ...

多項式曲線擬合

給定資料點pi xi,yi 其中i 1,2,m。求近似曲線y x 並且使得近似曲線與y f x 的偏差最小。近似曲線在點pi處的偏差 i xi y,i 1,2,m。損失計算 1.使偏差絕對值之和最小 2.使偏差絕對值最大的最小 3.使偏差平方和最小 推導 擬合多項式 計算誤差 求引數,求偏導 得到 ...

多項式曲線擬合

問題描述 尋找一系列合適的引數 w,使得其對應的多項式與樣值點最接近。對於如何刻畫 最接近 可以定義目標函式最小化 如下圖 由下圖可見,當多項式的階數 m 增加時,紅色多項式曲線與樣本的誤差越小。當m為9時,多項式曲線通過每乙個樣本點。over fitting 問題 但是多項式階數為9時,其推廣能力...