matlab曲线拟合_第1页
matlab曲线拟合_第2页
matlab曲线拟合_第3页
matlab曲线拟合_第4页
matlab曲线拟合_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、函数插值与曲线拟合1、函数插值一维插值:interp1(x,y,cx, 'method ')一维插值:interp1(x,y,z,cx,cy, 'method ') method:nearest 、linear、spline、cubic 例:clearecho onx=-2:0.4:2;y=2.8 2.96 2.54 3.44 3.565.46.0 8.7 10.1 13.3 14.0;t=-2:0.01:2;nst=interp1(x,y,t,'nearest');plot(x,y,'r*',t,nst)title('最

2、临近点插值')lnr=interp1(x,y,t,'linear');figure(2)plot(x,y,'r*',t,lnr,'b:')title('线性由由值')spl=interp1(x,y,t,'spline');figure(3)plot(x,y,'r*',t,spl)title('样条插值')cbc=interp1(x,y,t,'cubic');figure(4)plot(x,y,'r*',t,cbc,'k-')ti

3、tle('三次插值')2、曲线拟合多项式拟合:polyfit(x,y,m) 线性:m=1,二次:m=2,例:x=0:0.1:1;y=-0.447 1.978 3.28 6.16 7.08 7.347.66 9.56 9.48 9.30 11.2;A=polyfit(x,y,2)Z=polyval(A,x);Plot(x,y, 'r*',x,z, 'b')matalb曲线拟合的问题%多项式拟合函数 polyfit示例x=0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1;y=-0.4471 0.978 3.28 6.16

4、 7.08 7.34 7.66 9.56 9.48 9.30 11.2;n=2;%polynomial orderp=polyfit(x, y, n);%polyfit的输出是一个多项式系数的行向量。%其解是y = -9.8108x2 +20.1293x -0.0317 。为了将曲线拟合解与数据点比较,让我们把二者都绘成图。xi=linspace(0, 1, 100);%x-axis data for plottingz=polyval(p, xi);%polyval 求多项式值plot(x, y, ' o ' , x, y, xi, z,':')xlabel(

5、'x')ylabel('y=f(x)')title('Second Order Curve Fitting')最小二乘法曲线拟合typedef CArray<double,double>CDoubleArray;M,longBOOL CalculateCurveParameter(CDoubleArray *X,CDoubleArray *Y,longN,CDoubleArray *A)/X,Y- X,Y两轴的坐标/M-结果变量组数/N-采样数目/A-结果参数register long i,j,k;double Z,D1,D2,C,P

6、,G,Q;CDoubleArray B,T,S;B.SetSize(N);T.SetSize(N);S.SetSize(N);if(M>N)M=N;for(i=0;i<M;i+)(*A)i=0;Z=0;B0=1;D1=N;P=0;C=0;for(i=0;i<N;i+)P=P+(*X)i卜Z;C=C+(*Y)i;C=C/D1;P=P/D1;(*A)0=C*B0;if(M>1)T1=1;T0=-P;D2=0;C=0;G=0;for(i=0;i<N;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;

7、P=G/D2;Q=D2/D1;D1=D2;(*A)1=C*T1;(*A)0=C*T0+(*A)0;for(j=2;j<M;j+)Sj=Tj-1;Sj-1=-P*Tj-1+Tj-2;if(j>=3)for(k=j-2;k>=1;k-)Sk=-P*Tk+Tk-1-Q*Bk;S0=-P*T0-Q*BO;D2=0;C=0;G=0;for(i=0;i<N;i+)Q=Sj;for(k=j-1;k>=0;k-)Q=Q*(*X)i-Z)+Sk;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;(*

8、A)j=C*Sj;Tj=Sj;for(k=j-1;k>=0;k-)(*A)k尸C*Sk+(*A)k;Bk=Tk;Tk=Sk;return TRUE;* %只考虑线性拟合*%* %原始数据*t = 0 .3 .8 1.1 1.6 2.3'y = 0.5 0.82 1.14 1.25 1.35 1.40'%* %多项式拟合*p=polyfit(t,y,2)%利用左除X = ones(size(t) t t.A2;a = Xy%regress 函数X = ones(size(t) t t.A2;b=regress(y,X)%lsqcurvefit 函数fun=inline(&#

9、39;x(1)*t.A2+x(2)*t+x(3)','x','t');x=lsqcurvefit(fun,0,0,0,t,y)%Curve Fitting Toolboxfit1= fit(t,y,'poly2')%Curve Fitting Toolbox(自定义多项式)mymodel = fittype('a*tA2+b*t+c','independent','t');%mymodel = fittype('a*xA2+b*x+c');fit1= fit(t,y,mymo

10、del,'start',0,0,0)%指数形式的拟合X = ones(size(t) exp(-t) t.*exp(-t);a = Xy精品资料%lsqcurvefit 函数fun=inline('x+x(2)*exp(-t)+x(3).*t.*exp(-t)','x','t');x=lsqcurvefit(fun,0,0,0,t,y)%Curve Fitting Toolboxmymodel = fittype('a+b*exp(-t)+c*t*exp(-t)','independent',

11、9;t');%mymodel = fittype('a+b*exp(-x)+c*x*exp(-x)');fit1= fit(t,y,mymodel,'start',0,0,0)%不含常数项的多项式拟合%利用左除X = tt.A2;a = Xy%regress 函数X = t t.A2;b=regress(y,X)%lsqcurvefit 函数fun=inline('x(1)*t.A2+x(2)*t','x','t');x=lsqcurvefit(fun,0,0,t,y)%Curve Fitting Tool

12、boxmymodel = fittype('a*tA2+b*t','independent','t');%mymodel = fittype('a*xA2+b*x');fit1= fit(t,y,mymodel,'start',0,0)MATLAB软件提供了基本的曲线拟合函数的命令.多项式函数拟合:a=polyfit(xdata,ydata,n)其中n表示多项式的最高阶数,xdata ,ydata为将要拟合的数据,它是用数组的方式输入.输出参数a为拟合多项式y=a1xn+anx+an+1 的系数多项式在x处的值y可

13、用下面程序计算.y=polyval(a,x,m)线性:m=1,二次:m=2,polyfit的输出是一个多项式系数的行向量。为了计算在xi数据点的多项式值,调用MATLAB的函数polyval。例:x=0:0.1:1;y=-0.447 1.978 3.28 6.16 7.087.34 7.66 9.56 9.48 9.30 11.2;A=polyfit(x,y,2)Z=polyval(A,x);Plot(x,y, 'r*',x,z, 'b')一般的曲线拟合:p=curvefit( Fun ',p0,xdata,ydata)其中Fun表示函数Fun(p,da

14、ta)的M函数文件,p0表示函数白初值.curvefit()命令的求解问题形式是最小二乘解若要求解点x处的函数值可用程序f=Fun(p,x)计算.2、函数插值一维插值:interp1(x,y,cx, 'method ')一维插值:interp1(x,y,z,cx,cy, 'method ')method:nearest 、linear、spline、cubic例:clearecho onx=-2:0.4:2;y=2.8 2.96 2.54 3.44 3.565.46.0 8.7 10.1 13.314.0;t=-2:0.01:2;nst=interp1(x,y,

15、t,'nearest');plot(x,y,'r*',t,nst)title('最临近点插值')lnr=interp1(x,y,t,'linear');figure(2)plot(x,y,'r*',t,lnr,'b:')title('线性由由值')spl=interp1(x,y,t,'spline');figure(3)plot(x,y,'r*',t,spl)title('样条插值')cbc=interp1(x,y,t,'cub

16、ic');figure(4)plot(x,y,'r*',t,cbc,'k-')title('三次插值')3二维插值二维插值是基于与一维插值同样的基本思想。然而,正如名字所隐含的,二维插值是对两变量的函数z=f(x,y)进行插值。interp2的基本形式是interp2(x,y, z, xi, yi,method)。这里x和y是两个独立变量,z是一个应变量矩阵。x和y对z的关系是 z(i, :) = f(x, y(i)和 z(:, j) =f(x(j), y).也就是,当x变化时,z的第i行与y的第i个元素y(i)相关,当y变化时,z的第j

17、列与x 的第j个元素x(j)相关,°xi是沿x-轴插值的一个数值数组;yi是沿y-轴插值的一个数值数组。可选的参数 method 可以是linear' , 'cubic'或'nearest'。在这种情况下,cubic不意味着3次 样条,而是使用3次多项式的另一种算法。linear方法是线性插值,仅用作连接图上数据点。nearest方法只选择最接近各估计点的粗略数据点。在所有的情况下,假定独立变量x和y是线性间隔和单调的。已知观察数据如下表所示,按下属方案求最小二乘拟合函数,并求出偏差平方和,比较拟合曲线的优劣。x:0 0.2 0.6 1.0 1

18、.3 1.6 1.7 1.8 1.9 2.2 2.3 2.5 2.6y:0 -2.5 -4.0 -5.7 -3.5 -2.0 -1.0 2.0 3.5 4.0 7.0 7.5 9.9x:2.9 3.1 3.4 3.8 4.1 4.4 4.7 4.8 4.9 5.0 5.1 5.3y:10.9 11.9 13.5 13.0 11.9 9.0 6.5 4.0 1.5 0.0 -2.5 -5.0%用离散正交多项式求三次拟合多项式% x,y-表示原始数据的节点坐标% w-表不权重系数% N-表示要拟合的离散正交多项式的最高次数% polyapproximate()-是自定义函数,可以求解多项式的系数%

19、其返回值c为多项式系数,error为偏差平方和x=0 0.2 0.6 1.0 1.3 1.6 1.7 1.8 1.9 2.2 2.3 2.5 2.6 2.9 3.1 3.4 3.8 4.1 4.4 4.7 4.8 4.9 5.05.1 5.3;nn=length(x);for i=1:nnw(i)=1;endy=0 -2.5 -4.0 -5.7 -3.5 -2.0 -1.0 2.0 3.5 4.0 7.0 7.5 9.9 10.9 11.9 13.5 13.0 11.9 9.0 6.5 4.01.5 0.0 -2.5 -5.0;N=3;%此处可取3 or 4.c,error=polyappro

20、ximate(x,y,w,N)t=0:0.1:5.3;u=polyval(c,t);plot(t,u,x,y,'+')%自定义函数polyapproximate (),用来做离散正交多项式拟合%此函数的作用是做不同次数的离散正交多项式的拟合% X, Y为原始数据的坐标值矩阵% w为权重系数% N为离散正交多项式的最高次数function C,E=polyapproximate(X,Y,w,N)M=length(X);for i=1:N+1for j=1:iif j=iP(i,j)=0;elseP(i,j)=1;endendendS=0;d(1)=0;for i=1:Md(1)=

21、d(1)+w(i);S=S+w(i)*X(i);endAF(1)=S/d(1);P(2,1)=-AF(1);for i=1:MPX(i,1)=1;PX(i,2)=X(i)-AF(1);endBA(1)=0;for k=2:N+1S=0;dd=0;for i=1:MS=S+w(i)*X(i)*PX(i,k)*PX(i,k);dd=dd+w(i)*PX(i,k)*PX(i,k);endd(k)=dd;AF(k尸S/d(k);BA(k-1)=d(k)/d(k-1);P(k+1,1)=-AF(k-1)*P(k,1)-BA(k-1)*P(k-1,1);for i=1:k-1j=k-i+1;if j>

22、;=kt=0;elset=P(k-1,j);endP(k+1,j尸P(k,j-1)-AF(k-1)*P(k,j)-BA(k-1)*t;endfor i=1:MPX(i,k+1)=PX(i,k)*(X(i)-AF(k-1)-BA(k-1)*PX(i,k-1);endendd(N+1)=0;for i=1:Md(N+1)=d(N+1)+w(i)*PX(i,N+1)*PX(i,N+1);endfor i=1:N+1FM=0;for k=1:MFM=FM+w(k)*Y(k)*PX(k,i);endgp(i尸FM/d(i);endfor i=1:N+1C(i)=0;for j=i:N+1C(i)=C(i

23、)+gp(j)*P(j,i);endendC=flipud(C');%C=C'U=0;for i=1:MU=U+w(i)*Y(i)*Y(i);endV=0;for k=1:N+1V=V+gp(k)*gp(k)*d(k);endE=U-V;拟合预测拟合预测是建立一个模型去逼近实际数据序列的过程,适用于发展性的体系。建立模型时,通常都要指定一个有明确意义的时间原点和时间单位。而且,当t趋向于无穷大时,模型应当仍然有意义。将拟合预测单独作为一类体系研究,其意义在于强调其唯象”性。一个预测模型的建立,要尽可能符合实际体系,这是拟合的原则。拟合的程度可以用最小二乘方、最大拟然性、最小绝对偏差来衡量

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论