當前位置:編程學習大全網 - 源碼下載 - matlab擬合離散點曲線

matlab擬合離散點曲線

問題分析

1、從數據看,與橢圓的形狀吻合不是很好,尤其是短軸部分明顯凹入。

2、擬合的基本思路是,使用長半軸a、短半軸b和傾角Q作為參數描述橢圓方程(進壹步還可以考慮圓心不在原點,再增加兩個參數),然後通過優化,目標是使得所有已知點到橢圓的總距離最短。

3、關於點到橢圓的最短距離,有很多討論,都非常復雜,並不實用。這裏采用在橢圓上取足夠多的點然後直接計算的距離的方式。

4、擬合得到橢圓參數後,面積S=πab直接計算,主軸和X軸的夾角為擬合得到的數據,而關於橢圓的X最大值對應的X,Y坐標的計算,可以把點取密集壹些,直接求最大值,也可以對X求導數,然後解X'=0得到對應的t,再計算X、Y。

參考代碼

12345678910111213141516171819202122232425262728293031323334353637383940function?zdX=[0.48,?1.58,2.428,3.032,3.36,3.368,2.92,2.172,1.368,0.512,-0.436,0.876,-0.48,-1.58,-2.428,-3.032,-3.36,-3.368,-2.92,-2.172,-1.368,-0.512,0.436,0.48];Y=[0.752,1.8572,2.39,2.24,1.766,0.8828,0.0572,-0.3136,-0.472,-0.6064,-0.7864,-0.2804,-0.752,-1.8572,-2.39,-2.24,-1.766,-0.8828,-0.0572,0.3136,0.472,0.6064,0.7864,0.752];clfplot(X,Y,'x')hold?onc?=?lsqcurvefit(@curve,[3.5?1.5?30*pi/180?0?0],[X;Y],X*0)a?=?c(1);b?=?c(2);Q?=?c(3);T=linspace(0,2*pi,100);x1=a*cos(T);y1=b*sin(T);x=x1*cos(Q)-y1*sin(Q);y=x1*sin(Q)+y1*cos(Q);plot(x,y,'r--')%?橢圓的面積S?=?pi*a*b%?橢圓的X最大值對應的X,Y坐標t=fzero(@(t)-a*cos(Q)*sin(t)-b*sin(Q)*cos(t),0);x=a*cos(t)*cos(Q)-b*sin(t)*sin(Q)y=a*cos(t)*sin(Q)+b*sin(t)*cos(Q)plot(x,y,'mo')legend('原始數據','擬合曲線','X最大值',4)%?橢圓的主軸和X軸的夾角Q?=?Q?*?180/pi?function?f?=?curve(c,xy)a?=?c(1);b?=?c(2);Q?=?c(3);t=linspace(0,2*pi,500);x1=a*cos(t);y1=b*sin(t);x=x1*cos(Q)-y1*sin(Q)?+?c(4);y=x1*sin(Q)+y1*cos(Q)?+?c(5);f?=?xy(1,:)*0;for?i=1:length(xy)f(i)?=?<a

href="/s?wd=min&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YLrj-WnvP-njuBnARsn1m10ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHTdrjR3njTsPWfYn1n1nHmY"

target="_blank"

class="baidu-highlight">min</a>(?sqrt((xy(1,i)-x).^2?+?(xy(2,i)-x).^2?)?);end

結果

程序輸出:

1234567891011121314c?=3.47941.48090.5155-0.0066?0?S?=16.1875?x?=3.1141?y?=1.3654?Q?=29.5357

也就是說a=3.48,b=1.48,Q=29.5度,S=16.2,如圖所示。

  • 上一篇:python中 r'', b'', u'', f'' 的含義
  • 下一篇:android scrollview嵌套listview 頁面有多余空白
  • copyright 2024編程學習大全網