资源预览内容
第1页 / 共107页
第2页 / 共107页
第3页 / 共107页
第4页 / 共107页
第5页 / 共107页
第6页 / 共107页
第7页 / 共107页
第8页 / 共107页
第9页 / 共107页
第10页 / 共107页
亲,该文档总共107页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
钮海,Excel与Matlab数据传递,位于matlabtoolboxexlink目录下,前言,内容: 一维问题高维问题,前言,层次: 插值与拟合理论 Matlab实现 应用实例,前言,问题,测试数据,理论研究,分类,一个自变量一维问题多个自变量多维问题,方法,1.测试数据为精确数据或者误差可以忽略 方法:插值法2.测试数据含误差,必须考虑误差 方法:拟合法或回归,一维问题,插值,一维问题-插值,x,y,y1,y2,y3,y4,x1,x2,x3,x4,x,y?,一维问题-插值,插值:,要求:对任意自变量x1xxn,求x对应的y值,一维问题-插值,首要问题: f的选取?,一维问题-插值,求解:,yif(xi),i1n,一维问题-插值,解:,一维问题-插值,模型分析:Runge现象 测试点越多,多项式次数越高,失真,一维问题-插值,失真解决办法:每次采取数据点比较少如2个;4个 问题:原先大量数据? 方法:分组(每组2个;4个递进进行),一维问题-插值,再处理!(光滑),可导,要求:(见后注)1.插值函数f(分段函数)在整个x1,xn具有二阶连续导数;2.在每个小区间xi-1,xi是三次多项式,新问题不够完美,光滑?,一维问题-插值,数学模型:,yif(xi),i1n,f(x),f (x),f (x)在xi连续,i2n-1,进一步表示(省略),求解:省略,一维问题-插值,后注:取自工程中利用弹性竹条(样条)进行插值的方法,因此该插值称为样条spline插值方法,实现,编程?Matlab实现:插值函数(程序) 插值=interp1(自变量数据,因变量试数据,插值点,方法),方法:1.省却linear分段线性 2.cubic分段三次3.spline样条,实验问题,分别用分段线性、分段三次、样条插值与原函数比较,实验脚本文件,%各类一维分段插值比较脚本文件(文件名cz.m) x=linspace(-5,5,9);%原始自变量 y=1./(1+x.2);%原始因变量 x_o=linspace(-5,5,50); y_o=1./(1+x_o.2);%原始函数 x_in_l=linspace(-5,5,50); y_in_l=interp1(x,y,x_in_l);%线性插值函数 subplot(3,1,1)%子图 plot(x_o,y_o,x_in_l,y_in_l) title(linear) x_in_c=x_in_l; y_in_c=interp1(x,y,x_in_c,cubic);%三次插值函数 subplot(3,1,2) plot(x_o,y_o,x_in_c,y_in_c) title(cubic) x_in_s=x_in_l; y_in_s=interp1(x,y,x_in_s,spline);%样条插值函数 subplot(3,1,3) plot(x_o,y_o,x_in_s,y_in_s) title(spline),实验运行,在matlab工作区输入cz,插值方法选择,插值函数 插值=interp1(自变量数据,因变量试数据,插值点,方法),方法:1.省却linear分段线性 2.cubic分段三次3.spline样条,建模实例,估计水塔的水流量(AMCM92A) 美国某州的各用水管理机构要求各社区提供以每小时多少加仑计的用水率以及每天所用的总水量。但许多社区并没有测量流入或流出当地水塔的水量的设备,他们只能代之以每小时测量水塔中的水位,其精度在5%以内。更为重要的是,无论什么时候,只要水塔中的水位下降到某一最低水位L时,水泵就启动向水塔重新充水直至某一最高水位H,但也无法得到水泵的供水量的测量数据。因此,在水泵正在工作时,人们不容易建立水塔中的水位与水泵工作时的用水量之间的关系。水泵每天向水塔充水两次,每次约二小时。 试估计在任何时刻,甚至包括水泵正在工作的时间内,水从水塔流出的流量f (t),并估计一天的总用水量和水泵的工作功率。表1给出了某个真实小镇某一天的真实数据。,建模实例,表1 某小镇某天的水塔水位,建模实例,表1给出了从第一次测量开始的以秒为单位的时刻,以及该时刻的高度单位为百分之一英尺的水塔中水位的测量值,例如,3316秒后,水塔中的水位达到31.10英尺。水塔是一个垂直圆形柱体,高为40英尺,直径为57英尺。通常当水塔的水位降至约27.00英尺时水泵开始向水塔充水,而当水塔的水位生至约35.50英尺时水泵停止工作。,建模实例,t0=0,3316,6635,10619,13937,17921,21240,25223,28543,32284,39435,43318,46636,49953,. 53936,57254,60574,64554,68535,71854,75021,85968,89953,93270; L0=3175,3110,3054,2994,2947,2892,2850,2797,2752,2697,3550,3445,3350,3260,3167,3087,.3012,2927,2842,2767,2697,3475,3397,3340; t=linspace(0,86400,200); L=interp1(t0,L0,t,clubic); plot(t0,L0,*,t,L),建模实例,一维问题,拟合,一维问题-拟合,x,y,y1,y2,y3,y4,x1,x2,x3,x4,?,一维问题-拟合,拟合:,多项式系数,一维问题-拟合,x,y,y1,y2,y3,y4,x1,x2,x3,x4,一维问题-拟合,首要问题: f的选取?,误差:,1.单点误差:Ciyif(xi,t),i1n 2.总体误差: 或 等,最小二乘法,求解: 二次无约束规划问题(多元函数极值),一维问题-拟合,理论上:找驻点,实现多项式拟合,编程?Matlab实现:1.多项式拟合(程序) 拟合多项式系数向量(高低)= polyfit(自变量数据,因变量试数据,拟合多项式次数),拟合多项式次数1,线性拟合(回归),实验问题,用多项式拟合,实验上机观察,t = 0,.3,.8 ,1.1,1.6 ,2.3; y = 0.5,0.82,1.14,1.25,1.35,1.40; plot(t,y,o) grid on,二次,实验分析,多项式回归 由图可以看出应该可以用二次多项式来表达:y=a2*t2+a1*t +a0,实验操作,apolyfit(t,y,2) a -0.2387 0.9191 0.5318,tf=linspace(0,2.3,50); yf=polyval(a,x); plot(t,y,o,tf,yf) grid on,实验操作,结果令人失望,但我们可以增加阶数来提高精确度,但更明智的选择是用别的方法,实验改进,用指数关系表达: y=a0+a1*exp(-t)+a2*exp(-t)2,实验操作,xexp(-t); a polyfit(x,y,2) a0.4097 0.8988 1.3974,tf=linspace(0,2.3,50); yf=polyval(a,x); plot(t,y,o,tf,yf) grid on,实验操作,看起来是不是好多了,实验,例:美国人口数据(单位1.0e+06 ),用多项式拟合,实验,p = polyfit(cdate,pop,4) Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 5.429790e20 p = 1.0e+05 * 0.0000 0.0000 0.0000 0.0126 6.0020,实验,产生警告的原因是计算中的cdata值太大,在计算中的Vandermonde行列式使变换产生了问题,解决的方法之一是使数据标准化 标准化方法:data-Mean (data)/Std(data),实验,数据的标准化是对数据进行缩放,以使以后的计算能更加精确,一种方法是使之成为0均值: matlab实现方法: sdate = (cdate mean(cdate)./std(cdate),实验,p = polyfit(sdate,pop,4) p = 0.7047 0.9210 23.4706 73.8598 62.2285 pop4 = polyval(p,sdate); plot(cdate,pop4,cdate,pop,+), grid on,实验,实现曲线拟合,Matlab实现:1.最小二乘拟合程序 参数=lsqnonlin(误差函数, 参数估计值),误差函数文件,function c=myfun(参数) 自变量数据=x1,xn; 因变量数据=y1,yn; c=f(自变量数据,参数)-因变量数据;,拟合函数数学表达式(向量形式),建模实例,求血药浓度随时间的变化规律c(t).,建模实例,解:,由机理,微分方程,其中,c0,k为待定参数,建模实例,求解: 1.建立误差函数文件:文件名为nd_f.m,function wc=nd_f(x) t=0.25 0.5 1 1.5 2 3 4 6 8; c=19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01; wc= x(1)*exp(-x(2)*t)c;,其中: c0 x(1), k x(2);拟合函数为,建模实例,2.在工作区输入: x=lsqnonlin(nd_f, 1,1) x=20.2413 0.2420,即,建模实例,3.在工作区输入: t=0.25 0.5 1 1.5 2 3 4 6 8; c=19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01; tf=linspace(0,10,50); cf=x(1)*exp(-x(2)*tf); plot(t,c,o,tf,cf),建模实例,实现曲线拟合,Matlab实现:2.曲线拟合程序 参数=lsqcurvefit(拟合函数, 参数估计值,自变量数据,因变量数据),拟合函数文件,function y=myfun(参数,自变量) y=f(自变量,参数);,拟合函数数学表达式(向量形式),建模实例,求解: 1.建立误差函数文件:文件名为nd1_f.m,function c=nd1_f(x,t) c= x(1)*exp(-x(2)*t);,其中: c0 x(1), k x(2);拟合函数为,建模实例,在工作区输入: t=0.25 0.5 1 1.5 2 3 4 6 8; c=19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01; x= lsqcurvefit(nd1_f,1,1,t,c) x=20.2413 0.2420,拟合好坏的依据,在由经验估计的拟合函数中 估计拟合函数好坏的评判标准有: 1.比较总体误差大小 总体误差越小越好 2.观察误差余量分析 理想的误差应该是随机的,实验,例:美国人口数据(单位1.0e+06 ),用多项式拟合,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号