不限语言类型,想获得离散点集合的轴心线,以表示走向。

先上图
图片说明

备注:横轴上,每个点之间的步进都是1.也就是第一个点和第二个点之间的横轴值相差1. 第二个点和第三个点的横轴值也是相差1. 以此类推。

如上图,我想把数据库中取出来的离散点集合的走向线画出来,也就是图中的红色走向线。显示到Web界面上去。请问怎么计算这个走向线的起始点的x,y 的值啊?

提示:可以用任意语言计算出来都行,Python、C++、C#、Java都行,只要能计算出来。

麻烦各位大神帮忙解决一下咯!或者有个思路也是好的。
先感谢各位。

这是一个线性回归的问题。如果你只是想获得离散点的拟合曲线,用excel表格或者MATLAB就可以画出来,也可以得到拟合曲线的方程。如果你想知道生成拟合曲线的算法,你可以看看最小二乘法拟合曲线,如果是直线,算法还是很简单的。

试试用c# 绘制来坐标

最小二乘法拟合曲线的方法。我写的是求解拟合直线的系数的公式,未必能解释的清清楚楚,如果有什么困惑,还请参考书籍《数值计算方法》或者《数值方法简明教程》或者其他关于数值计算的书。图片说明

下面是一段C程序,Python我没用过。程序并不复杂,你自己也可改为Python版本的代码。

 #include<stdio.h>
void Line(int n,double X[], double Y[], double *c0, double *c1);
int main()
{
    double c0, c1;
    double X[6] = { 1,2,4,6,8,10 },Y[6] = {1.8,3.7,8.2,12.0,15.8,20.2};

    Line(6,X, Y, &c0, &c1);
    printf("%lf %lf\n",c0,c1);
    return 0;
}

//最小二乘法求拟合曲线
//输入:离散点的个数n,X变量,Y变量
//输出:直线y=c0+c1*x的两个系数c0和c1
void Line(int n,double X[], double Y[], double *c0, double *c1)//
{

    double a00=0, a01=0, a10=0, a11=0, b0=0, b1=0;

    a00 = n;

    for (int i = 0;i < n;i++)
    {
        a01 = a01 + X[i];
        a11 = a11 + X[i] * X[i];
        b0 = b0 + Y[i];
        b1 = b1 + X[i]*Y[i];
    }

    a10 = a01;

    *c1 = (a00*b1 - a10*b0) / (a00*a11 - a10*a01);
    *c0 = (b0 - a01*(*c1)) / a00;
}