数学建模matlab拟合.ppt

上传人:小飞机 文档编号:6577979 上传时间:2023-11-14 格式:PPT 页数:49 大小:420KB
返回 下载 相关 举报
数学建模matlab拟合.ppt_第1页
第1页 / 共49页
数学建模matlab拟合.ppt_第2页
第2页 / 共49页
数学建模matlab拟合.ppt_第3页
第3页 / 共49页
数学建模matlab拟合.ppt_第4页
第4页 / 共49页
数学建模matlab拟合.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《数学建模matlab拟合.ppt》由会员分享,可在线阅读,更多相关《数学建模matlab拟合.ppt(49页珍藏版)》请在三一办公上搜索。

1、数学建模与数学实验,拟 合,实验目的,实验内容,2、掌握用数学软件求解拟合问题。,1、直观了解拟合基本内容。,1、拟合问题基本理论。,2、用数学软件求解拟合问题。,3、应用实例,曲 线 拟 合 问 题 的 提 法,已知一组(二维)数据,即平面上 n个点(xi,yi)i=1,n,寻求一个函数(曲线)y=f(x),使 f(x)在某种准则下与所有数据点最为接近,即曲线拟合得最好。,y=f(x),i 为点(xi,yi)与曲线 y=f(x)的距离,拟合与插值的关系,函数插值与曲线拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二者的数学方法上是完全不同的。,实例:下面数据是某次实验所得,

2、希望得到X和 f之间的关系?,MATLAB(cn),问题:给定一批数据点,需确定满足特定要求的曲线或曲面,解决方案:,若不要求曲线(面)通过所有数据点,而是要求它反映对象整体的变化趋势,这就是数据拟合,又称曲线拟合或曲面拟合。,若要求所求曲线(面)通过所给所有数据点,就是插值问题;,最临近插值、线性插值、样条插值与曲线拟合结果:,曲线拟合问题最常用的解法线性最小二乘法的基本思路,第一步:先选定一组函数 r1(x),r2(x),rm(x),mn,令 f(x)=a1r1(x)+a2r2(x)+amrm(x)(1)其中 a1,a2,am 为待定系数。,第二步:确定a1,a2,am 的准则(最小二乘准

3、则):使n个点(xi,yi)与曲线 y=f(x)的距离i 的平方和最小。,记,问题归结为,求 a1,a2,am 使 J(a1,a2,am)最小。,线性最小二乘法的求解:预备知识,超定方程组:方程个数大于未知量个数的方程组,超定方程一般是不存在解的矛盾方程组。,如果有向量a使得 达到最小,则称a为上述超定方程的最小二乘解。,线性最小二乘法的求解,定理:当RTR可逆时,超定方程组(3)存在最小二乘解,且即为方程组 RTRa=RTy的解:a=(RTR)-1RTy,所以,曲线拟合的最小二乘法要解决的问题,实际上就是求以下超定方程组的最小二乘解的问题。,线性最小二乘拟合 f(x)=a1r1(x)+amr

4、m(x)中函数r1(x),rm(x)的选取,1.通过机理分析建立数学模型来确定 f(x);,2.将数据(xi,yi)i=1,n 作图,通过直观判断确定 f(x):,用MATLAB解拟合问题,1、线性最小二乘拟合,2、非线性最小二乘拟合,用MATLAB作线性最小二乘拟合,1.作多项式f(x)=a1xm+amx+am+1拟合,可利用已有程序:,a=polyfit(x,y,m),2.对超定方程组,3.多项式在x处的值y可用以下命令计算:y=polyval(a,x),例 对下面一组数据作二次多项式拟合,1)输入以下命令:x=0:0.1:1;y=-0.447 1.978 3.28 6.16 7.08 7

5、.34 7.66 9.56 9.48 9.30 11.2;R=(x.2)x ones(11,1);A=Ry,MATLAB(zxec1),解法1用解超定方程的方法,2)计算结果:=-9.8108 20.1293-0.0317,1)输入以下命令:x=0:0.1:1;y=-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2;A=polyfit(x,y,2)z=polyval(A,x);plot(x,y,k+,x,z,r)%作出数据点和拟合曲线的图形,2)计算结果:=-9.8108 20.1293-0.0317,解法2用多项式拟合的命令,M

