C++ 二维权系数函数的逼近

C++ 二维权系数函数的逼近,c++,math,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 new

我需要近似一个表定义的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
);
typedef std::vectorDVector;
空隙约2d(
constdvector&x
,const DVector&y
、常数和重量
,双newMeasuredX
,双新测量
,双倍新测量重量
,双倍&超出近似值
,双倍&超过近似值
);
获取一个值(outApproximatedX;outApproximatedY)取决于以前的值和新的测量值

均方根(RMS)误差的使用方法如下:如果均方根误差最小,则所需函数应接近该点;如果均方根误差最大,则该点应以最小的贡献使用

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

谷歌搜索了大约半天,没有发现任何建议


谢谢。

您需要的是一条空间填充曲线,可以是希尔伯特曲线,也可以是皮亚诺曲线。sfc是2D或XD网格的良好近似值

要最小化到直线a x+b y=r的总平方最近距离,不能使用矩阵方程,因为问题不再是线性的

到直线的距离可以定义如下。那么你想最小化的函数是f(a,b,r)。当a2+b2=1时,此任务会稍微简化

如果你扩展它,它会变得相当复杂。我设法把它分解并简化了一些

要在多个点(O(n2))上计算这一点,速度可能会变慢。然而,有一个简单的优化。您可以存储部分结果,而不是反复计算总和:


这里σ变量是常用项的累加器。每次您想在计算中添加另一个点时,都要更新9个变量,并像以前一样使用它们来计算a、b和r。

非常感谢MizardX。帮了大忙。这就是我写的(如果有人需要:)


另外,我不能投票给MizardX(没有声誉)。有人能帮我做吗?

你知道吗
std::vector
实际上是一个类模板,所以你需要在
typedef
时提供至少一个类型参数?纳瓦兹当然知道。只是忘了。而且。。。发生了什么事?我的帖子中有,但我的剪贴板中有一份帖子的副本-没有向量的类型。。。嗯,我不明白你想要函数做什么。以简单(或加权)线性拟合;您要计算的是直线(
y=kx+m
)的斜率和偏移量,该直线尽可能靠近给定点。返回另一个点是没有意义的。检查alglib你应该知道该方程最小化了到直线的垂直平方(y²)距离,而不是最近的距离。要使距离直线最近的平方距离最小化,需要做更多的工作。如果这是你想要的,我可以更新答案。当然,我需要最小化到所需直线的距离(x^2+y^2)。你能帮我吗?更新了我的答案。放弃了矩阵计算,但现在它使用最近距离。