最小二乘法擬合圓公式推導(dǎo)及matlab實(shí)現(xiàn).doc
-
資源ID:6646561
資源大?。?span id="24d9guoke414" class="font-tahoma">150KB
全文頁(yè)數(shù):5頁(yè)
- 資源格式: DOC
下載積分:9.9積分
快捷下載
會(huì)員登錄下載
微信登錄下載
微信掃一掃登錄
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請(qǐng)知曉。
|
最小二乘法擬合圓公式推導(dǎo)及matlab實(shí)現(xiàn).doc
2009-01-17|最小二乘法擬合圓公式推導(dǎo)及matlab實(shí)現(xiàn) 最小二乘法(least squares analysis)是一種數(shù)學(xué)優(yōu)化技術(shù),它通過最小化誤差的平方和找到一組數(shù)據(jù)的最佳函數(shù)匹配。最小二乘法是用最簡(jiǎn)的方法求得一些絕對(duì)不可知的真值,而令誤差平方之和為最小。 最小二乘法通常用于曲線擬合 (least squares fitting) 。這里有擬合圓曲線 的公式推導(dǎo)過程和vc實(shí)現(xiàn)。matlab 實(shí)現(xiàn):functionR,A,B=irc(x,y,N)%x,y是平面點(diǎn)的坐標(biāo),N是點(diǎn)個(gè)數(shù)%R是擬合半徑,A,B是圓心的平面坐標(biāo)x1=0;x2=0;x3=0;y1=0;y2=0;y3=0;x1y1=0;x1y2=0;x2y1=0;for i=1:Nx1=x1+x(i);x2=x2+x(i)*x(i);x3=x3+x(i)*x(i)*x(i);y1=y1+y(i);y2=y2+y(i)*y(i);y3=y3+y(i)*y(i)*y(i);x1y1=x1y1+x(i)*y(i);x1y2=x1y2+x(i)*y(i)*y(i);x2y1=x2y1+x(i)*x(i)*y(i);endC=N*x2-x1*x1;D=N*x1y1-x1*y1;E=N*x3+N*x1y2-(x2+y2)*x1;G=N*y2-y1*y1;H=N*x2y1+N*y3-(x2+y2)*y1;a=(H*D-E*G)/(C*G-D*D);b=(H*C-E*D)/(D*D-G*C);c=-(a*x1+b*y1+x2+y2)/N;A=a/(-2);B=b/(-2);R=sqrt(a*a+b*b-4*c)/2;VCvoid CViewActionImageTool:LeastSquaresFitting() if (m_nNum<3) return; int i=0; double X1=0; double Y1=0; double X2=0; double Y2=0; double X3=0; double Y3=0; double X1Y1=0; double X1Y2=0; double X2Y1=0; for (i=0;i<m_nNum;i+) X1 = X1 + m_pointsi.x; Y1 = Y1 + m_pointsi.y; X2 = X2 + m_pointsi.x*m_pointsi.x; Y2 = Y2 + m_pointsi.y*m_pointsi.y; X3 = X3 + m_pointsi.x*m_pointsi.x*m_pointsi.x; Y3 = Y3 + m_pointsi.y*m_pointsi.y*m_pointsi.y; X1Y1 = X1Y1 + m_pointsi.x*m_pointsi.y; X1Y2 = X1Y2 + m_pointsi.x*m_pointsi.y*m_pointsi.y; X2Y1 = X2Y1 + m_pointsi.x*m_pointsi.x*m_pointsi.y; double C,D,E,G,H,N; double a,b,c; N = m_nNum; C = N*X2 - X1*X1; D = N*X1Y1 - X1*Y1; E = N*X3 + N*X1Y2 - (X2+Y2)*X1; G = N*Y2 - Y1*Y1; H = N*X2Y1 + N*Y3 - (X2+Y2)*Y1; a = (H*D-E*G)/(C*G-D*D); b = (H*C-E*D)/(D*D-G*C); c = -(a*X1 + b*Y1 + X2 + Y2)/N; double A,B,R; A = a/(-2); B = b/(-2); R = sqrt(a*a+b*b-4*c)/2; m_fCenterX = A; m_fCenterY = B; m_fRadius = R; return;