当前位置:   article > 正文

matlab做分段拟合,曲线拟合的MATLAB实现

分段拟合

让我们把二者都绘成图。

xi=linspace(0, 1, 100);%x-axis data for plotting

z=polyval(p, xi);%polyval 求多项式

plot(x, y, ' o ' , x, y, xi, z, ' : ' )

xlabel('x')

ylabel('y=f(x)')

title('Second Order Curve Fitting')

//最小二乘法曲线拟合

typedef CArrayCDoubleArray;

BOOL CalculateCurveParameter(CDoubleArray *X,CDoubleArray *Y,long M,long N,CDoubleArray *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

(*A)[i]=0;

Z=0;

B[0]=1;

D1=N;

P=0;

C=0;

for(i=0;i

{

P=P+(*X)[i]-Z;

C=C+(*Y)[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=(*X)[i]-Z-P;

D2=D2+Q*Q;

C=(*Y)[i]*Q+C;

G=((*X)[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*((*X)[i]-Z)+S[k];

D2=D2+Q*Q;

C=(*Y)[i]*Q+C;

G=((*X)[i]-Z)*Q*Q+G;

}

C=C/D2;

P=G/D2;

Q=D2/D1;

D

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/90263
推荐阅读
相关标签
  

闽ICP备14008679号