先上图
备注:横轴上,每个点之间的步进都是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;
}