连续建模和最优化专题PPT学习教案_第1页
连续建模和最优化专题PPT学习教案_第2页
连续建模和最优化专题PPT学习教案_第3页
连续建模和最优化专题PPT学习教案_第4页
连续建模和最优化专题PPT学习教案_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、会计学1连续建模和最优化专题连续建模和最优化专题掌握常见的连续知识点和连续建模技术;掌握数据插值和拟合的思想和方法;掌握最优化方法及模型求解决技巧;掌握数学软件(matlab)中关于连续题型求解方法和编程技巧;掌握数学软件(matlab)中关于优化化问题的求解方法和编程技巧。第1页/共65页第2页/共65页在工程实践与科学实验中,常常需要从一组试验数据之中找到自变量与因变量之间的关系,一般可用一个近似函数表示。函数产生的办法因观测数据的要求不同而异,数据插值与拟合是两种常用的方法。 MATLAB中的插值函数 拉格朗日插值法 利用均差的牛顿插值法 利用差分的牛顿插值法 Hermite插值 多项式

2、曲线拟合最小二乘拟合第3页/共65页2.1 MATLAB中一维插值有多种算法,由interp1函数中的method指定。 MATLAB中一维插值的各种算法如表所示。第4页/共65页分段线性插值临近插值球面插值三次多项式插值x=0:2*pi;y=sin(x);x1=0:0.5:2*pi;y1=interp1(x,y,x1);plot(x,y,o,x1,y1) x=0:2*pi;y=sin(x);x1=0:0.5:2*pi;y1=interp1(x,y,x1,nearest);plot(x,y,o,x1,y1) x=0:2*pi;y=sin(x);x1=0:0.5:2*pi;y1=interp1(

3、x,y,x1,spline);plot(x,y,o,x1,y1) x=0:2*pi;y=sin(x);x1=0:0.5:2*pi;y1=interp1(x,y,x1,cubic);plot(x,y,o,x1,y1) 第5页/共65页分段线性插值临近插值球面插值三次多项式插值第6页/共65页在MATLAB中编程实现拉格朗日插值法函数为:Language。功能:求已知数据点的拉格朗日多项式;调用格式:f= Language(x,y)或f= Language(x,y,x0)。 其中,x为已知数据点的x 坐标向量;y为已知数据点的y 坐标向量;x0为插值点的x坐标;f为求得的拉格朗日多项式或x0处的插

