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

下载本文档

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

文档简介

1、 MATLAB 中曲线拟合方法总结鉴于最近遇到非线性函数拟合问题,本人对网上有关 matlab 多种类型的线 性、非线性曲线拟合的方法进行了总结,希望对各位朋友有所帮助。1. Matlab有一个功能强大的曲线拟合工具箱 cftool , 使用方便, 能实现多种类型的线性、 非线性曲线拟合。 下面简单介绍如何使用这个工具箱。1.1 从 matlab 命令窗口到 cftool可以直接在 matlab 命令行输入 cftool 命令即可进入 cftool 窗口。 cftool输入命令回车后就得到一下界面进行曲线拟合的时候,最基本的操作包括点击“data.”按钮和“fitting.”按钮。1.2 da

2、ta . 按钮首先,到命令窗口中为点击 "data." 做好准备:x=8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20; y=0.6,0.62,0.64, 0.65, 0.66, 0.67, 0.68, 0.68, 0.69, 0.66, 0.65, 0.65,0.64; 然后,点击“data.”按钮,选 x 横坐标和选 y 纵坐标变量:1在弹出的 Data 窗口中,在 X Data 选项中选择 x, 在 Y Data中选择 y 。其中 X, Y 都是刚刚在命令行 所准备的数据变

3、量名。2经过此步骤后点击“Create data set”按钮。这个时候 Data 对话框背后的对话框中已经有散点图 了。然后点击 Data 中的 close 按钮 .1.3 fiting . 按钮在正确设置 Data 对话框之后,在关闭 Data 对话框之后,就可以点击 fitting. 按钮了。会弹出这么 一个对话框 :1 在 Fitting 对话框中点击 Newfit 后在 Fitname 为此次曲线取名字:“cftool 曲线拟合”, 当有多条曲 线需要同时绘制时,每次都需要点击 Newfit, 然后选择对应的 Data set值即对应相应的数据变量就可以绘 制多条曲线了。即同时拟合多

