C++ 如何为C+中的一组未知2D点生成最佳曲线拟合+;

C++ 如何为C+中的一组未知2D点生成最佳曲线拟合+;,c++,best-fit-curve,C++,Best Fit Curve,我正在尝试为一组未知的2D点获取最佳拟合。这些点是河流的中心点,它们不是按特定顺序排列的。 我尝试过使用多项式回归,但我不知道不同数据集的最佳多项式顺序是什么 我也尝试过三次样条曲线,但我不想要一条穿过所有点的线,我想要一条穿过这些点的最佳拟合线的近似值 我想得到这样的东西,即使是曲线较多的直线。这个例子是用多项式回归计算的,效果很好 有没有一种方法可以做一些平滑或回归算法,即使对于下面这样的一组点也可以得到最佳拟合线 多项式回归pol; 静态整数多项式=; 双误差=0.005f; 向量系数;

我正在尝试为一组未知的2D点获取最佳拟合。这些点是河流的中心点,它们不是按特定顺序排列的。 我尝试过使用多项式回归,但我不知道不同数据集的最佳多项式顺序是什么

我也尝试过三次样条曲线,但我不想要一条穿过所有点的线,我想要一条穿过这些点的最佳拟合线的近似值

我想得到这样的东西,即使是曲线较多的直线。这个例子是用多项式回归计算的,效果很好

有没有一种方法可以做一些平滑或回归算法,即使对于下面这样的一组点也可以得到最佳拟合线

多项式回归pol;
静态整数多项式=;
双误差=0.005f;
向量系数;
pol.fitIt(x,y,多项式,系数);
//获取拟合值
对于(std::size_t i=0;i=0)
{
yFitted+=(系数[顺序]*功率(点[i].x,顺序)+错误);
命令--;
}
点[i].y=yFitted;
}
在我用35个多项式阶的实现中,这是我能得到的全部,并且用更高的值改变多项式阶会变成系数的Nan值


我不确定这是否是我能找到的最佳方法。

你在寻找线性回归吗?不,非线性什么是非线性?线性回归中的“线性”是指由此产生的方程组。我知道你想要拟合一条直线,而线性回归可以做到这一点(还有更多),我不想拟合一条直线,这就是为什么线性回归不能工作。我使用多项式回归,但它在任何时候都不匹配。你看到我附上的照片了吗?好吧,我误解了。没有直线,尽管“这就是线性回归无法工作的原因”是不对的。无论如何,你应该展示你所尝试的,并解释为什么它不起作用
    PolynomialRegression<double> pol;
    static int polynomOrder = <whateverPolynomOrderFitsBetter>;
    double error = 0.005f;
    std::vector<double> coeffs;
    pol.fitIt(x, y, polynomOrder, coeffs);
    // get fitted values
    for(std::size_t i = 0; i < points.size(); i++)
    {
        int order = polynomOrder;
        long double yFitted = 0;
        while(order >= 0)
        {
            yFitted += (coeffs[order] * pow(points[i].x, order) + error);
            order --;
        }
        points[i].y = yFitted;
    }