用权系数逼近二维函数

时间:2011-03-19 12:47:47

标签: c++ math

我需要近似表格定义的2D函数,如

x0 y0
x1 y1
...
xn yn

对于每个点,我都有“权重”(此度量的均方根误差)。我需要写一个这样的函数:

typedef std::vector< double > DVector;
void approximate2D(
      const DVector & x
    , const DVector & y
    , const DVector & weights
    , double newMeasuredX
    , double newMeasuredY
    , double newMeasuredWeight
    , double & outApproximatedX
    , double & outApproximatedY
);

获取一个值(outApproximatedX; outApproximatedY)取决于先前的值和新的测量值。

根均方(RMS)误差应该如下使用:如果RMS误差最小,那么期望的函数应该接近这一点,如果RMS误差是最大的,那么这个点应该用于贡献微乎其微

近似应该是线性的(我认为),因为我知道,所需的函数是一条直线。

用Google搜索了大约半天,但没有找到任何建议。

谢谢。

3 个答案:

答案 0 :(得分:3)

要通过 = r 最小化到 ax + 线的最近距离的总平方,您不能使用矩阵方程,因为问题不再是线性的。

到线的距离可以定义如下。然后,您要最小化的函数是 f a b r )。当 a 2 + b 2 = 1时,此任务会有所简化。

Concepts

如果扩展它,它会变得非常复杂。我设法将其分解并稍微简化一下。

Calculations, calculations, calculations!

要计算多个点( O n 2 ))可能会变慢。然而,有一个简单的优化。您可以存储部分结果,而不是一遍又一遍地计算总和:

Something that looks like an algorithm

这里的σ变量是常用术语的累加器。每次要在计算中添加另一个点时,都要更新9个变量,并使用这些变量计算 a b r 之前。

答案 1 :(得分:1)

你想要的是一个空间填充曲线,无论是Hilbert曲线还是Peano曲线。 sfc是2D或XD网格的良好近似。

答案 2 :(得分:1)

非常感谢MizardX。很好的帮助。这就是我写的(如果有人需要:)) http://liveworkspace.org/code/815e2cc0810ab8ef14951252cca3fbbf

P.S。我不能投票支持MizardX(没有声望)。有人可以帮我吗?