6、ATLAB(zxec2),1.lsqcurvefit已知数据点:xdata=(xdata1,xdata2,xdatan),ydata=(ydata1,ydata2,ydatan),用MATLAB作非线性最小二乘拟合,Matlab的提供了两个求非线性最小二乘拟合的函数:lsqcurvefit和lsqnonlin。两个命令都要先建立M-文件fun.m,在其中定义函数f(x),但两者定义f(x)的方式是不同的,可参考例题.,lsqcurvefit用以求含参量x(向量)的向量值函数F(x,xdata)=(F(x,xdata1),F(x,xdatan)T中的参变量x(向量),使得,输入格式为:(1)x=

7、lsqcurvefit(fun,x0,xdata,ydata);(2)x=lsqcurvefit(fun,x0,xdata,ydata,options);(3)x=lsqcurvefit(fun,x0,xdata,ydata,options,grad);(4)x,options=lsqcurvefit(fun,x0,xdata,ydata,);(5)x,options,funval=lsqcurvefit(fun,x0,xdata,ydata,);(6)x,options,funval,Jacob=lsqcurvefit(fun,x0,xdata,ydata,);,说明:x=lsqcurvef

8、it(fun,x0,xdata,ydata,options);,lsqnonlin用以求含参量x(向量)的向量值函数 f(x)=(f1(x),f2(x),fn(x)T 中的参量x,使得 最小。其中 fi(x)=f(x,xdatai,ydatai)=F(x,xdatai)-ydatai,2.lsqnonlin,已知数据点:xdata=(xdata1,xdata2,xdatan)ydata=(ydata1,ydata2,ydatan),输入格式为:1)x=lsqnonlin(fun,x0);2)x=lsqnonlin(fun,x0,options);3)x=lsqnonlin(fun,x0,opt

9、ions,grad);4)x,options=lsqnonlin(fun,x0,);5)x,options,funval=lsqnonlin(fun,x0,);,说明:x=lsqnonlin(fun,x0,options);,例2 用下面一组数据拟合 中的参数a,b,k,该问题即解最优化问题:,MATLAB(fzxec1),1)编写M-文件 curvefun1.m function f=curvefun1(x,tdata)f=x(1)+x(2)*exp(-0.02*x(3)*tdata)%其中 x(1)=a;x(2)=b;x(3)=k;,2)输入命令tdata=100:100:1000cdat

10、a=1e-03*4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59;x0=0.2,0.05,0.05;x=lsqcurvefit(curvefun1,x0,tdata,cdata)f=curvefun1(x,tdata),F(x,tdata)=,x=(a,b,k),解法1.用命令lsqcurvefit,3)运算结果为:f=0.0043 0.0051 0.0056 0.0059 0.0061 0.0062 0.0062 0.0063 0.0063 0.0063 x=0.0063-0.0034 0.2542,4)结论:a=0.0063,b=-0.00

11、34,k=0.2542,MATLAB(fzxec2),解法 2 用命令lsqnonlin f(x)=F(x,tdata,ctada)=x=(a,b,k),1)编写M-文件 curvefun2.m function f=curvefun2(x)tdata=100:100:1000;cdata=1e-03*4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59;f=x(1)+x(2)*exp(-0.02*x(3)*tdata)-cdata,2)输入命令:x0=0.2,0.05,0.05;x=lsqnonlin(curvefun2,x0)f=curvefu

12、n2(x),函数curvefun2的自变量是x,cdata和tdata是已知参数,故应将cdata tdata的值写在curvefun2.m中,3)运算结果为 f=1.0e-003*(0.2322-0.1243-0.2495-0.2413-0.1668-0.0724 0.0241 0.1159 0.2030 0.2792 x=0.0063-0.0034 0.2542,可以看出,两个命令的计算结果是相同的.,4)结论:即拟合得a=0.0063 b=-0.0034 k=0.2542,MATLAB解应用问题实例,1、电阻问题,2、给药方案问题,*3、水塔流量估计问题,MATLAB(dianzu1),

13、电阻问题,得到 a1=3.3940,a2=702.4918,方法2.直接用,结果相同。,MATLAB(dianzu2),一室模型:将整个机体看作一个房室,称中心室,室内血药浓度是均匀的。快速静脉注射后,浓度立即上升;然后迅速下降。当浓度太低时,达不到预期的治疗效果;当浓度太高,又可能导致药物中毒或副作用太强。临床上,每种药物有一个最小有效浓度c1和一个最大有效浓度c2。设计给药方案时,要使血药浓度 保持在c1c2之间。本题设c1=10,c2=25(ug/ml).,一种新药用于临床之前,必须设计给药方案.,药物进入机体后血液输送到全身,在这个过程中不断地被吸收、分布、代谢,最终排出体外,药物在血

14、液中的浓度,即单位体积血液中的药物含量,称为血药浓度。,要设计给药方案,必须知道给药后血药浓度随时间变化的规律。从实验和理论两方面着手:,给药方案,1.在快速静脉注射的给药方式下,研究血药浓度(单位体积血液中的药物含量)的变化规律。,t,问题,2.给定药物的最小有效浓度和最大治疗浓度,设计给药方案:每次注射剂量多大;间隔时间多长。,分析,理论:用一室模型研究血药浓度变化规律,实验:对血药浓度数据作拟合,符合负指数变化规律,3.血液容积v,t=0注射剂量d,血药浓度立即为d/v.,2.药物排除速率与血药浓度成正比,比例系数 k(0),模型假设,1.机体看作一个房室,室内血药浓度均匀一室模型,模型

