1、数学建模与数学实验拟合后勤工程学院数学教研室1实验目的1、直观了解拟合基本内容。2、掌握用数学软件求解拟合问题。实验内容、拟合问题引例及基本理论。2、用数学软件求解拟合问题。3、应用实例4、实验作业。2p 拟合1.拟合问题引例2.拟合的基本原理3拟合问题引例1已知热敏电阻数据:温度t()1 20.5 32.7电阻R(C)|765 826求6(PC时的电阻R。51.0 7 3.0 95.7873 942 1032设 R=at+ba,b为待定系数4拟合问题引例2已知一室模型快速静脉注射下的血药浓度数据(仁0注射300mg)t(h)0.25 0.5 1 L5 2 3 4 6 8c(pig/ml)19
2、.21 18.15 15.36 14.10 12.8 9 9.32 7.45 5.24 3.01求血药浓度随时间的变化规律c(t).作半对数坐标系(semilogy)下的图形 MATLAB(aal)C)=cQekt c,左为待定系数曲线拟合问题的提法已知一组(二维)数据,即平面上n个点(号和)i=l,n,寻求一个函数(曲线)y=f(x),使f(x)在某种准则下与所 有数据点最为接近,即曲线拟合得最好。今为点(如叩与曲线y=f(x)的距离6拟合与插值的关系问题:给定一批数据点,需确定满足特定要求的曲线或曲面解决方案:若要求所求曲线(面)通过所给所有数据点,就是插值问题;若不要求曲线(面)通过所有
3、数据点,而是要求它反映对象 整体的变化趋势,这就是数据拟合,又称曲线拟合或曲面拟合。函数插值与曲线拟合都是要根据一组数据构造一个函数作 为近似,由于近似的要求不同,二者的数学方法上是完全不同 的。实例:下面数据是某次实验所得,希望得到X和f之间的关系?MATLAB(cn)X1247912131517f1.53.96.611.715.618.819.620.621.17最临近插值、线性插值、样条插值与曲线拟合结果:曲线拟合问题最常用的解法线性最小二乘法的基本思路第一步:先选定一组函数L(X),r2(x),.rm(x),m m)即 Ra二yrnla1+rn2a2+-+rnmam=ynril Z12
4、/J 中 R=rnlnm超定方程一般是不存在解的矛盾方程组。n如果有向量a使得 Z(G%+G2+,+%M-y)2达到最小,则称a为上述超定方程施小二乘解。10线性最小二乘法的求解所以,曲线拟合的最小二乘法要解决的问题,求以下超定方程组的最小二乘解的问题。Ra=y。(巧)为)实际上就是(3)一 M其中 R=,y=()/()am%定理:当RTR可逆时,超定方程组(3)存在最小二乘解,且即为方程组RTRa=RTy的解:a=(RTR)TRTy11线性最小二乘拟合 f(x)=a1r1(x)+.+amrm(x)cl3函数h(x),r 1n(x)的选取1.通过机理分析建立数学模型来确定f(x);2.将数据(
5、号外i=l,n作图,通过直观判断确定f(x):用MATLAB解拟合问题1、线性最小二乘拟合2、非线性最小二乘拟合a13用MATLAB作线性最小二乘拟合.七1.作多项式f(X)=Xm+/乂+/+1拟合,可利用已有程序:2.对超定方程组=打灯(加 可得最小二乘意义下的解。3.多项式在x处的值y可用以下命令计算:y=polyval(a,x)14例对下面一组数据作二次多项式拟合xi0.10.20.40.50.60.70.80.91yi1.97 83.286.167.347.669.589.489.3011.2即要求出二次多项式:fM=aTx2+。2兀+中的A=(%,3%)使得:i=l最小解法L用解超定
6、方程的方法(2 1再 占 1此时 R=.2 1J”xn 11)输入以下命令:x=0:0.1:l;y=-0.4471.97 8 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2;R=(x.A2)f xf ones(114);A=RyfMATLAB(zxecl)2)计算结果:A=-9.8 108 20.1293-0.0317/(x)=-9.8 108%2+20.1293%-0.0317解法2.用多项式拟合的命令1)输入以下命令:x=0:0.1:l;12y=-0.4471.97 8 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30
7、 11.2;A=polyfit(x,y,2)z=polyval(Ax);MATLAB(zxec2)plot(x,y,,k+,,x,z,T)%作出数据点和拟合曲线的图形2)计算结果:A=-9.8 108 20.1293-0.0317/(x)=-9.8 108%2+20.1293%-0.031717了一个 用MATLAB作非线性最小二乘拟合嬴ab的提供了两个求非线性最小二乘拟合的函数:1 sqcurvef it01 sqnonl ino两个命令都要先建立M-文件fun.m,在其中定义函数f(x),但两者定义f(x)的方式是不同的,可参 考例题.1.1sqcurvefit已知数据点:xdata=(x
8、dataP xdata2,,xdatan),ydata=(ydata ydata2,,ydatan)1 sqcurvefit用以求含参量x(向量)的向量值函数F(x,xdata)=(F(x,xdataP,,F(x,xdatan)T中的参变量x(向量),使得(b(X,xdata)-ydatat)最小 i=l18输入格式为:(1)x=Isqcurvefit(fun,xO,xdata,ydata);(2)x=lsqcurvefit(fun,xO,xdata,ydata,options);(3)x=Isqcurvefit(fun,xO,xdata,ydata,options,grad);(4)x,op
9、tions=Isqcurvefit(6funxO,xdata9ydata9.);(5)x,options,funval=Isqcurvefit(6funxO9xdata9ydata9.);(6)x,options,funval,Jacob=Isqcurvefit(6funxO,xdata,ydata9.);192.Isqnonlin已知数据点:xdata=(xdata1,xdata2,xdatan)ydata=(ydata ydata2,ydatan)Isqnonlin用以求含参量x(向量)的向量值函数 f(x)=(f1(x),f2(x),.,fn(x)T 中的参量x,使得f(%)/(%)=/
10、(以+%(以+/(4最小。其中 fj(x)=f(x,xdataP ydataj=F(x?xdataj)-ydataj输入格式为:1)x=lsqnonlin(fun,xO);2)x=Isqnonlin(fun,xO,options);3)x=Isqnonlin(fun,xO,options,grad);4)x,options=Isqnonlin(fun,xO,.);5)x,options,funval=Isqnonlin(fun,21例2用下面一组数据拟合。=。+从02比 中的参数a,b,kt j1002003004005006007 008 009001000c.xlO34.544.995.3
11、5 5.655.906.106.266.396.506.59该问题即解最优化问题:10min F(a,b,k)=a+be,Q2ktjjTJ22解法1.用命令IsqcurvefitF(x,tdata)=(a+beQ,Q2kti,+be2ktw)r,x=(a,b,k)1)编写M-文件 curvefunl.mfunction f=curvefunl(x,tdata)f=x(l)+x(2)*exp(-0.02*x(3)*tdata)落其中 x(l)=a;x(2)=b;x(3)=k;2)输入命令tdata=100:100:1000cdata=le-03*4.54,4.99,5.35,5.65,5.90,
12、6.10,6.26,6.39,6.50,6.59;x0=0.2,0.05,0.05;x=lsqcurvefit(curvefunl,xO,tdata,cdata)f=curvefunl(x,tdata)MATLABCfzxec!3)运算结果为:f=0.0043 0.00510.0062 0.0062x=0.0063-0.00340.0056 0.00590.0063 0.00630.25420.00610.00634)结论:a=0.0063,b=-0.0034,k=0.254224函数curvefim2的自变量是x,cdata和tdata是已知参数,故应 将cdata tdata的值写在 cu
13、rvefim2m 中解法2 用命令Isqnonlinf(x)=F(x9tdata,ctada)=(+be.os幼 _q,.,”+/?e-s的o_Ci)T x=(a,b,k)1)编写M-文件 curvefun2.m function f=curvefun2(x)tdata=100:100:1000;cdata=le-03*4.54,4 99,5 35,5 65,5.90,610,626,6.39,6.50,6.59;f=x(1)+x(2)*exp(-0.02*x(3)*tdata)-cdata2)输入命令:x0=0.2,0.05,0.05;x=lsqnonlin(curvefun21rxO)_f
14、=curvefun2(x)MATLAB(fzxec2)253)运算结果为f=1.0e-003*(0.2322-0.1243-0.2495-0.2413-0.1668-0.0724 0.0241 0.1159 0.2030 0.2792x=0.0063-0.0034 0.25424)结论:即拟合得a=0.0063 b=-0.0034 k=0.2542可以看出,两个命令的计算结果是相同的.26MATLAB解应用问题实例T1、电阻问题2、给药方案问题*3、水塔流量估计问题27电阻问题.l 迹 a 温度t()20.5 32.7 51.0 73.0 95.7例.由数据二-电阻 R(C)765 826 8
15、73 942 1032拟合区=2止+分2方法 1.用命令 polyfit(xzy,m)MATLAB(dianzul)得到 a1=3.3940,a2=7 02.4918方法2.直接用 a=RyMATLAB(dianzu2)结果相同。28给药方案拟合问题实例2一种新药用于临床之前,必须设计给药方案.药物进入机体后血液输送到全身,在这个过程中不断地被吸收、分布、代谢,最终排出体外,药物在血液中的浓度,即单位体积血液中的药物含量,称为血药浓度。一室模型:将整个机体看作一个房室,称中心室,室内血药浓度是均匀的。快速静脉注射后,浓度立即上升;然后迅速下降。当浓度太低时,达不到预 期的治疗效果;当浓度太高,
16、又可能导致药物中毒 或副作用太强。临床上,每种药物有一个最小有效 浓度5和一个最大有效浓度C2。设计给药方案时,要使血药浓度保持在CC2之间。本题设5=10,c2=25(ug/ml).29要设计给药方案,必须知道给药后血药浓度随时间变化的规律。从实验和理论两方面着手:在实验方面,对某人用快速静脉注射方式一次注入该药物3 00mg后,在一定时刻t(小时)采集血药,测得血药浓度c(ug/mD如下表:t(h)0.25 0.51.5 2 3 4 6 8c(gg/ml)19.21 18.15 15.36 14.10 12.8 9 9.32 7.45 5.24 3.0130问 题给药方案L在快速静脉注射的
17、给药方式下,研究血药浓 度(单位体积血液中的药物含量)的变化规律。2.给定药物的最小有效浓度和最大治疗浓度,设计给药方案:每次注射剂量多大;间隔时间多长。分析实验:对血药浓度数据作拟合,符 合负指数变化规律理论:用一室模型研 究血药浓度变化规律模型假设1.机体看作一个房室,室内血药浓度均匀一一室模型2.药物排除速率与血药浓度成正比,比例系数k(0)3.血液容积v,t=0注射剂量d,血药浓度立即为d/v.模型建立de由假设2得:生=-kc dt由假设3得:c(O)=d/izV在此,d=300mg,t及c(t)在某些点处的值见前表,需经拟合求出参数h uy=a1t+a2 k=一 ,v=d I e用
18、线性最小二乘拟合c(t)c(0=ekt n In c=ln(d/v)-kt vy=In c,ax-k.a2-ln(d/v)程序:d=300;t=0.25 0.5 1 1.523468;c=19.21 18.15 15.36 14.10 12.8 99.32 7.45 5.243.01;y=iog(c);a=polyfit(t5y,1)_k=-a(1)MATLAB(lihel)v=d/exp(a(2)计算结果:k=02347(1/h),v=15.02(/)用非线性最小 二乘拟合c(t)给药方案设计设每次注射剂量D,间隔时间,血药浓度c(t)应c c(t)C2初次剂量Do应加大给药方案记为:步。,
19、。*1、Do=vr2,D=v(c2-q)2、c c2c kn t-In k 4计算结果:。0=37 5.5,0=225.3,7=3.9给药方案:Z)o=37 5(机g),D=225(mg),t=4(/i)故可制定给药方案:0=375(机g),D=225(mg),t=4(/z)即:首次注射375mg,其余每次注射225mg,注射的间隔时间为4小时。35估计水塔的流量1、MS 2、解题思路 3、算法设计与编程纥36、某居民区有一供居民用水的园柱形水塔,一 般可以通过测量其水位来估计水的流量,但面临 的困难是,当水塔水位下降到设定的最低水位时,水泵自动启动向水塔供水,到设定的最高水位时 停止供水,这
20、段时间无法测量水塔的水位和水泵 的供水量.通常水泵每天供水一两次,每次约两 小时.水塔是一个高12.2米,直径17.4米的正园柱.按 照设计,水塔水位降至约8.2米时,水泵自动启 动,水位升到约10.8米时水泵停止工作.表1是某一天的水位测量记录,试估计任何时刻(包括水泵正供水时)从水塔流出的水流量,及 一天的总用水量.37表1 水位测量记录(符号表示水泵启动)时刻(h)水位(cm)0 0.92 1.8 4 2.95 3.8 7 4.98 5.90 7.01 7.93 8.97968 948 931 913 898 881 869 852 839 822时刻(h)水位(cm)9.98 10.9
21、2 10.95 12.03 12.95 13.8 8 14.98 15.90 16.8 3 17.93/1082 1050 1021 994 965 941 918 892时刻(h)水位(cm)19.04 19.96 20.8 4 22.01 22.96 23.8 8 24.99 25.91866 843 822/1059 1035 1018流量估计的解题思路拟合水位时间函数确定流量时间函数估计一天总用水量拟合水位时间函数_测量记录看,一天有两个供水时段(以下称第1供水 时段和第2供水时段),和3个水泵不工作时段(以下 称第1时段t=0至八=8.97,第2次时段t=10.95至Ut=20.8
22、4和 第3时段t=23以后).对第1、2时段的测量数据直接分 别作多项式拟合,得到水位函数.为使拟合曲线比较 光滑,多项式次数不要太高,一般在36.由于第3时 段只有3个测量记录,无法对这一时段的水位作出较好 的拟合.一402、确定流量时间函数对于第1、2时段只需将水位函数求导数即可,对于两个供水时段的流量,则用供水时段前后,水泵不工作时段)的流量拟合得到,并且将拟 合得到的第2供水时段流量外推,将第3时段流量 包含在第2供水时段内.41总用水量等于两个水泵不工作时段和 两个供水时段用水量之和,它们都可以 由流量对时间的积分得到。亘42算法设计与编程1、拟合第1、2时段的水位,并导出流量2、拟
23、合供水时段的流量3、估计一天总用水量4、流量及总用水量的检验1、拟合第1时段的水位,并导出流量设t,h为已输入的时刻和水位测量记录(水泵启动的4个时刻 不输入),第1时段各时刻的流量可如下得:1)cl=polyfit(t(1:10),h(1:10),3);%用3次多项式拟合第1时段水位,cl输出3次多项式的系数2)al=polyder(cl);%al输出多项式(系数为cl)导数的系数MATLAB-3)tpl=0:0.1:9;-xl=-polyval(al,tpl);%xl输出多项式(系数为al)在tpl点的函数值(取负后边为正值),即tpl时刻的流量4)流量函数为:/(/)=0.2356/+2
24、.7 17 3/22.107 9 442、拟合第2时段的水位,并导出流量设t,h为已输入的时刻和水位测量记录(水泵启动的4个时刻 不输入),第2时段各时刻的流量可如下得:1)c2=polyfit(t(10.9:21),h(10.9:21),3);%用3次多项式拟合第2时段水位,c2输出3次多项式的系数2)a2=polydr(c2);%a2输出多项式(系数为c2)导数的系数。、c,c c c,c,MATLAB(llg3)tp2=10.9:0.1:21;-j三x2=-polyval(a2 r tp2);%x2输出多项式(系数为a2)在tp2点的函数值(取负后边为正值),即tp2时刻的流量 q-4)
25、流量函数为:于。)=0.0186+0.7 529/2 8.7 5121 1.8 3133、拟合供水时段的流量在第1供水时段(t=911)之前(即第1时段)和之后(即第2时 段)各取几点,其流量已经得到,用它们拟合第1供水时段的流 量.为使流量函数在t=9和t=ll连续,我们简单地只取4个点,拟合 3次多项式(即曲线必过这4个点),实现如下:xxl=-polyval(al,8 9);%取第 1 时段在t=8,9的流量xx2=-polyval(a2,11 12);%取第2时段在t=ll,12的流量xxl2=xxl xx2;cl2=polyfit(8 9 11 12,xxl2,3);%拟合3次多项式
26、tpl2=9:0,1:11;|MATLAB佻i3)xl2=polyval(cl2,tpl2);%xl2输出第 1 供水时段各时刻的流量拟合的流量函数为:/(。=3.7207/+73.587%355.07 8 46在第2供水时段之前取t=20,20.8两点的流水量,在该时刻之 后(第3时段)仅有3个水位记录,我们用差分得到流量,然后用 这4个数值拟合第2供水时段的流量如下:dt3=diff(t(22:24);%最后3个时刻的两两之差dh3=diff(h(22:24);%最后3个水位的两两之差dht3=-dh3./dt3;%t(22)和 t(23)的流量 t3=20 20.8 t(22)t(23)
27、;xx3=-polyval(a2,t3(l:2),dht3);%取13各时刻的流量c3=polyfit(t3,xx3,3);%拟合3次专项式t3=20,8:0,1:24;I MATLAB(咽正x3=polyval(c3,tp3);%x3输出第2供水时段 l(外推至t=24)各时刻的流量拟合的流量函数为:/=0.1405/+7.307 7 1 91.8 28 3 473、一天总用水量的估计第1、2时段和第1、2供水时段流量的积分之和,就是一天总用水 量.虽然诸时段的流量已表为多项式函数,积分可以解析地算出,这里仍用数值积分计算如下:yl=0.1*trapz(xl);%第1时段用水量(仍按高y2=
28、0.1*trapz(x2);y 12=0.1*trapz(x 12);y3=0.1*trapz(x3);度计),0为积分步长%第2时段用水量%第1供水时段用水量%第2供水时段用水量y=(yl+y2+yl2+y3)*237.8*0.01;%一天总用水量(m3=103L)计算结果:yl=146.2,y2=266.8,yl2=47.4,y3=7 73 y=1250.4MATLAB(llgiz)484、流量及总用水量的检验计算出的各时刻的流量可用水位记录的数值微分来检验.用 水量yl可用第1时段水位测量记录中下降高度968-8 22=146来检 验,类似地,y2用108 2-8 22=260检验.供水
29、时段流量的一种检验方法如下:供水时段的用水量加上水 位上升值260是该时段泵入的水量,除以时段长度得到水泵的 功率(单位时间泵入的水量),而两个供水时段水泵的功率应 大致相等.第1、2时段水泵的功率可计算如下:pl=(y12+260)/2;%第1供水时段水泵的功率(水量仍以高度计)tp4=20.8:0.1:23;xp2=polyval(c3,tp4);%xp2输出第2供水时段各时刻的流量p2=(0.1*trapz(xp2)+260)/2.2;%第2供水时段水泵的功率(水量仍以高度计)计算结果:pl=154.5,p2=140.1 MATLAB(ID计算结果流量函数为:(nl,n2)yl,y2,y
30、l2,y3yPl P2(3,4)146.2,266.8,47.4,7 7.31250.4154.5 140.1(5,6)146.5,257.8,46.1,7 6.3128 2.4153.7 140.1-0.235612+2.7 17 31-22.107 9 0r 9-3.7 20712+7 3.58 7 91-355.07 8 9rll/Q)=1 0.018 6 户+0.7 529/8.7 512,1.8 313 llr21-0.1405/+7.307 7r-91.8 28 3 21W 2450流量曲线见图 11=(3,4)n=(5,6)51练习1用给定的多项式,如y=x3-6x2+5x-3,
31、产生一组数据(%,%,i=l,2,.,n),再在苗上添 加随机干扰(可用rand产生(0,1)均匀分布随 机数,或用rands产生N(0,l)分布随机数),然 后用片和添加了随机干扰的乂作的3次多项 式拟合,与原系数比较。如果作2或4次多项式拟合,结果如何?52练习2、用电压V=10伏的电池给电容器充电,电容器上t时刻的电压为 v(r)=y-(V-V0)/7,其中 V。是电容器的初始电压,是充电常数。试由 下面一组t,V数据确定V。,1t(秒)0.5 1 2 3 4 5 7 9V(伏)6.36 6.48 7.26 8.22 8.66 8.99 9.43 9.63回53用非线性最小二乘拟合c(t
32、).用Isqcurvefit1、用乂-文件55611113.111定义函数。(,)二一e kt function f=curvefun3(x,tdata)d=300f=(x(1)d)*exp(-x(2)*tdata)%x(1)=v;x(2)=k2、主程序lihe2m如下 cleartdata=0.250.51 1.523468;cdata=19.21 18.1515.3614.1012.8 9 9.32 7.45 5.24 3.01;x0=10,0.5;-;x=lsqcurvefMcurvefun3,xO,tdata,cdata);MATLAB(lihe2)f=curvefun3(x,tdata)x54
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100