[英]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%) 我想用C#编写程序,但是对我来说最大的问题是找到合适的算法。 有人能帮助我吗?
将B
作为独立参数,可以使用最小二乘法求解A
的拟合,并计算拟合残差。
残差函数很复杂,具有多个不同值的最小值,并且行为不规则。 无论如何,如果Xi
是整数,则该函数是周期性的,并且周期与Xi
的LCM
有关。
下图显示了在给定采样点下B
的拟合残差在0
到2
和0
到10
。
基于近似搜索的工作原理,我将在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,max
和step
范围以匹配数据集 您还应该添加输入点和输出曲线的图,以查看是否接近解。 如果没有有关输入点的更多信息,则很难更具体。 您可以更改差值计算e
来匹配任何所需的方法,这只是绝对差值的总和(可以使用最小二乘或其他形式...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.