C++ 二维权系数函数的逼近
我需要近似一个表定义的2D函数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
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)。你能帮我吗?更新了我的答案。放弃了矩阵计算,但现在它使用最近距离。