logo资料库

MATLAB在非线性曲线拟合中的应用研究.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
200 8 年 2 月 电 脑 学 习 第 1 期 MATLAB 在非线性曲线拟合中的应用研究 唐家德* 摘 要 : 归 纳 总 结 了 非 线 性 曲 线 拟 合 的 方 法 、求 解 步 骤 和 上 机 操 作 过 程 。 关 中图分类号: TP311.131 键 词 : 曲线拟合 非线性 MATLAB 文献标识码: B 文章编号: 1002- 2422( 2008) 01- 0057- 03 Resear ch on Application of MATLAB in Nonlinear Cur ve Fitting Tang J iade Abstr act: The paper summarizes the method、solution steps and operations in nonlinear curve fitting. Keywor d: Curve Fitting Nonlinear MATLAB 1 曲线拟合的基本原理 已知一组测定的数据(例如 N 个点(xi,yi)去求得自变 量 x 和因变量 y 的一个近似解析表达式 y=φ(x)。若记误 差 δi=φ(xi)- yi,i=1,2,…N,则要使误差的平方和最小, 即要求: N Q= i = 1!δ2 i (1) 为最小,这就是常用的最小二乘法原理。 2 MATLAB 曲线拟合的相关方法 2.1 函数形式: (1)多项式拟合函数 polyfit,调用格式为: p=polyfit(x,y,n) 其中 x,y 为参与曲线拟合的实验数据,n 为拟合多项 式的次数,函数返回值为拟合多项式的系数 (按降幂排 列)。n=1 时,就为线性拟合。 例 1: 给出表 1 数据,试用最小二乘法求一次和二次 拟合多项式。 表 1 x - 1.00 y - 0.2209 - 0.75 0.3295 - 0.50 0.8826 - 0.25 1.4392 0 2.0003 0.25 2.5645 0.50 3.1334 0.75 3.7061 1.00 4.2836 在 MATLAB 命令窗口中输入: clear;close= x=- 1:0.25:1= y =[- 0.2209,0.3295,0.8826,1.4392,2.0003,2.5645,3.1334,3.7061,4. 2836]= p1=polyfit(x,y,1) p1 = p2=polyfit(x,y,2) p2 = y1=polyval(p1,x)= y2=polyval(p2,x)= plot(x,y,' +' ,x,y1,'r:' ,x,y2,'k- .' ) 0.0313 2.0001 2.2516 2.0131 2.2516 拟合多项式为:yP=2.0516+2.0131 和 yP=0.0313x2+2.2516x+ 2.20001。 (2)非线性数据拟合函数 lsqcurvefit 调用格式为: c=lsqcurvefit('fun' ,x0,xdata,ydata) 其中 'fun' 为拟合函数的 M- 函数文件名,x0 为初始向 量,xdata,ydata 为参与曲线拟合的实验数据。函数返回值 c 为非线性函数 fun 的拟合系数。 例 2:2004 年全国大学生数学建模竞赛 C 题(酒后驾 车)中给出某人在短时间内喝下两瓶啤酒后,间隔一定的 时间 测量他的血液中酒精含量 y(毫克/百毫升),得到数 据如表 2。 表 2 酒精含量与饮酒时间的实验数据 时间( 小时) 0.25 酒精含量 时间( 小时) 酒精含量 30 6 38 0.5 68 7 35 0.75 75 8 28 1 82 9 25 1.5 82 10 18 2 77 11 15 2.5 68 12 12 3 68 13 10 3.5 58 14 7 4 51 15 7 4.5 50 16 4 5 41 通过建立微分方程模型得到短时间内喝酒后血液中 酒精浓度与时间的关系为: y=c1(e- c (2) 根据实验数据,利用非线性拟合函数 lsqcurvefit,确定 ) 2 3 t t- e- c 模型(2)式中的参数 c1,c2,c3。求解过程为: 先编写一个 M- 函数文件 Example2_1 function f=Example2_1(c,tdata) f=c(1)P(exp(- c(2)Ptdata)- exp(- c(3)Ptdata))= 保存后,在命令窗口中输入: tdata=[0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 10 11 12 13 14 15 16]= ydata=[30 68 75 82 82 77 68 68 58 51 50 41 38 35 28 25 18 15 12 10 7 7 4]= c0=[1 1 1]= for i=1:50 c=lsqcurvefit('Example2_1' ,c0,tdata,ydata)= 收稿日期:2007- 05- 04 * 唐家德 楚雄师范学院数学系讲师(云南,楚雄 675000),从事应用数学的教学和研究工作。 · 57 ·
c0=c$ end 得到最优解为:c = 114.2587 0.1852 2.0124 从而得出拟合曲线: cftool 的用法。 例 3 某生化系学生为研究嘌呤霉素在某项酶促反应 中对反应速度与底物浓度之间关系的影响,设计了一个实 验,所得的实验数据见表 3。根据问题的背景和数据建立一 y4=114.2587(e- 0.1852t- e- 2.0124t) (3) 个合适的数学模型,来反映这项酶促反应的速度与底物浓 2.2 图形窗口形式 (1)利用多项式拟合的交互图命令(GUI)polytool,调 用格式为:polytool(x,y) 其中 x,y 分别为实验数据构成的向量,例如利用 poly- tool 求解例 1 的 MATLAB 命令如下: x=- 1:0.25:1J y =[- 0.2209,0.3295,0.8826,1.4392,2.0003,2.5645,3.1334,3.7061,4. 2836]$ polytool(x,y) 打开多项式拟合的交互式界面,由于要拟合的函数为 线性函数,因此在多项式拟合交互式界面中的 Degree 中 输入 1,点击导出数据 Export, 出现保存对话框 Export to Workspace,选中 Parameters(参数),Residuals(残差)后点 击 OK,在 MATLAB 的 Workspace 窗口中可以看到参数为: 2.2516 和 2.0131,即拟合函数为 y4=2.2516x+2.0131。同样 如果拟合的函数为二次函数,则只要在 Degree 中输入 2, 其它步骤相同,可得拟合函数为: y4=0.0313x2+2.2516x+2.0001 通过查看 Residuals(残差)值,可以发现二次函数拟 合的残差值比线性函数的要小一些,从拟合的效果看,可 以选择二次函数作为拟合函数,但由于线性函数较简单, 残差值也很小,从简单出发,也可选择线性函数作为拟合 函数。 (2)基本拟合界面 MATLAB 提供了一个方便简洁的拟合界面。具有拟合 快速和操作简便的优势,只能拟合多项式。例如用基本拟 合界面求解例 1 的过程如下: clearJcloseJ x=- 1:0.25:1J y =[- 0.2209,0.3295,0.8826,1.4392,2.0003,2.5645,3.1334,3.7061,4. 2836]J plot(x,y,' +' )J 在 散 点 图 的 图 形 窗 口 上 分 别 点 击 菜 单 档 中 的 Tools Basic Fitting, 在 Plots Fits 中 分 别 选 中 linear、quadratic、 Show equations、plot residuals、show norm of residuals,所得 拟 合 直 线 方 程 为 :y4 =2.3x+2; 拟 合 二 次 多 项 式 为 :y4 =0. 031x2+2.3x+2。 (3)曲线拟合工具界面 cftool 曲线拟合工具界面 cftool 是一个可视化的图形界面, 具有强大的图形拟合功能,下面通过一个具体例子来介绍 · 58 · 度之间的关系。 表 3 嘌呤霉素实验中的反应速度与底物浓度数据 底物浓度 (ppm)x 反应速度 y 0.02 0.06 0.11 0.22 0.56 1.10 76 47 97 107 123 139 159 152 191 201 207 200 酶促反应的速度 y 与底物浓度 x 之间的关系可用下面 两个简单模型描述: Michaelis- Menten 模型:y=f(x,β)= β1x+β2 β3+x (4) 指数增长模型:y=f(x,β)=β1(1- eβ2 (5) 使用曲线拟合工具界面 cftool 来确定模型(4)和(5) x ) 中的参数,并比较模型(4)、(5)的拟合效果。 在 MATLAB 命令窗口中输入以下语句: clearJcloseJ x=[0.02 0.02 0.06 0.06 0.11 0.11 0.22 0.22 0.56 0.56 1.10 1. 10]J y=[76 47 97 107 123 139 159 152 191 201 207 200]J cftool(x,y)J 在″Curve Fitting Tool″对话框中单击″Fitting″,打开″Fit- ting″对话框,点击″New fit″,在″Fit Name:″中输入″有理函 数″,在″Type of fit″中选中″Rational″,在″Numerator″中选中″ linear polynomial″,在″Denominator″中选中″linear polynomi- al″,然后点击″Apply″,完成有理函数拟合。然后,再次点击″ New fit″,在″Fit Name:″中输入″指数函数″,在″Type of fit″ 中选中″Custom Equation″,点击″New equation″,打开用户自 定义方程对话框,点击″General Equation″,在″Equation″中 输入″y=a4(1- exp(- b4x))″,点击″Ok″后回到拟合窗口,点击″ Apply″,完成指数函数拟合,参数计算结果见表 4。 表 4 模型( 4) 、( 5) 计算结果 拟合函数 系数 RMSE(剩余标准差) R- square y=(p1sx+p2) /(x+q1) y=as(1- exp (- bsx)) p1=221.7 p2=3.318 q1=0.1047 a=192.1,b=11.38 9.419 17.44 0.9741 0.9014 通过表 4 可以看出,有理函数 (Michaelis- Menten 模 x+0.1047 拟合剩余标准差较小,R- square 较大 型)ys= 221.7x+3.318 (越接近 1 越好),故用有理函数 ys= 221.7x+3.318 据比用指数函数 ys=192.1(1- e- 11.38x)拟合的效果好。 3 结束语 x+0.1047 拟合数
200 8 年 2 月 电 脑 学 习 第 1 期 用汇编语言实现多种数制的通用输入方法 杨继鹏* 摘 要 : 把 从 键 盘 输 入 的 二 进 制 、八 进 制 、十 进 制 、十 六 进 制 字 符 数 据 转 换 成 计 算 机 能 够 识 别 的 二 进 制 数 据, 给 出 了 各种进制通用的输入、转换方法及汇编语言程序段, 通过字符串本身可以判断数制。 键 词 : 关 汇编语言 中图分类号: TP313 转换 数制 通用输入方法 文献标识码: B 文章编号: 1002- 2422( 2008) 01- 0059- 02 Realization of Gener al Input Method of Differ ences with the Assembly Language Yang J ipeng Abstr act: The paper describes how to change character data of binary system,octal system,decimal system and hexad- ecimal system from keyboard into data of binary system which computers can recognize.It tells the differe- nt general input and conversion methods,and gives out assembly language program segment.It also tells how to judge numbering system through character string itself. Assembly Language General Input Method Numbering System Keywor d: Shift 1 编 程 思 路 1.1 输入数值字符串 利用 DOS 系统功能的 10 号调用, 把需要的数值从键盘输入,此时输入 的是字符串。在利用 10 号调用时,要 注意缓冲区 BUF 的设定,其格式为: BUF DB 18 DB B DB 18 DUP(0) 1.2 判断数制 字符串输入后,先判断输入数据 的进制。通过缓冲区中回车符前面的 字符来判断。这个字符只能是字符串″ 0123456789BbOoQqHh″中 的 一 个 ,否 则输入的数据错误,程序结束。此字符 若为″B″或″b″则是二进制数;若为″O″、″ o″、″Q″、″q″中的任一字符,则是八进 制;若为″D″、″d″或″0″~″9″之间的任一 字符,则是十进制数;若为″H″或″h″则 是十六进制数。 1.3 字符数据转换为数值数据 需要把字符串中的每个字符数据 转换为其对应的数值数据。对于二、 八、十进制数,只要将其减去 30H 即 可;对于十六进制,因″A″~″F″或″a″~″ f″表示数值 10~15,若字符在″0″~″9″之 间,则减去 30H;若在″A″~″F″之间,则 减去 37H;若在″a″~″f″之间,则减去 57H。 1.4 数值数字转换成二进制数 把 得 到 的 数 值 数 字 d1d2 …… dn 通 过 每 种 数 制 的 基 数 转 换 成 二 进 制 数。d1d2……dn 可用如下公式计算得 到二进制形式: (…(d1R 基数+d2)R 基数+…)R 基数+dn 二、八、十、十六进制的基数分别为 2、 8、10、16。 例 如 十 进 制 数 3472 = ((3R10+4)R10+7)R10+2。 二、八、十进制的数字符号均在 0~9 之间,可用同一转换子程序 con- vert 实现,只要改变一些传递的参数即 可。十六进制有″A″~″F″、″a″~″f″数字字 符,情况特殊,单独用一个子程序 con- vert16 转换。 segment db 18 buf+1 num,num1 cl,low ch,high 2 汇编语言源程序实例 ;num1:不同数制的基数 ;low:基数的最小数字符号 ;high:基数的最大数字符号 init macro num1,low,high dec mov mov mov endm data buf db B db 18 dup(0) str equ $- str count num dw B loopnum db B ends data stack segment stack db 100 dup(0) stack code assume cs:code,ds:data,ss:stack start: mov ends segment ax,data db ' 0123456789BbOoQqDdHh' 利用 MATLAB 的绘图功能和曲线拟合功能,可以很方 [1] 徐萃薇,孙绳武. 计算方法引论[M]. 北京:高等教育出 便地进行多项式拟合和其它非线性曲线拟合,并可以通过 比较剩余标准差和可决系数 R2 的大小,来对比不同曲线 版社,2002- 01:62- 85. [2] 苏金明,张莲花,等. MATLAB 工具箱应用[M]. 北京:电 的拟合效果。从而在不知数学模型情况下,也能根据数据 子工业出版社,2004- 01:489- 512. 的散点图找出较优的曲线来拟合数据。 [3] 姜启源,谢金星,叶俊. 数学模型[M]. 北京:高等教育出 参 考 文 献 版社,2003- 08:308- 316. 收稿日期:2007- 05- 18 * 杨继鹏 山东服装职业学院信息工程系副教授(山东,泰安 271000)。 · 59 ·
分享到:
收藏