1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,数学建模与数学实验,拟 合,实验目的,实验内容,2、掌握用数学软件求解拟合问题。,1、直观了解拟合基本内容。,1、,拟合问题基本理论。,2、,用数学软件求解拟合问题。,3、,应用实例,曲 线 拟 合 问 题 的 提 法,已知一组(二维)数据,即平面上,n,个点,(,x,i,y,i,)i=1,n,寻求一个函数(曲线),y=f(x),使,f(x),在,某种准则下与所有数据点最为接近,即曲线拟合得最好。,+,+,+,+,+,+,+,+,+,x,y,y=f(x),(,x,i,y,i,),i,i,为点,(,x,i,y
2、i,),与,曲线,y=f(x),的,距离,拟合与插值的关系,函数插值与曲线拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二者的数学方法上是完全不同的。,实例:,下面数据是某次实验所得,希望得到,X,和,f,之间的关系?,MATLAB(,cn,),问题:,给定一批数据点,需确定满足特定要求的曲线或曲面,解决方案:,若不要求曲线(面)通过所有数据点,而是要求它反映对象整体的变化趋势,这就是,数据拟合,,又称曲线拟合或曲面拟合。,若要求所求曲线(面)通过所给所有数据点,就是,插值问题,;,x=1 2 4 7 9 12 13 15 17;,f=1.5 3.9 6 11.7 12.6
3、18.8 20.3 20.6 21.1;,axis(0 18 1 22),xlabel,(x),ylabel,(f),y=1:0.1:17;,figure(1),plot(x,f,o),gtext,(,已知数据点),hold on;pause,bb1=interp1(x,f,y,nearest),plot(y,bb1),gtext,(nearest),hold on;pause a=,polyfit,(x,f,3),aa,=,polyval,(a,y),plot(y,aa,),gtext,(,曲线拟合),hold off;pause,figure(2),plot(x,f,o),gtext,(
4、已知数据点),hold on;pause,bb1=interp1(x,f,y,linest,),plot(y,bb1),gtext,(,linest,),hold on;pause,a=,polyfit,(x,f,3),aa,=,polyval,(a,y),plot(y,aa,),gtext,(,曲线拟合),hold off;pause,figure(3),plot(x,f,o),gtext,(,已知数据点),hold on;pause,bb1=interp1(x,f,y,spline,),plot(y,bb1),gtext,(,spline,),hold on;pause,a=,polyf
5、it,(x,f,3),aa,=,polyval,(a,y),plot(y,aa,),gtext,(,曲线拟合),hold off;pause,最临近插值、线性插值、样条插值与曲线拟合结果:,曲线拟合问题最常用的解法线性最小二乘法的基本思路,第一步,:先选定一组函数,r,1,(x),r,2,(x),r,m,(x),m0),模型假设,1.机体看作一个房室,室内血药浓度均匀一室模型,模型建立,在此,,d=300mg,t,及,c(t),在某些点处的值见前表,需经拟合求出参数,k、v,用线性最小二乘拟合,c(t),MATLAB(lihe1),计算结果:,d=300;,t=0.25 0.5 1 1.5 2
6、 3 4 6 8;,c=19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01;,y=log(c);,a=,polyfit,(t,y,1),k=-a(1),v=d/exp(a(2),程序:,用非线性最小二乘拟合,c(t),给药方案 设计,c,c,2,c,1,0,t,设每次注射剂量,D,间隔时间,血药浓度,c(t),应,c,1,c(t),c,2,初次剂量,D,0,应,加大,给药方案记为:,2、,1、,计算结果:,给药方案:,c,1,=10,c,2,=25,k=0.2347,v=15.02,故可制定给药方案:,即:,首次注射375,mg,,其余每次注射2
7、25,mg,,注射的间隔时间为4小时。,估计水塔的流量,2、,解题思路,3、,算法设计与编程,1、,问题,某居民区有一供居民用水的园柱形水塔,一般可以通过测量其水位来估计水的流量,但面临的困难是,当水塔水位下降到设定的最低水位时,水泵自动启动向水塔供水,到设定的最高水位时停止供水,这段时间无法测量水塔的水位和水泵的供水量通常水泵每天供水一两次,每次约两小时.,水塔是一个高12.2米,直径17.4米的正园柱按照设计,水塔水位降至约8.2米时,水泵自动启动,水位升到约10.8米时水泵停止工作,表1 是某一天的水位测量记录,试估计任何时刻(包括水泵正供水时)从水塔流出的水流量,及一天的总用水量,流量
8、估计的解题思路,拟合水位时间函数,确定流量时间函数,估计一天总用水量,拟合水位时间函数,测量记录看,一天有两个供水时段(以下称第1供水时段和第2供水时段),和3个水泵不工作时段(以下称第1时段,t=0,到,t=8.97,,第2次时段,t=10.95,到,t=20.84,和第3时段,t=23,以后)对第1、2时段的测量数据直接分别作多项式拟合,得到水位函数为使拟合曲线比较光滑,多项式次数不要太高,一般在36由于第3时段只有3个测量记录,无法对这一时段的水位作出较好的拟合,2、,确定流量时间函数,对于第1、2时段只需将水位函数求导数即可,对于两个供水时段的流量,则用供水时段前后(水泵不工作时段)的
9、流量拟合得到,并且将拟合得到的第2供水时段流量外推,将第3时段流量包含在第2供水时段内,3、,一天总用水量的估计,总用水量等于两个水泵不工作时段和两个供水时段用水量之和,它们都可以由流量对时间的积分得到。,算法设计与编程,1、,拟合第1、2时段的水位,并导出流量,2、,拟合供水时段的流量,3、,估计一天总用水量,4、流量及总用水量的检验,1、,拟合第1时段的水位,并导出流量,设,t,h,为已输入的时刻和水位测量记录(水泵启动的4个时刻不输入),,第1时段,各时刻的流量可如下得:,1),c1=,polyfit,(t(1:10),h(1:10),3);,%,用3次多项式拟合第1时段水位,,c1,输
10、出3次多项式的系数,2),a1=,polyder,(c1);,%a1,输出多项式(系数为,c1),导数的系数,3),tp1=0:0.1:9;,x1=-,polyval,(a1,tp1);,%x1,输出多项式(系数为,a1),在,tp1,点的函数值(取负后边为正值),即,tp1,时刻的流量,MATLAB(llgj1),4),流量函数为:,2、,拟合第2时段的水位,并导出流量,设,t,h,为已输入的时刻和水位测量记录(水泵启动的4个时刻不输入),,第2时段,各时刻的流量可如下得:,1),c2=,polyfit,(t(10.9:21),h(10.9:21),3);,%,用3次多项式拟合第2时段水位,
11、c2,输出3次多项式的系数,2),a2=,polyder,(c2);,%a2,输出多项式(系数为,c2),导数的系数,3),tp2=10.9:0.1:21;,x2=-,polyval,(a2,tp2);,%x2,输出多项式(系数为,a2),在,tp2,点的函数值(取负后边为正值),即,tp2,时刻的流量,MATLAB(llgj2),4),流量函数为:,3、,拟合供水时段的流量,在第1供水时段(,t=911),之前(即第1时段)和之后(即第2时段)各取几点,其流量已经得到,用它们拟合第1供水时段的流量为使流量函数在,t=9,和,t=11,连续,我们简单地只取4个点,拟合3次多项式(即曲线必过这
12、4个点),实现如下:,xx1=-,polyval,(a1,8 9);%,取第1时段在,t=8,9,的流量,xx2=-,polyval,(a2,11 12);%,取第2时段在,t=11,12,的流量,xx12=xx1 xx2;,c12=,polyfit,(8 9 11 12,xx12,3);%,拟合3次多项式,tp12=9:0.1:11;,x12=,polyval,(c12,tp12);%x12,输出第1供水时段,各时刻的流量,MATLAB(llgj3),拟合的流量函数为:,在第2供水时段之前取,t=20,20.8,两点的流水量,在该时刻之后(第3时段)仅有3个水位记录,我们用差分得到流量,然后
13、用这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);,xx3=-,polyval,(a2,t3(1:2),dht3);%,取,t3,各时刻的流量,c3=,polyfit,(t3,xx3,3);%,拟合3次多项式,t3=20.8:0.1:24;,x3=,polyval,(c3,tp3);%x3,输出第2供水时段,(外推至,t=24),各时刻的流量,MATLAB(ll
14、gj4),拟合的流量函数为:,3、,一天总用水量的估计,第1、2时段和第1、2供水时段流量的积分之和,就是一天总用水量虽然诸时段的流量已表为多项式函数,积分可以解析地算出,这里仍用数值积分计算如下:,y1=0.1*,trapz,(x1);%,第1时段用水量(仍按高,度计),0.1为积分步长,y2=0.1*,trapz,(x2);%,第2时段用水量,y12=0.1*,trapz,(x12);%,第1供水时段用水量,y3=0.1*,trapz,(x3);%,第2供水时段用水量,y=(y1+y2+y12+y3)*237.8*0.01;%,一天总用水量(),计算结果:,y1=146.2,y2=266.
15、8,y12=47.4,y3=77.3,y=1250.4,MATLAB(,llgjz,),4、,流量及总用水量的检验,计算出的,各时刻的流量,可用水位记录的数值微分来检验用水量,y1,可用第1时段水位测量记录中下降高度968-822=146来检验,类似地,,y2,用1082-822=260检验,供水时段流量,的一种,检验方法,如下:供水时段的用水量加上水位上升值260是该时段泵入的水量,除以时段长度得到水泵的功率(单位时间泵入的水量),而两个供水时段水泵的功率应大致相等第1、2时段水泵的功率可计算如下:,p1=(y12+260)/2;%,第1供水时段水泵的功率,(水量仍以高度计),tp4=20.
16、8:0.1:23;,xp2=,polyval,(c3,tp4);%xp2,输出第2供水时段,各时刻的流量,p2=(0.1*,trapz,(xp2)+260)/2.2;%,第2供水时段水泵的功率,(水量仍以高度计),计算结果,:,p1=154.5 ,p2=140.1,MATLAB(,ll,),计算结果,流量函数为:,流量曲线见图,n=(3,4),n=(5,6),用非线性最小二乘拟合,c(t)-,用,lsq,curvefit,2、,主程序,lihe2.m,如下,clear,tdata,=0.25 0.5 1 1.5 2 3 4 6 8;,cdata,=19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01;,x0=10,0.5;,x=,lsqcurvefit,(,curvefun3,x0,tdata,cdata,);,f=curvefun3(x,tdata,),x,MATLAB(lihe2),1、用,M-,文件,curvefun3.m,定义函数,function,f=curvefun3(x,tdata,),d=300,f=(x(1)d)*exp(-x(2)*,tdata,),%x(1)=v;x(2)=k,






