簡體   English   中英

擬合最接近曲線的n個點

[英]Approximation of n points to the curve with the best fit

我有n個點(2D)的列表:P1(x0,y0),P2(x1,y1),P3(x2,y2)…點滿足每個點具有唯一坐標以及每個點xi的坐標的條件,yi> 0並且xi,yi是整數。

任務是編寫一個算法來近似這些點

  • 到曲線y = | Acos (Bx) | y = | Acos (Bx) | 最合適(接近或等於100%)
  • 從而使系數A和B盡可能簡單。

我想用C#編寫程序,但是對我來說最大的問題是找到合適的算法。 有人能幫助我嗎?

B作為獨立參數,可以使用最小二乘法求解A的擬合,並計算擬合殘差。

殘差函數很復雜,具有多個不同值的最小值,並且行為不規則。 無論如何,如果Xi是整數,則該函數是周期性的,並且周期與XiLCM有關。

下圖顯示了在給定采樣點下B的擬合殘差在02010

在此處輸入圖片說明在此處輸入圖片說明

基於近似搜索的工作原理,我將在C ++中嘗試以下方法:

// (global) input data
#define _n 100
double px[_n]; // x input points
double py[_n]; // y input points

// approximation
int ix;
double e;
approx aa,ab;
//            min  max   step  recursions  ErrorOfSolutionVariable
for (aa.init(-100,+100.0,10.00,3,&e);!aa.done;aa.step())
for (ab.init(-0.1,+  0.1, 0.01,3,&e);!ab.done;ab.step())
    {
    for (e=0.0,ix=0;ix<_n;ix++) // test all measured points (e is cumulative error)
        {
        e+=fabs(fabs(aa.a*cos(ab.a*px[ix]))-py[ix]);
        }
    }
// here aa.a,ab.a holds the result A,B coefficients

它使用我上面鏈接的問題中的approx

  • 您需要設置min,maxstep范圍以匹配數據集
  • 可以通過增加遞歸次數來提高准確性
  • 如果需要,可以提高性能
    • 並非所有點都用於不太精確的遞歸層
    • 增加開始步長(但如果太大,則會使結果無效)

您還應該添加輸入點和輸出曲線的圖,以查看是否接近解。 如果沒有有關輸入點的更多信息,則很難更具體。 您可以更改差值計算e來匹配任何所需的方法,這只是絕對差值的總和(可以使用最小二乘或其他形式...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM