资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
MATLAB 插值与拟合1 曲线拟合1. 1. 多项式曲线拟合函数:polyfit( )调用格式: p=polyfit(x,y,n)p,s= polyfit(x,y,n)说明:x,y 为数据点,n 为多项式阶数,返回 p 为幂次从高到低的多项式系数向量 p。矩阵 s 用于生成预测值的误差估计。(见下一函数 polyval)例:由离散数据x 0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1y .3 .5 1 1.4 1.6 1.9 .6 .4 .8 1.5 2拟合出多项式。程序:x=0:.1:1;y=.3 .5 1 1.4 1.6 1.9 .6 .4 .8 1.5 2n=3;p=polyfit(x,y,n)xi=linspace(0,1,100);z=polyval(p,xi); %多项式求值plot(x,y,o,xi,z,k:,x,y,b)legend(原始数据,3 阶曲线)结果:p =16.7832 -25.7459 10.9802 -0.0035多项式为:16.7832x 3-25.7459x2+10.9802x-0.0035曲线拟合图形:也可由函数给出数据。例 3:x=1:20,y=x+3*sin(x)程序:x=1:20;y=x+3*sin(x);p=polyfit(x,y,6)xi=1inspace(1,20,100);z=poyval(p,xi); %多项式求值函数plot(x,y,o,xi,z,k:,x,y,b)legend(原始数据,6 阶曲线)结果:p =0.0000 -0.0021 0.0505 -0.5971 3.6472 -9.7295 11.3304再用 10 阶多项式拟合程序:x=1:20;y=x+3*sin(x);p=polyfit(x,y,10)xi=linspace(1,20,100);z=polyval(p,xi);plot(x,y,o,xi,z,k:,x,y,b)legend(原始数据 ,10 阶多项式)结果:p =Columns 1 through 7 0.0000 -0.0000 0.0004 -0.0114 0.1814 -1.8065 11.2360Columns 8 through 11 -42.0861 88.5907 -92.8155 40.2671可用不同阶的多项式来拟合数据,但也不是阶数越高拟合的越好。1、2 多项式曲线求值函数:polyval( )调用格式: y=polyval(p,x)说明:y=polyval(p,x)为返回对应自变量 x 在给定系数 P 的多项式的值。1、3 向自定义函数拟合对于给定的数据,根据经验拟合为带有待定常数的自定义函数。所用函数:nlinfit( )调用格式: beta,r,J=nlinfit(X,y,fun,betao)说明:beta 返回函数fun中的待定常数;r 表示残差;J 表示雅可比矩阵。X,y 为数据;fun自定义函数;beta0 待定常数初值。例:在化工生产中获得的氯气的级分 y 随生产时间 x 下降,假定在 x8 时,y 与 x 之间有如下形式的非线性模型: )8(49.0(xbeay现收集了 44 组数据,利用该数据通过拟合确定非线性模型中的待定常数。x y x y x y8 0.49 16 0.43 28 0.418 0.49 18 0.46 28 0.4010 0.48 18 0.45 30 0.4010 0.47 20 0.42 30 0.4010 0.48 20 0.42 30 0.3810 0.47 20 0.43 32 0.4112 0.46 20 0.41 32 0.4012 0.46 22 0.41 34 0.4012 0.45 22 0.40 36 0.4112 0.43 24 0.42 36 0.3614 0.45 24 0.40 38 0.4014 0.43 24 0.40 38 0.4014 0.43 26 0.41 40 0.3616 0.44 26 0.40 42 0.3916 0.43 26 0.41首先定义非线性函数的 m 文件:model.mfunction yy=model(beta0,x)a=beta0(1);b=beta0(2);yy=a+(0.49-a)*exp(-b*(x-8);程序:x=8.00 8.00 10.00 10.00 10.00 10.00 12.00 12.00 12.00 14.00 14.00 14.00. 16.00 16.00 16.00 18.00 18.00 20.00 20.00 20.00 20.00 22.00 22.00 24.00. 24.00 24.00 26.00 26.00 26.00 28.00 28.00 30.00 30.00 30.00 32.00 32.00. 34.00 36.00 36.00 38.00 38.00 40.00 42.00;y=0.49 0.49 0.48 0.47 0.48 0.47 0.46 0.46 0.45 0.43 0.45 0.43 0.43 0.44 0.43. 0.43 0.46 0.42 0.42 0.43 0.41 0.41 0.40 0.42 0.40 0.40 0.41 0.40 0.41 0.41.0.40 0.40 0.40 0.38 0.41 0.40 0.40 0.41 0.38 0.40 0.40 0.39 0.39;beta0=0.30 0.02;betafit = nlinfit(x,y,model,beta0)结果:betafit =0.38960.1011即:a=0.3896 ,b=0.1011 拟合函数为: )8(10.)396.4.0(3896. xey1.4 曲线拟合工具箱curve fitting tollbox曲线拟合工具箱 book.iLoveMatlab.cn MATLAB 有一个功能强大的曲线拟合工具箱 cftool ,使用方便,能实现多种类型的线性、非线性曲线拟合。下面结合我使用的 Matlab R2007b 来简单介绍如何使用这个工具箱。 假设我们要拟合的函数形式是 y=A*x*x + B*x, 且 A0,B0 。 1、在命令行输入数据: x=110.3323 148.7328 178.064 202.8258033 224.7105 244.5711 262.908 280.0447 296.204 311.5475; y=5 10 15 20 25 30 35 40 45 50; 2、启动曲线拟合工具箱 cftool 3、进入曲线拟合工具箱界面“Curve Fitting tool” (1)点击“Data”按钮,弹出“Data”窗口; (2)利用 X data 和 Y data 的下拉菜单读入数据 x,y,可修改数据集名“Data set name”,然后点击“Create data set”按钮,退出“Data”窗口,返回工具箱界面,这时会自动画出数据集的曲线图; book.iLoveMatlab.cn (3)点击“Fitting”按钮,弹出“Fitting”窗口; (4)点击“New fit”按钮,可修改拟合项目名称“Fit name”,通过“Data set”下拉菜单选择数据集,然后通过下拉菜单“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(-(x-b1)/c1)2) Interpolant:插值逼近,有 4 种类型,linear、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:平滑逼近(翻译的不大恰当,不好意思) Sum of Sin Functions:正弦曲线逼近,有 8 种类型,基础型是 a1*sin(b1*x + c1) Weibull:只有一种,a*b*x(b-1)*exp(-a*xb) 选择好所需的拟合曲线类型及其子类型,并进行相关设置: 如果是非自定义的类型,根据实际需要点击“Fit options”按钮,设置拟合算法、修改待估计参数的上下限等参数; 如果选 Custom Equations,点击“New”按钮,弹出自定义函数等式窗口,有“Linear Equations 线性等式”和“General Equations 构造等式”两种标签。 在本例中选 Custom Equations,点击“New”按钮,选择“General Equations”标签,输入函数类型 y=a*x*x + b*x,设置参数 a、b 的上下限,然后点击 OK。 (5)类型设置完成后,点击“Apply”按钮,就可以在 Results 框中得到拟合结果,如下例:general model: f(x) = a*x*x+b*x Coefficients (with 95% confidence bounds): a = 0.009194 (0.009019, 0.00937) b = 1.78e-011 (fixed at bound) Goodness of fit: SSE: 6.146 R-square: 0.997 Adjusted R-square: 0.997 RMSE: 0.8263 同时,也会在工具箱窗口中显示拟合曲线。 这样,就完成一次曲线拟合啦,十分方便快捷。当然,如果你觉得拟合效果不好,还可以在“Fitting”窗口点击“New fit”按钮,按照步骤(4)(5)进行一次新的拟合。不过,需要注意的是,cftool 工具箱只能进行单个变量的曲线拟合,即待拟合的公式中,变量只能有一个。对于混合型的曲线,例如 y = a*x + b/x ,工具箱的拟合效果并不好 2 插值问题在应用领域中,由有限个已知数据点,构造一个解析表达式,由此计算数据点之间的函数值,称之为插值。实例:海底探测问题某公司用声纳对海底进行测试,在 55 海里的坐标点上测得海底深度的值,希望通过这些有限的数据了解更多处的海底情况。并绘出较细致的海底曲面图。2、1 一元插值一元插值是对一元数据点(x i,yi)进行插值。线性插值:由已知数据点连成一条折线,认为相临两个数据点之间的函数值就在这两点之间的连线上。一般来说,数据点数越多,线性插值就越精确。调用格式:yi=interp1(x,y,xi,linear) %线性插值zi=interp1(x,y,xi,spline) %三次样条插值wi=interp1(x,y,xi,cubic) %三次多项式插值说明:yi、zi、 wi 为对应 xi 的不同
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号