我有一个n点(2D)列表:P1(x0,y0),P2(x1,y1),P3(x2,y2)...... 点满足每个点具有唯一坐标以及每个点xi,yi>的坐标的条件。 0和xi,yi是整数。
任务是编写一个算法来近似这些点
y = | Acos (Bx) |
(接近或等于100%)我想用C#编写程序,但对我来说最大的问题是找到合适的算法。有没有人可以帮我这个?
答案 0 :(得分:0)
将B
作为一个独立参数,您可以使用最小二乘法求解A
的拟合,并计算拟合残差。
残留函数复杂,具有许多不同值的最小值,并且具有不规则的行为。无论如何,如果Xi
是整数,则该函数是周期性的,其周期与LCM
的{{1}}相关。
下面的图表显示Xi
的拟合余量从B
到0
以及2
到0
不等,并带有给定的样本点。< / p>
答案 1 :(得分:0)
基于How approximation search works我会在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
以匹配任何所需的方法,这只是abs差异的总和(可以使用最小二乘或任何...)