基于MATLAB的非线性曲线拟合

  • 格式:pdf
  • 大小:1.38 MB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例 1:给出下表数据 ,试用最小二乘法求一次和 二次拟合多项式 。
x - 1. 00 - 0. 75 - 0. 50 - 0. 25 0 0. 25 0. 50 0. 75 1. 00 y - 0. 2209 0. 3295 0. 8826 1. 4392 2. 0003 2. 5645 3. 1334 3. 7061 4. 2836 clear; close;
ta) ) ;
p lot ( tdata, ydata, ′+ ′, tdata, y1 ) ; legend ( ′实验数据 ′, ′拟 合曲线 ′)
成功得到最优解为 : c = 114. 2587 0. 1852 2. 0124
从而wenku.baidu.com出拟合曲线 :
y = 114. 2587 ( e - 0. 1852t - e - 2. 0124t )
legend ( ′实验数据 ′, ′一次拟合 ′, ′二次拟合 ′) ; 故一次 、二次拟合多项式分别为 :
y3 = 2. 2516x + 2. 0131 和 y3 = 0. 0313x2 + 2. 2516x + 2. 0001,拟合曲线图见图 1。
图 1 例 1多项式曲线拟合图
(2)非线性数据拟合函数 lsqcurvefit和 lsqnonlin。 MATLAB 提供了两个求解最小二乘非线性数据 拟合问题的命令 lsqcurvefit和 lsqnonlin。两者都要事 先定义 M - 函数文件 。 ① c = lsqcurvefit ( ′fun′, x0, xdata, ydata) 其中‘fun’为拟合函数的 M - 函数文件名 , x0为 初始向量 , xdata, ydata为参与曲线拟合的实验数据 。 函数返回值 c为非线性函数‘fun’的拟合系数 。 例 2: 2004年全国大学生数学建模竞赛 C题 (酒 后驾车 )中给出某人在短时间内喝下两瓶啤酒后 ,间 隔一定的时间 t测量他的血液中酒精含量 y (毫克 /百 毫升 ) ,得到数据如表 1所示 。
0 引 言
在科学实验及应用领域中 ,时常需要在分析一组 测试数据的基础上 ,去求自变量与应变量之间近似函 数关系表达式 ,以便计算机或其它设计人员利用它来 方便地进行其它设计计算 。这类问题在图形上就是
由测得的点求曲线拟合的问题 。
1 曲线拟合的基本原理
所谓曲线拟合是指设法找出某条光滑的曲线 ,它
(4)
2. 图形窗口形式 。
(1)利用多项式拟合的交互图命令 ( GU I) poly2
tool调用格式为 :
polytool ( x, y) 其中 x, y分别为实验数据构成向量 ,例如利用 polytool求解例 1的 MATLAB 命令如下 :
x = - 1: 0. 25: 1;
y = [ - 0. 2209, 0. 3295, 0. 8826, 1. 4392, 2. 0003, 2. 5645,
16
计 算 机 与 现 代 化
2008年第 5期
其中 x, y为参与曲线拟合的实验数据 , n为拟合 多项式的次数 ,函数返回值为拟合多项式的系数 (按 降幂排列 ) 。 n = 1时 ,就为线性拟合 。由于高次多项 式会产生 Runge现象 ,因此除非已知数据来自高次多 项式 ,否则多项式拟合的次数一般不超过六次 。
表 1 酒精含量与饮酒时间的实验数据
图 2 例 2非线性曲线拟合图
时间 (小时 ) 0. 25 0. 5 0. 75 1 1. 5 2 2. 5 3 3. 5 4 4. 5 5
酒精含量 30 68 75 82 82 77 68 68 58 51 50 41
时间 (小时 ) 6 7 8 9 10 11 12 13 14 15 16
2008年第 6期 文章编号 : 100622475 (2008) 0620015205
计算机与现代化 J ISUANJ I YU X IANDA IHUA
基于 MATLAB的非线性曲线拟合
唐家德
总第 154期
(楚雄师范学院数学系 ,云南 楚雄 675000)
摘要 :介绍软件 MATLAB非线性曲线拟合的功能 ,通过上机实验和误差分析 ,寻找较好的非线性函数来拟合实验数据 ,从 而探索并归纳总结出非线性曲线拟合的方法 、求解步骤和上机操作过程 。 关键词 :曲线拟合 ; 非线性 ; MATLAB 中图分类号 : TP311. 52 文献标识码 : A
17
先编写 M - 函数文件 Examp le2_2
M - file: function f = Examp le2_2 ( c, tdata, ydata)
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 ];
能最佳地拟合数据 。在曲线拟合时 ,并不要求拟合曲
线一定要经过每一个数据点 。其思想是使它能反映
这些离散数据的变化趋势 ,使数据点的误差平方和最
小 。也就是已知一组测定的数据 (例如 N 个点 ( xi ,
yi ) )去求得自变量 x和因变量 y的一个近似解析表
达式
y

