京公网安备 11010802034615号
经营许可证编号:京B2-20210330
最小二乘法线性拟合和2次曲线拟合算法
最近由于项目要求,应用了最小二乘法线性拟合和2次曲线拟合算法,现总结如下:
最小二乘法线性拟合应用已有的采样时间点,再现这些点所描述的线性变化,即求出一个线性方程y=ax+b(这个算法的主要问题也就是如何用给定的数据求线性方程系数a和b)
//最小二乘法线性拟合,线性方程求系数,Xval时间数据,Yval每个时间点上的值数据,n数据的个数,Aval线性方程系数a,Bval线性方程系数b
BOOL DlgDataAnalyse::TwoCurveCompose(double *Xval,double *Yval,long n,double *Aval,double *Bval)
{
double mX,mY,mXX,mXY;
mX=mY=mXX=mXY=0;
for (int i=0;i
mX+=Xval[i];
mY+=Yval[i];
mXX+=Xval[i]*Xval[i];
mXY+=Xval[i]*Yval[i];
}
if(mX*mX-mXX*n==0)return FALSE;
*Aval=(mY*mX-mXY*n)/(mX*mX-mXX*n);
*Bval=(mY-mX*(*Aval))/n;
return TRUE;
}
最小二乘法2次曲线拟合应用已有的采样时间点,再现这些点所描述的2次曲线的变化,即求出一个二次曲线方程y=ax2+bx+c (这个算法的主要问题也就是如何用给定的数据求方程系数abc)
今天使用拟合的最小二乘法,求出了给定的一组坐标系上的点对最接近的直线的。
其具体理论如下:
在科学实验数据处理中,往往要根据一组给定的实验数据
,求出自变量x与因变量y的函数关系
,这是
为待定参数,由于观测数据总有误差,且待定参数ai的数量比给定数据点的数量少(即n<m),因此它不同于插值问题.这类问题不要求
通过点
,而只要求在给定点
上的误差
的平方和
最小.当
时,即
(5.8.1)
这里
是线性无关的函数族,假定在
上给出一组数据
,
以及对应的一组权
,这里
为权系数,要求
使
最小,其中
(5.8.2)
这就是最小二乘逼近,得到的拟合曲线为y=s(x),这种方法称为曲线拟合的最小二乘法.
(5.8.2)中
实际上是关于
的多元函数,求I的最小值就是求多元函数I的极值,由极值必要条件,可得
(5.8.3)
根据内积定义(见第三章)引入相应带权内积记号
(5.8.4)
则(5.8.3)可改写为
![]()
这是关于参数
的线性方程组,用矩阵表示为
(5.8.5)
(5.8.5)称为法方程.当
线性无关,且在点集
上至多只有n个不同零点,则称
在X上满足Haar条件,此时(5.8.5)的解存在唯一(证明见[3]).记(5.8.5)的解为
从而得到最小二乘拟合曲线
(5.8.6)
可以证明对
,有
![]()
故(5.8.6)得到的
即为所求的最小二乘解.它的平方误差为
(5.8.7)
均方误差为
![]()
在最小二乘逼近中,若取
,则
,表示为
(5.8.8)
此时关于系数
的法方程(5.8.5)是病态方程,通常当n≥3时都不直接取
作为基。
//最小二乘法二次曲线拟合算法,Xval时间数据,Yval每个时间点上的值数据,M代表几次曲线(如:2次的话就是3),N数据的个数,A二次曲线方程的系数(A[2]代表a,A[1]代表b,A[0]代表c)
BOOL DlgDataAnalyse::CalculateCurveParameter(double *Xval,double *Yval,long M,long N,double *A)
{
//X,Y -- X,Y两轴的坐标
//M -- 次数,表示几次曲线
//N -- 采样数目
//A -- 结果参数
register long i,j,k;
double Z,D1,D2,C,P,G,Q;
CDoubleArray B,T,S;
B.SetSize(N);
T.SetSize(N);
S.SetSize(N);
if(M>N)M=N;
for(i=0;i
Z=0;
B[0]=1;
D1=N;
P=0;
C=0;
for(i=0;i
P=P+Xval[i]-Z;
C=C+Yval[i];
}
C=C/D1;
P=P/D1;
A[0]=C*B[0];
if(M>1)
{
T[1]=1;
T[0]=-P;
D2=0;
C=0;
G=0;
for(i=0;i
Q=Xval[i]-Z-P;
D2=D2+Q*Q;
C=Yval[i]*Q+C;
G=(Xval[i]-Z)*Q*Q+G;
}
C=C/D2;
P=G/D2;
Q=D2/D1;
D1=D2;
A[1]=C*T[1];
A[0]=C*T[0]+A[0];
}
for(j=2;j
S[j]=T[j-1];
S[j-1]=-P*T[j-1]+T[j-2];
if(j>=3)
{
for(k=j-2;k>=1;k--)
S[k]=-P*T[k]+T[k-1]-Q*B[k];
}
S[0]=-P*T[0]-Q*B[0];
D2=0;
C=0;
G=0;
for(i=0;i
Q=S[j];
for(k=j-1;k>=0;k--)
Q=Q*(Xval[i]-Z)+S[k];
D2=D2+Q*Q;
C=Yval[i]*Q+C;
G=(Xval[i]-Z)*Q*Q+G;
}
C=C/D2;
P=G/D2;
Q=D2/D1;
D1=D2;
A[j]=C*S[j];
T[j]=S[j];
for(k=j-1;k>=0;k--)
{
A[k]=C*S[k]+A[k];
B[k]=T[k];
T[k]=S[k];
}
}
return TRUE;
}
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
数据收集是数据分析、数据挖掘与数字化运营的源头工作,数据收集的完整性、准确性、时效性直接决定后续数据分析结果的可信度与业 ...
2026-09-21箱线图是数据分析中用于识别数据分布、判断离散程度、筛查异常值的核心图表。相比于直方图、趋势图,箱线图可以精准区分正常数据 ...
2026-09-21 很多数据分析师精通Excel函数和数据透视表,但当被问到“数据从哪里来”“表和视图有什么区别”“数据库管理系统和SQL是什么 ...
2026-09-21在数据库数据查询与数据分析工作中,日期时间是最常用的数据类型之一。原始数据库中存储的日期格式多为标准时间戳、年月日时分秒 ...
2026-09-20在时序数据分析中,增长率是衡量数据涨跌幅度、研判发展趋势、识别周期波动的核心指标,主要分为环比增长率与同比增长率。传统Ex ...
2026-09-20 很多企业团队并非缺乏指标,而是陷入“指标失控”:仪表盘上堆满实时跳动的数据,却无法回答“当前瓶颈在哪、下一步该做什么 ...
2026-09-20CDA数据分析师 出品 作者:李诗怡 STP模型(营销战略三步法) 定义: 现代营销战略核心框架,通过市场细分(S)、目标市场选择( ...
2026-09-18在互联网产品迭代、运营优化、界面改版与策略升级过程中,主观经验判断容易造成决策偏差、盲目改版、资源浪费等问题。AB实验(AB ...
2026-09-18 很多企业并不缺少指标,缺少的是让指标“串起来、动起来、用起来”的体系。零散指标像散落一地的珠子,指标体系则是那根把珠 ...
2026-09-18在电商行业精细化运营时代,流量红利逐步消退,粗放式投流、广撒网营销模式已无法适配市场竞争需求。依托用户点击、加购、收藏、 ...
2026-09-17在数据可视化与数据分析工作中,图表是将零散数据转化为直观业务规律的核心工具。不同图表拥有专属的数据逻辑与分析维度,能够从 ...
2026-09-17 很多数据分析师每天盯着GMV、DAU、转化率,但当被问到“哪些指标在所有行业都适用”“哪些指标只对电商有意义”“二者如何搭 ...
2026-09-17在企业数字化运营、业务流程管理与精细化管控体系中,流程运营是串联各项业务环节、保障工作落地、提升运转效率的核心载体。无论 ...
2026-09-16在数据分析与统计学研究中,卡方检验是分析分类变量关联性与差异性的重要方法,广泛应用于市场调研、行为统计、社会调查、商业数 ...
2026-09-16 很多数据分析师每天盯着GMV、DAU、转化率,但当被问到“什么是指标”“指标和维度有什么区别”“如何定义指标值的计算规则和 ...
2026-09-16CDA数据分析师 出品 作者:李诗怡 定义: 用户增长核心分析框架,刻画用户从接触产品到自发推荐的全生命周期,五个递进环节构建 ...
2026-09-15在数字化营销与精细化用户运营时代,企业传统的广撒网式营销模式成本高、转化率低,已无法适配精准商业竞争需求。客户画像作为大 ...
2026-09-15 很多数据分析师精通描述性统计,能熟练计算均值、中位数、标准差,但当被问到“用500个样本如何推断10万用户的真实满意度” ...
2026-09-15在MySQL数据库数据查询与数据分析中,GROUP BY与ORDER BY是使用频率极高的核心关键字。二者语法结构相似,常搭配使用,但核心功 ...
2026-09-14随着数字化治理、智慧运营、数字孪生技术的普及,数字体征成为衡量业务状态、系统运行、城市治理与企业经营健康度的核心体系。数 ...
2026-09-14