4、值。 function f = Language(x,y,x0)%求已知数据点的拉格朗日多项式%已知数据点的x 坐标向量:x%已知数据点的y 坐标向量:y%为插值点的x坐标:x0%求得的拉格朗日多项式或x0处的插值:fsyms t;if(length(x) = length(y) n = length(x); else disp(x和y的维数不相等!); return;end %检错f = 0.0;for(i = 1:n) l = y(i); for(j = 1:i-1) l = l*(t-x(j)/(x(i)-x(j); end; for(j = i+1:n) l = l*(t-x(j)/(

5、x(i)-x(j); %计算拉格朗日基函数 end; f = f + l; %计算拉格朗日插值函数 simplify(f); %化简 if(i=n) if(nargin = 3) f = subs(f,t,x0); %计算插值点的函数值 else f = collect(f); %将插值多项式展开 f = vpa(f,6); %将插值多项式的系数化成6位精度的小数 end endend第7页/共65页根据下表的数据点求出其拉格朗日插值多项式,并计算当x=1.6时y的值。解: x=1 1.2 1.8 2.5 4; y=0.8415 0.9320 0.9738 0.5985 -0.7568; f=

6、language(x,y)f = 1.05427*t-.145485e-1*t2-.204917*t3+.328112e-1*t4-.261189e-1 f=language(x,y,1.6)f = 0.9992第8页/共65页)(0 xf)(1xf)(2xf)(3xf)(nxf,10 xxf,20 xxf,30 xxf,0nxxf,210 xxxf,310 xxxf,10nxxxf,3210 xxxxf,210nxxxxf,10nxxxf第9页/共65页在MATLAB中编程实现利用均差牛顿插值法函数为:Newton。功能:求已知数据点的均差形式的牛顿插值多项式;调用格式:f= Newton(

7、x,y)或f= Newton(x,y,x0)。其中,x为已知数据点的x 坐标向量;y为已知数据点的y 坐标向量;x0为插值点的x坐标;f为求得的牛顿插值法多项式或x0处的插值。function f = Newton(x,y,x0)%求已知数据点的均差形式牛顿插值多项式%已知数据点的x 坐标向量:x%已知数据点的y 坐标向量:y%为插值点的x坐标:x0%求得的均差形式牛顿插值多项式或x0处的插值:fsyms t;if(length(x) = length(y) n = length(x); c(1:n) = 0.0;else disp(x和y的维数不相等!); return;endf = y(1

8、);y1 = 0;l = 1; for(i=1:n-1) for(j=i+1:n) y1(j) = (y(j)-y(i)/(x(j)-x(i); end c(i) = y1(i+1); l = l*(t-x(i); f = f + c(i)*l; simplify(f); y = y1; if(i=n-1) if(nargin = 3) f = subs(f,t,x0); else f = collect(f); %将插值多项式展开 f = vpa(f, 6); end endend第10页/共65页解: x=1 1.2 1.8 2.5 4; y=1 1.44 3.24 6.25 16; f=

9、Newton(x,y)f = .182711e-14-.482154e-14*t+1.00000*t2-.169177e-14*t3+.211471e-15*t4 f=Newton(x,y,2.0)f = 4根据下表的数据点求出其均差形式牛顿插值多项式,并计算当x=2.0时y的值。第11页/共65页差分分为向前差分、后向差分和中心差分三种在MATLAB中编程实现向前牛顿插值法函数为:Newtonforward。功能:求已知数据点的向前牛顿插值法多项式;调用格式:f= Newtonforward(x,y)或f= Newtonforward (x,y,x0)。 其中,x为已知数据点的x 坐标向量;

10、y为已知数据点的y 坐标向量;x0为插值点的x坐标;f为求得的向前牛顿插值法多项式或x0处的插值。function f = Newtonforward(x,y,x0)%求已知数据点的向前差分牛顿插值多项式%已知数据点的x 坐标向量:x%已知数据点的y 坐标向量:y%为插值点的x坐标:x0%求得的向前差分牛顿插值多项式或x0处的插值:fsyms t;if(length(x) = length(y) n = length(x); c(1:n) = 0.0;else disp(x和y的维数不相等!); return;endf = y(1);y1 = 0;xx =linspace(x(1),x(n),

11、(x(2)-x(1);if(xx = x) disp(节点之间不是等距的!); return;endfor(i=1:n-1) for(j=1:n-i) y1(j) = y(j+1)-y(j); end c(i) = y1(1); l = t; for(k=1:i-1) l = l*(t-k); end; f = f + c(i)*l/factorial(i); simplify(f); y = y1; if(i=n-1) if(nargin = 3) f = subs(f,t,(x0-x(1)/(x(2)-x(1); else f = collect(f); f = vpa(f, 6); en

12、d endend第12页/共65页在MATLAB中编程实现向后牛顿插值法函数为:Newtonback。功能:求已知数据点的向前牛顿插值法多项式;调用格式:f= Newtonback (x,y)或 f = Newtonback (x,y,x0)。 其中,x为已知数据点的x 坐标向量; y为已知数据点的y 坐标向量; x0为插值点的x坐标; f为求得的向前牛顿插值法多项式或x0处的插值。function f = Newtonback(x,y,x0)%求已知数据点的向后差分牛顿插值多项式%已知数据点的x 坐标向量:x%已知数据点的y 坐标向量:y%为插值点的x坐标:x0%求得的向前差分牛顿插值多项式

13、或x0处的插值:fsyms t;if(length(x) = length(y) n = length(x); c(1:n) = 0.0;else disp(x和y的维数不相等!); return;endf = y(n);y1 = 0;xx =linspace(x(1),x(n),(x(2)-x(1);if(xx = x) disp(节点之间不是等距的!); return;endfor(i=1:n-1) for(j=i+1:n) y1(j) = y(j)-y(j-1); end c(i) = y1(n); l = t; for(k=1:i-1) l = l*(t+k); end; f = f

14、+ c(i)*l/factorial(i); simplify(f); y = y1;if(i=n-1) if(nargin = 3) f = subs(f,t,(x0-x(n)/(x(2)-x(1); else f = collect(f); f = vpa(f, 6); end endend第13页/共65页根据下表的数据点求出其差分形式的牛顿插值多项式,并计算当x=1.55时y的值。根据下表的数据点求出其差分形式的牛顿插值多项式,并计算当x=1.55时y的值。解: x=1 1.2 1.4 1.6 1.8 ; y=0.8415 0.93200.9854 0.9996 0.9738; f=N

15、ewtonforward(x,y) f = .841500+.108025*t-.169042e-1*t2-.675000e-3*t3+.541667e-4*t4 f=Newtonforward(x,y,1.55)f = 0.9998f=Newtonback(x,y) f =.973800-.457417e-1*t-.198042e-1*t2+.191667e-3*t3+.541667e-4*t4 f=Newtonback(x,y,1.55)f =0.9998第14页/共65页在在MATLABMATLAB中编程实现中编程实现HermiteHermite插值法插值法函数为:函数为: Hermit

16、eHermite。功能:求已知数据点的功能:求已知数据点的HermiteHermite插值法多项式;插值法多项式;调用格式:调用格式:f=f= HermiteHermite (x,y,y_1)(x,y,y_1)或或 f =f = HermiteHermite ( (x,yx,y, y_1,x0), y_1,x0)。 其中,其中,x x为已知数据点的为已知数据点的x x 坐标向量;坐标向量; y y为已知数据点的为已知数据点的y y 坐标向量;坐标向量; y_1y_1为已知数据点导数向量;为已知数据点导数向量; x0 x0为插值点的为插值点的x x坐标;坐标; f f为求得的为求得的Hermit

17、eHermite插值法多项式或插值法多项式或x0 x0处的插值。处的插值。function f = Hermite(x,y,y_1,x0)%求已知数据点的向后差分牛顿插值多项式%已知数据点的x 坐标向量:x%已知数据点的y 坐标向量:y%已知数据点的导数向量:y_1%求得的Hermite插值多项式或x0处的插值:fsyms t;f = 0.0;if(length(x) = length(y) if(length(y) = length(y_1) n = length(x); else disp(y和y的导数的维数不相等!); return; endelse disp(x和y的维数不相等!);

18、return;endfor i=1:n h = 1.0; a = 0.0; for j=1:n if( j = i) h = h*(t-x(j)2/(x(i)-x(j)2); a = a + 1/(x(i)-x(j); end end f = f + h*(x(i)-t)*(2*a*y(i)-y_1(i)+y(i); if(i=n) if(nargin = 4) f = subs(f,t,x0); else f = vpa(f,6); end endend第15页/共65页根据下表的数据点求出其Hermite插值多项式,并计算当x=1.144时y的值。解: x=1:0.2:1.8; y=1 1

19、.0954 1.1832 1.2649 1.3416; y_1=0.5 0.4564 0.4226 0.3953 0.3727; f=Hermite(x,y,y_1) f = 678.168*(t-1.20000)2*(t-1.40000)2*(t-1.60000)2*(t-1.80000)2*(-20.3333+21.3333*t)+10850.7*(t-1.)2*(t-1.40000)2*(t-1.60000)2*(t-1.80000)2*(-10.4063+9.58473*t)+24414.1*(t-1.)2*(t-1.20000)2*(t-1.60000)2*(t-1.80000)2*

20、(.591560+.422600*t)+10850.7*(t-1.)2*(t-1.20000)2*(t-1.40000)2*(t-1.80000)2*(17.4978-10.1455*t)+678.168*(t-1.)2*(t-1.20000)2*(t-1.40000)2*(t-1.60000)2*(50.9807-27.5773*t) f=Hermite(x,y,y_1,1.44)f = 1.2000第16页/共65页在MATLAB中编程实现多项式曲线拟合函数为: multifit。功能:求已知数据点的多项式曲线拟合插值法多项式;调用格式:A= multifit (x,y,m) 。 其中,x

21、为已知数据点的x 坐标向量; y为已知数据点的y 坐标向量; m为拟合多项式的次数; A为拟合多项式的系数向量。function A=multifit(X,Y,m)%离散数据点的多项式曲线拟合%试验数据点x坐标向量:x%试验数据点y坐标向量:y%拟合多项式的次数:m%A-输出的拟合多项式的系数N=length(X);M=length(Y);if(N = M) disp(数据点坐标不匹配!); return;endc(1:(2*m+1)=0;b(1:(m+1)=0;for j=1:(2*m+1) %求出c和b for k=1:N c(j)=c(j)+X(k)(j-1); if(j x=1:3;

22、y=2 5 10; A=multifit(x,y,2)A = 0.1282 0.3235 0.8718即拟合的多项式为p= 0.1282 + 0.3235 x + 0.8718 x2。第18页/共65页最小二乘法拟合在科学实验的统计方法中经常使用。它的具体操作过程是从一组实验数据(xi,yi)中拟合出函数关系y=f(x),拟合的标准是使(f(xi)-yi)的平方取极小值。在MATLAB中可以使用polyfit函数对数据进行最小二乘法拟合,它的基本调用格式为: p= polyfit(X,Y,N) 表示用N次多项式拟合数据点(xi,yi)。解:x=1:0.2:1.8; y=1 1.09541.18

23、321.26491.3416; p=polyfit(x,y,4)p = -0.0104 0.0854 -0.3121 0.9086 0.3285即拟合的多项式为p= -0.0104 + 0.0854x -0.3121x2+ 0.9086 x3+ 0.3285x4。用四次多项式拟合下表中所列的数据点:第19页/共65页第20页/共65页常见的几种最优化方法1、梯度下降法是最早最简单,也是最为常用的最优化方法。梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解。一般情况下,其解不保证是全局最优解,梯度下降法的速度也未必是最快的。梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,

24、因为该方向为当前位置的最快下降方向,所以也被称为是“最速下降法”。最速下降法越接近目标值,步长越小,前进越慢。梯度下降法的缺点:(1)靠近极小值时收敛速度减慢,如下图所示;(2)直线搜索时可能会产生一些问题;(3)可能会“之字形”地下降。第21页/共65页njjjxh0)(mixhyJiim12)()(21第22页/共65页第23页/共65页法大大优于最速下降法,尤其对于困难的问题。另外,因为拟牛顿法不需要二阶导数的信息,所以有时比牛顿法更为有效。如今,优化软件中包含了大量的拟牛顿算法用来解决无约束,约束,和大规模的优化问题。具体步骤:拟牛顿法的基本思想如下。首先构造目标函数在当前迭代xk的二

25、次模型:第24页/共65页我们尽可能地利用上一步的信息来选取Bk。具体地,我们要求从而得到这个公式被称为割线方程。常用的拟牛顿法有DFP算法和BFGS算法。第25页/共65页第26页/共65页MATLAB求解及编程技巧1 1、优化工具箱及最优化问题介绍、优化工具箱及最优化问题介绍1.11.1优化工具箱常用函数优化工具箱常用函数(1)Optimset函数:创建和编辑参数结构,其用法如下: options = optimset(param1,value1, param2,value2. )的作用是创建一个名为options的优化选项参数,其中指定的参数具有指定值。所有未指定的参数都设置为空矩阵(将

26、参数设置为表示当options传递给优化函数时给参数赋默认值)。赋值时只要输入参数前面的字母就可以了。 optimset函数没有输入/输出变量时,将显示一张完整的带有有效值的参数列表。 options = optimset的作用是创建一个选项结构options, 其中所有的元素被设置为 options = optimset(optimfun)的 作用是创建一个含有所有参数名和与优化函数optimfun相关的带有默认值的选项结构options. options = optimset(oldoptsparam1,value1.)的作用是创建一- 个oldopts的备份,用指定的数值修改参数。 op

27、tions = optimset(oldopts,newopts) 的作用是将已经存在的选项结构oldopts与新的选项结构newopts进行合并。newopts 参数中的所有元素将覆盖oldopts参数中的所有对应元素。第27页/共65页(2)Optimget函数:获得options优化参数,其用法如下 val = optimget(options,param):返回指定的参数param的值。 val = optimget(options,param,default);:返回指定的参数param的值,如果该值没有定义则返回默认值。第28页/共65页1、最优化问题求解单变量最优化问题根据目标函数是否需要求导分为直接法和间接法,直接法不需要对目标函数求导,间接法需要。下面介绍有关函数:fminbnd:找到固定区间内单变量函数的最小值。其语法与描述如下:x = fminbnd(fun,x1,x2):返回区间(xl,x2)上fun参数描述的标量函数的最小值x。Fun参数可以是一个包含函数名的字符串,对应的函数可以是M文件,内部函数或MEX文件,例如:若fun=myfun,则M文件函数myfun必须是以下格式:function f=myfun(x) f=x = fiminbnd(fun,x1,x2,options):用options 参数指

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论