繁体   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