(
x)
。若记误差
δ i
=φ( xi )
2 M ATLAB曲线拟合的相关方法
MATLAB 提供了两种方法进行曲线拟合 。一种 是以函数的形式 ,使用命令对数据进行拟合 。这种方 法比较繁琐 ,需要对拟合函数有比较好的了解 。另外 一种是用图形窗口进行操作 ,具有简便 、快速 ,可操作 性强的优点 。另外 , MATLAB 从拟合曲线的对象上 看 ,又可分为多项式曲线拟合和其它非线性曲线拟 合 ,具体介绍如下 :
Non linear Curve F itting Ba sed on M ATLAB
TANG J ia2de
(Department of M athematics, Chuxiong Normal University, Chuxiong 675000, China)
Abstract: This paper introduces the function of nonlinear curve fitting ofMATLAB software. By doing experiments w ith computer and error analysis, it is looking for better nonlinerar function to fit experimental data, in order to exp lore and get correct solution of nonlinear curve fitting. Key words: curve fitting; nonlinear; MATLAB
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 = 2. 2516 2. 0131 p2 = polyfit( x, y, 2) p2 = 0. 0313 2. 2516 2. 0001 y1 = polyval(p1, x) ; %多项式求值函数 ; y2 = polyval( p2, x) ; p lot( x, y, ′+ ′, x, y1, ′r: ′, x, y2, ′k - . ′)
(3)
拟合曲线图见图 2。
② c = lsqsnonlin ( ′fun′, c0) 。
求含参量非线性函数 fun中的参量 c,使得各数
据点函数值 fun的平方和最小 。
例如用 lsqsnonlin ( ′fun′, c0)命令求解例 2 的过
程如下 :
2008年第 5期
唐家德 :基于 MATLAB的非线性曲线拟合
ta) ) ;
以文件名 Examp le2_1保存后 ,在 MATLAB 的命令窗口中
输入语句 :
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( ′Examp le2_1′, c0, tdata, ydata) ; c0 = c; %以计算出的 c为初值进行迭代 ;
end
y1 = c (1) 3 ( exp ( - c ( 2 ) 3 tdata) - exp ( - c ( 3 ) 3 tda2
c0 = [ 1 1 1 ];
for i = 1: 50 c = lsqnonlin ( ′Examp le2_2′, c0) ; c0 = c;
end
c
c = 114. 2587 0. 1852 2. 0124 ,从而得出拟合曲线 :
y = 114. 2587 ( e - 0. 1852t - e - 2. 0124t )
酒精含量 38 35 28 25 18 15 12 10 7 7 4
题目要求结合给定数据建立饮酒后血液中酒精 浓度的数学模型 。通过建立微分方程模型得到短时 间内喝酒后血液中酒精浓度与时间的关系为 :
y = c1 ( e - c2 t - e - c3 t)
(2)
现在根据实验数据 ,利用非线性拟合函数 lsqcur2
-
yi , i = 1, 2, …,
N
N ,则要使误差的平方和最小 ,即要求为 Q = ∑δ2i 最 i=1
小 ,这就是常用的最小二乘法原理 。
N
Q = i∑=1δ2i
(1)
用最小二乘法求拟合曲线时 ,首先要确定 φ ( x)
的形式 。当人们对研究对象的内在特性和各因素间
的关系有比较充分的认识时 ,一般用机理分析的方法 建立描述 y =φ( x)的数学模型 ,再用曲线拟合的方法 确定模型中的参数 。但如果由于客观事物内部规律 的复杂性及人们认识程度的限制 ,无法建立合乎机理 规律的数学模型 ,这时 ,只有对观测数据 ( xi , yi )进行 分析 ,绘制散点图 ,先猜测 y =φ( x)的形式 ,并通过上 机实验和误差分析 ,不断对比和计算 ,然后选出拟合 数据较好的函数类型 。
3. 1334, 3. 7061, 4. 2836 ];
polytool( x, y)
图 3 多项式 (线性 )拟合的 图 4 多项式 (二次 )拟合的 交互式界面 交互式界面
打开多项式拟合的交互式界面 ,见图 3,由于要 拟合的函数为线性函数 ,因此在多项式拟合交互式界 面中的 Degree中输入 1,点击导出数据 Export,出现 保存对话框 Export to Workspace,选中 Parameters (参 数 ) , Residuals (残 差 ) 后 点 击 OK, 在 MATLAB 的 Workspace窗口中可以看到参数为 : 2. 2516和 2. 0131
1. 函数形式 。 (1)多项式拟合函数 Polyfit。 利用该函数进行多项式曲线拟合 ,其调用格式 为:
p = polyfit( x, y, n)
收稿日期 : 2007205214 作者简介 :唐家德 (1970 - ) ,男 ,云南楚雄人 , 楚雄师范学院数学系副教授 ,硕士 ,研究方向 :微分方程和数值计算 。
vefit,确定模型 (2)中的参数 c1 , c2 , c3 。求解过程为 :
先编写一个 M - 函数文件 Examp le2_1
M - file: function f = Examp le2_1 ( c, tdata)
f = c (1 ) 3 ( exp ( - c ( 2 ) 3 tdata) - exp ( - c ( 3 ) 3 tda2
ydata = [ 30 68 75 82 82 77 68 68 58 51 50 41 38 35 28 25
18 15 12 10 7 7 4 ];
f = c (1) 3 ( exp ( - c ( 2) 3 tdata) - exp ( - c ( 3) 3 tdata) )
- ydata; 保存后 ,在 MATLAB命令窗口输入语句 :