4、条曲线。选择 data set。2选择相应类型的曲线拟合(到其它地方粘贴过来的,点击 Type of fit 下拉菜单:Custom Equations:用户自定义的函数类型· Exponential:指数逼近,有 2种类型, a*exp(b*x 、 a*exp(b*x + c*exp(d*x· Fourier:傅立叶逼近,有 7种类型,基础型是 a0 + a1*cos(x*w + b1*sin(x*w· Gaussian:高斯逼近,有 8种类型,基础型是 a1*exp(c1-(x-b1/c12· Interpolant:插值逼近,有 4种类型, lin

5、ear 、 nearest neighbor 、 cubic spline 、 shape-preserving · Polynomial:多形式逼近,有 9种类型, linear 、 quadratic 、 cubic 、 4-9th degree · Power:幂逼近,有 2种类型, a*xb 、 a*xb + c· Rational:有理数逼近,分子、分母共有的类型是 linear 、 quadratic 、 cubic 、 4-5th degree ; 此外,分子还包括 constant 型· Smoothing Spline:平滑逼近(翻译的

6、不大恰当,不好意思· Sum of Sin Functions:正弦曲线逼近,有 8种类型,基础型是 a1*sin(b1*x + c1· Weibull:只有一种, a*b*x(b-1*exp(-a*xb3最后再选择一种曲线拟合下的具体类型,点击 Apply 按钮就可以看见所拟合的曲线了。如果发现曲线和数据点不是很“磨合”就需要重新选择曲线类 型了。 上图是点击了应用按钮之后的状态,在 Results 中得来的就是拟合数据的曲线函数关系式。点击 Appy 后的运行结果为:1.4 CFTOOL 菜单使用在上面显示的曲线拟合结果中, 可以明显的看见横坐标和纵坐标都不是从原点 (

7、0,0 开始设置的坐标。 那么我们可以使用Curve Fitting Tool 对话框中 Tools 菜单中的Tools 中的各个选项的功能:1 New Cunstom Equation:表示使用自定义的函数来模拟图中显示的散点数据的函数式子。2 Legend:就是图中显示着“y vs.x cftool 曲线拟合”的那个框。3 Grid :跟指令 grid 一样的功能,是曲线背景充满虚线框。4 Axis Limit Control:设置横轴、纵轴坐标的范围。2. matlab中直接使用曲线拟合工具:cftool. (不使用 cftool 的 GUI 界面最基本的使用方法如下,假设我们需要拟合的

8、点集存放在两个向量 X 和 Y 中,分别储存着各离散点的 横坐标和纵坐标,则在 MATLAB 中直接键入命令 cftool(X,Y 就会弹出 Curve Fitting Tool的 GUI 界面, 点击界面上的 fitting 即可开始曲线拟合。MATLAB 提供了各种曲线拟合方法,例如:Exponential, Fourier, Gaussing, Interpolant, Polynomial, Power, Rational, Smoothing Spline, Sum of Functions, Weibull 等, 当然, 也可以使用 Custom Equations. cftool

9、 不仅可以绘制拟合后的曲线、给出拟合参数,还能给出拟合好坏的评价参数 (Goodness of fit如 SSE, R-square, RMSE等数据,非常好用。但是如果我们已经确定了拟合的方法,只需要对数据进行计算, 那么这种 GUI 的操作方式就不太适合了,比如在 m 文件中就不方便直接调用 cftool 。MATLAB 已经给出了解决办法,可以在 cftool 中根据情况生成特定的 m 文件,让我们直接进行特定的曲线 拟合并给出参数。 具体方法在帮助文件的如下文档中 " Curve Fitting Toolbox Generating M-files From Curve Fi

10、tting Tool " ,以下简单举例说明(x1,y1为一曲线散点x1=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0;y1=0,5.98e-09,0.00000528,0.0003,0.0041,0.0235,0.071,0.1548,0.2597,0.3724;cftool(X,Y;点击 Fitting 选择一元高斯分布拟合 (gaussian,然后就会出现如下拟合图形: 然后在 Curve Fitting Tool窗口中点击 " File Generate M-file " 即可生成能直接曲线拟合的 m 函数文件,其中使用的

11、拟合方法就是刚才使用的一元高斯分布拟合,文件中这条语句证明了这一点: ft_ = fittype('gauss1'保存该 m 文件(默认叫做 createFit.m ,调用方法和通常的 m 文件一样,使用不同的 X 和 Y 值就能拟合 出不同的曲线。但是,这种调用方法只能看到一个拟合出的图形窗口,拟合参数以及 Goodness of fit参 数都看不到了,因此需要在刚才的 m 文件中稍作修改。找到这句话:cf_ = fit(X(ok_,Y(ok_,ft_;修改为:cf_,gof = fit(X(ok_,Y(ok_,ft_;然后将函数声明 function createFit(

12、X,Y 修改为 function cf_,gof = createFit(X,Y ,这样我们 再调用试试看:x1=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0;y1=0,5.98e-09,0.00000528,0.0003,0.0041,0.0235,0.071,0.1548,0.2597,0.3724;c,g=createFit(x1,y1;这样就会弹出拟合图形的窗口,然后再键入 c 和 g ,就能查看一元高斯拟合参数及拟合评价参数。c 和 g 分别是 1×1 cfit 数据类型和 1×1 struct 数据类型。本例中 c 包括 p1,

13、 p2, p3, p4四个成员, 即一元高斯拟合的参数; g 包括 rmse 等成员,即拟合评价参数。3. 线性回归3.1一元线性回归3.1.1 命令 polyfit最小二乘多项式拟合p, S=polyfit(x , y , m 多项式 y=a1xm+a2xm-1+ +amx+am+1其中 x=(x1, x2, xm x1xm 为(n*1的矩阵 ;y 为(n*1的矩阵;p=(a1, a2, am+1是多项式 y=a1xm+a2xm-1+ +amx+am+1的系数;S 是一个矩阵,用来估计预测误差 .3.1.2 命令 polyval多项式函数的预测值Y=polyval(p , x 求 polyf

14、it 所得的回归多项式在 x 处的预测值 Y ;p 是 polyfit 函数的返回值;x 和 polyfit 函数的 x 值相同。3.1.3 命令 polyconf 残差个案次序图Y, DELTA=polyconf(p , x , S , alpha 求 polyfit 所得的回归多项式在 x 处的预测值 Y 及预测值的显著 性为 1-alpha 的置信区间 DELTA ; alpha 缺省时为 0.05。p 是 polyfit 函数的返回值;x 和 polyfit 函数的 x 值相同;S 和 polyfit 函数的 S 值相同。3.1.4命令 polytool(x , y , m 一元多项式

15、回归命令3.1.5 命令 regress 多元线性回归(可用于一元线性回归b=regress( Y, X b, bint,r,rint,stats=regress(Y,X,alphab 回归系数bint 回归系数的区间估计r 残差rint 残差置信区间stats 用于检验回归模型的统计量, 有三个数值:相关系数 R 2、 F 值、 与 F 对应的概率 p, 相关系数 R 2越接 近 1,说明回归方程越显著; F > F1-(k , n-k-1时拒绝 H 0, F 越大,说明回归方程越显著;与 F 对应 的概率 p 时拒绝 H 0,回归模型成立。Y 为 n*1的矩阵;X 为(ones(n,

16、1,x1,xm的矩阵;alpha 显著性水平(缺省时为 0.05。3.2. 多元线性回归3.2.1 命令 regress(见 2.53.2.2命令 rstool 多元二项式回归命令:rstool (x , y , model , alphax 为 n*m矩阵y 为 n 维列向量model 由下列 4个模型中选择 1个(用字符串输入,缺省时为线性模型:linear (线性:purequadratic (纯二次:interaction (交叉:quadratic (完全二次:alpha 显著性水平(缺省时为 0.05返回值 beta 系数返回值 rmse 剩余标准差返回值 residuals 残差

17、4. 非线性拟合MATLAB 具有多种拟合函数,包括最小二乘法、牛顿法、最速下降法、共轭梯度法、单纯形法等。在此 选取 8 个 (lsqcurvefit 、 nlinfit 、 lsqnonlin 、 fminsearch 、 fminunc 、 fgoalattain 、 curvefit 、 nlintool MATLAB 函数进行介绍。4.1 lsqcurvefit 函数拟合函数 lsqcurvefit 是 MATLAB 最优化工具箱里的一个非线性拟合函数,采用最小二乘曲线进行拟合 .格式 :lsqcurvefit (f,a,x,yf:符号函数句柄 , 如果是以 m 文件的形式调用的时候

18、 , 别忘记加 (用 函数文件名表示, 或由 inline(函数表 示 . 这里需要注意 ,f 函数的返回值是和 y 匹对的 , 即拟合参数的标准是 (f-y2取最小值 , 具体看下面的例子 a:最开始预估的值 (预拟合的未知参数的估计值 。如上面的问题如果我们预估 A 为 1,B 为 2, 则 a=1 2 x:我们已经获知的 x 的值y:我们已经获知的 x 对应的 y 的值例子 1:一元的情况问题 :对于函数 y=a*sin(x*exp(x-b/log(x我们现在已经有多组 (x,y的数据 , 我们要求最佳的 a,b 值 %针对上面的问题 , 我们可以来演示下如何使用这个函数以及看下其效果&

19、gt;> x=2:10;>> y=8*sin (x.*exp (x-12./log (x;%上面假如是我们事先获得的值>> a=1 2;>> f=(a,xa(1*sin (x.*exp (x-a(2./log (x;%第一种方法使用 lsqcurvefit>> lsqcurvefit (f,a,x,yans =7.999999999999987 11.999999999988997%和我们预期的值 8和 12结合得非常好>>例子 2:多元的情况问题 :我们已知 z=a*(exp(y+1-sin(x*b且有多组 (x,y,z的值

20、, 现在求最佳系数 a,b>> x=2:10;>> y=10*sin (x./log (x;>> z=4.5*(exp (y+1-sin (x*13.8;>> f=(a,xa(1*(exp (x(2,:+1-sin (x(1,:*a(2;>> lsqcurvefit (f,1 2,x;y,z%注意这里面的 x;y,这里的 1 2表示我们设置 f 函数里的初始值 a(1=1,a(2=2ans =4.499999999999999 13.800000000000024ans =8.000000000000000 11.9999999999

21、99998>>%*%另一种方法 , 假如我们写了一个如下的 m 文件function f=test (a,xf=a(1*sin (x.*exp (x-a(2./log (x;end%则在上面 lsqcurvefit 函数调用如下 , 不要忘记那个 lsqcurvefit (test,a,x,y4.2 nlinfit(x,y,f,a函数 nlinfit 采用高斯 -牛顿法对方程进行非线性最小二乘数据回归例子 1:一元的情况>> x=2:10;>> y=8*sin (x.*exp (x-12./log (x;%上面假如是我们事先获得的值>> a=1

22、2;>> f=(a,xa(1*sin (x.*exp (x-a(2./log (x;%第一种方法使用 lsqcurvefit>> nlinfit (x,y,f,aans =8.000000000000000 11.999999999999998>>例子 2:多元的情况问题 :我们已知 z=a*(exp(y+1-sin(x*b且有多组 (x,y,z的值 , 现在求最佳系数 a,b>> x=2:10;>> y=10*sin (x./log (x;>> z=4.5*(exp (y+1-sin (x*13.8;>> f

23、=(a,xa(1*(exp (x(2,:+1-sin (x(1,:*a(2;>> nlinfit (x;y,z,f,1 2ans =4.500000000000000 13.799999999999956>>%*%另一种方法 , 假如我们写了一个如下的 m 文件function f=test (a,xf=a(1*sin (x.*exp (x-a(2./log (x;end%则在上面 nlinfit 函数调用如下 , 不要忘记那个 nlinfit (x,y,test ,a例子 3:(正态分布函数 问题:对于正态分布函数 normcdf(x, , 我们现在已经有三组 (x,

24、y的 数据 , 我们要求最佳的 , 值>> f = (b,x normcdf (x,b(1,b(2;>> x = 16 18 20'>> y = 95.7% 96.5% 96.6%'>> p = nlinfit(x,y,f,0 20'注意:这里初始值 0 20非常重要 (预拟合的 , 的估计值 , 如果选择不当会得到一个无效的结果。 本题的运算结果如下:p =-44.91444144750312335.256506107463366也就是说该数据符合 = -44.914441447503123, = 35.25650610

25、7463366的 正态分布 。下面验证一下, 发现 拟合 得很不错:>> normcdf (x,p(1,p(2ans =0.9579835055718150.9628269451523140.9672042097041964.3 lsqnonlin 函数拟合函数 lsqnonlin 也是运用最小二乘法进行拟合,步骤如下:首先,建立 f.m 文件:function val=f(p,xdata,ydataerr=p(1+(p(2-p(1./(1+(p(3.*xdata.p(4.(1.-1./p(4-ydata;% xdata, ydata 为输入初始数据; p( 为曲线参数val=er

26、r*err'% val 为方差之后,输入初始数据,再代入 lsqnonlin 拟合函数拟合:% 创建优化选项结构options=optimset( 'largescale','off'Parameters=lsqnonlin(f,a,options,xdata,ydata4.4 fminsearch /fminunc函数拟合函数 fminsearch 是用单纯形法寻优,步骤如下。首先,建立 f.m 文件:function val= f(p,xdata,ydata %定义 val 函数global xdata ydata %定义全局变量err=p(1+(p

27、(2-p(1./(1+(p(3.*xdata.p(4.(1.-1./p(4-ydata;% xdata, ydata 为输入初始数据; p( 为曲线参数,在 Command Window 输入初始数据:%设定迭代初始值 a ,输入初始数据后,代入 fminsearch 拟合函数拟合:Parameters =fminsearch(f,aParameters =fminunc(f,a4.5 fminunc 函数拟合函数 fminunc 也是非线性规划函数的一种,步骤如下。首先,建立 f.m 文件,再代入 fminunc 拟合函数拟合:Parameters= fminunc ('f'

28、,a4.6 fgoalattain 函数拟合函数 fgoalattain 属于多目标规划函数,应用过程如下。首先,建立 f.m 文件,再代入 fgoalattain 拟合函数拟合:Parameters = fgoalattain ('fun', a,0, 04.7 curvefit 函数拟合函数 curvefit 是数学建模工具箱中的一个非线性函数拟合工具,应用过程如下。首先,建立 f.m 文件并输入初始数据,再代入curvefit 拟合函数拟合,内容如下:Parameters = curvefit ( 'f', a, xdata,ydata4.8 nlintool 函数拟合函数 nlintool 是进行数据非线性方程回归的用户交互图形显示函数,应用过程如下。首先,建立 f.m 文件并输入初始数据,再代入 curvefit 拟合函数拟合:nlintool ( xdata , ydata , 'f' , a 此时, 出现非线性方程回归交互图, 点击 “Export”按钮,将生成曲线拟合参数。如要显示拟 合参数,可直接输入命令:%显示拟合参数beta* 4.1 4.8 中均需要 预拟合的未知参数的估计值,属于局部优化。4.9 用遗传算法拟合 (全局优化 >> x=2:10

温馨提示

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

评论

0/150

提交评论