我需要近似表格定义的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搜索了大约半天,但没有找到任何建议。
谢谢。
答案 0 :(得分:3)
要通过 = r 最小化到 ax + 线的最近距离的总平方,您不能使用矩阵方程,因为问题不再是线性的。
到线的距离可以定义如下。然后,您要最小化的函数是 f ( a , b , r )。当 a 2 + b 2 = 1时,此任务会有所简化。
如果扩展它,它会变得非常复杂。我设法将其分解并稍微简化一下。
要计算多个点( O ( n 2 ))可能会变慢。然而,有一个简单的优化。您可以存储部分结果,而不是一遍又一遍地计算总和:
这里的σ变量是常用术语的累加器。每次要在计算中添加另一个点时,都要更新9个变量,并使用这些变量计算 a , b 和 r 之前。
答案 1 :(得分:1)
你想要的是一个空间填充曲线,无论是Hilbert曲线还是Peano曲线。 sfc是2D或XD网格的良好近似。
答案 2 :(得分:1)
非常感谢MizardX。很好的帮助。这就是我写的(如果有人需要:)) http://liveworkspace.org/code/815e2cc0810ab8ef14951252cca3fbbf
P.S。我不能投票支持MizardX(没有声望)。有人可以帮我吗?