15、建立,在此,d=300mg,t及c(t)在某些点处的值见前表,需经拟合求出参数k、v,用线性最小二乘拟合c(t),MATLAB(lihe1),计算结果:,用非线性最小二乘拟合c(t),给药方案 设计,设每次注射剂量D,间隔时间,血药浓度c(t)应c1 c(t)c2,初次剂量D0 应加大,给药方案记为:,2、,1、,计算结果:,给药方案:,c1=10,c2=25k=0.2347v=15.02,故可制定给药方案:,即:首次注射375mg,其余每次注射225mg,注射的间隔时间为4小时。,估计水塔的流量,2、解题思路,3、算法设计与编程,1、问题,某居民区有一供居民用水的园柱形水塔,一般可以通过测量

16、其水位来估计水的流量,但面临的困难是,当水塔水位下降到设定的最低水位时,水泵自动启动向水塔供水,到设定的最高水位时停止供水,这段时间无法测量水塔的水位和水泵的供水量通常水泵每天供水一两次,每次约两小时.水塔是一个高12.2米,直径17.4米的正园柱按照设计,水塔水位降至约8.2米时,水泵自动启动,水位升到约10.8米时水泵停止工作表1 是某一天的水位测量记录,试估计任何时刻(包括水泵正供水时)从水塔流出的水流量,及一天的总用水量,流量估计的解题思路,拟合水位时间函数,确定流量时间函数,估计一天总用水量,拟合水位时间函数 测量记录看,一天有两个供水时段(以下称第1供水时段和第2供水时段),和3个

17、水泵不工作时段(以下称第1时段t=0到t=8.97,第2次时段t=10.95到t=20.84和第3时段t=23以后)对第1、2时段的测量数据直接分别作多项式拟合,得到水位函数为使拟合曲线比较光滑,多项式次数不要太高,一般在36由于第3时段只有3个测量记录,无法对这一时段的水位作出较好的拟合,2、确定流量时间函数 对于第1、2时段只需将水位函数求导数即可,对于两个供水时段的流量,则用供水时段前后(水泵不工作时段)的流量拟合得到,并且将拟合得到的第2供水时段流量外推,将第3时段流量包含在第2供水时段内,3、一天总用水量的估计 总用水量等于两个水泵不工作时段和两个供水时段用水量之和,它们都可以由流量

18、对时间的积分得到。,算法设计与编程,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输出3次多项式的系数2)a1=polyder(c1);%a1输出多项式(系数为c1)导数的系数 3)tp1=0:0.1:9;x1=-polyval(a1,tp1);%x1输出多项式(系数为a1)在tp1点的函数值(取负后

19、边为正值),即tp1时刻的流量,MATLAB(llgj1),4)流量函数为:,2、拟合第2时段的水位,并导出流量 设t,h为已输入的时刻和水位测量记录(水泵启动的4个时刻不输入),第2时段各时刻的流量可如下得:1)c2=polyfit(t(10.9:21),h(10.9:21),3);%用3次多项式拟合第2时段水位,c2输出3次多项式的系数2)a2=polyder(c2);%a2输出多项式(系数为c2)导数的系数 3)tp2=10.9:0.1:21;x2=-polyval(a2,tp2);%x2输出多项式(系数为a2)在tp2点的函数值(取负后边为正值),即tp2时刻的流量,MATLAB(ll

20、gj2),4)流量函数为:,3、拟合供水时段的流量 在第1供水时段(t=911)之前(即第1时段)和之后(即第2时段)各取几点,其流量已经得到,用它们拟合第1供水时段的流量为使流量函数在t=9和t=11连续,我们简单地只取4个点,拟合3次多项式(即曲线必过这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,t

21、p12);%x12输出第1供水时段 各时刻的流量,MATLAB(llgj3),拟合的流量函数为:,在第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);xx3=-polyval(a2,t3(1:2),dht3);%取t3各时刻的流量 c3=polyfit(t3,

22、xx3,3);%拟合3次多项式 t3=20.8:0.1:24;x3=polyval(c3,tp3);%x3输出第2供水时段(外推至t=24)各时刻的流量,MATLAB(llgj4),拟合的流量函数为:,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);

23、%第2供水时段用水量 y=(y1+y2+y12+y3)*237.8*0.01;%一天总用水量()计算结果:y1=146.2,y2=266.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时段水泵

24、的功率可计算如下:p1=(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供水时段水泵的功率(水量仍以高度计)计算结果:p1=154.5,p2=140.1,MATLAB(ll),计算结果,流量函数为:,流量曲线见图,n=(3,4),n=(5,6),用非线性最小二乘拟合c(t)-用lsqcurvefit,2、主程序lihe2.m如下cleartdata=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=300f=(x(1)d)*exp(-x(2)*tdata)%x(1)=v;x(2)=k,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号