数学建模算法全收录

所需积分/C币:27 2018-07-13 22:57:35 44.87MB PDF
30
收藏 收藏
举报

数学建模升级版算法讲解加matlab程序代码分享 包含插值与拟合、马氏链、变分法、神经网络、目标规划、模糊数学、差分方程和统计分析等算法
N(x)=f(xo)+(x-xo)fTxo,x,]+ +(x-x0)(x-x1)…(x-xn-1)f[x Rn(x)=(x-x0)(x-x1)…(x-xn)[x,x,1,…,xn] n+1(x)f[x,x:x1,…,x] 显然,Nn(x)是至多n次的多项式,且淓是插值条件,因而它是f(x)的n次插值 多项式。这种形式的插值多项式称为 Newton插值多项式。R(x)称为 Newton插值余 项 Newton插值的优点是:每增加一个节点,插值多项式只增加一项,即 Nn+1(x)=Nn(x)+(x-x0)…(x-xn)[ 19,x 因而便』递推运算。而且 Newton插值的计算量小」 Lagrange插值。 由插值多项式的唯一性可知, Newton插值余项与 Lagrange余项也是相等的,即 Rn(x)=On+1(x)f[Lx,x0,x1,…x] f(+)(5) (n+ 1)! 由此可得差商与导数的关系 几x,x…,x]=(5 ! 其中5∈(a,),=min{x},B=max{x;}。 0≤i≤H ≤:≤P 23差分 当节点等距时,即相邻两个节点之差(称为步长)为常数, Newton插值公式的形 式会更简单。此时关于节点间函数的平均变化率(差商)可用函数值之差(差分)来茯 定义设有等距节点x=x0+h(=O,1,…,n),步长h为常数,f-f(x2)。 称相邻两个节点x,x+1处的函数值的增量f+1-f(k=0,,…,n-1为函数f(x)在 点x4处以h为步长的一阶差分,记为A2,即 y=fk1-f(k=01,…,n) 类似地,定义差分的差分为高阶差分。如二阶差分为 △f=△/4+1-M(k=0.1 般地,m阶差分为 △"f=△″f1-△″(k=2,3…), 上面定义的各阶差分又称为向前差分。管用的差分还有两种: Vfr=f-fi 称为f(x)在x处以h为步长的向后差分 h h 称为f(x)在x处以h为步长的中心差分。一般地,m阶向后差分与m阶中心差分公 式为 V f=Vf -V/ fr=8f 差分具有以下性质: (i)各阶差分均可表成数值的线性组合,例如 72 △"f=∑(1)f (i)各种差分之间可以互化。向后差分与中心差分化成向前差分的公式如下 V"/k=△"/k &fK 1.24等距节点插值公式 如果插值节点是等距的,则插恒公式可用差分表示。设已知节点 xk=x0+h(h=01,2,…,n),则有 (x)=f(x0)+f[xa,x1](x-x1) ](-L0)(x-A1)…( A ∫0+0(x-x0) h (x-x0)(x-x1)…(x-xn-1) H 若令x=x0+h,则上式又可变形为 Nn(x0+th)=f+120+…+ a(t-1)…t-n+1) 上式称为 Newton向前插值公式。 1.3分段线性插值 1.3.1插值多项式的振荡 用 Lagrange插值多项式Ln(x)近似∫(x)(a≤x≤b),虽然随着节点个数的增加, Ln(x)的次数n变大,多数情沅下误差|R(x)会变小。但是n增大时,L,(x)的光滑 性变坏,有时会出现很大的振荡。理论上,当n→)∞,在【a,b内并不能保证Ln(x)处 处收敛于f(x)。 Runge给出了一个有名的例子: (x)=1 x∈[55] +r 对丁较大的|x,随着n的增大,L(x)振荡越来越大,事实上可以证明,仅当|x363 时,才有 limL i(x)=f(x),而在此区间外,L,(x)是发散的。 n→① 高次插值多项式的这些缺陷,促使人们转而寻求简单的低次多项式插值。 13.2分段线性插值 简单地说,将每两个相邻的芍点用直线连起来,如此形成的一条折线就是分段线性 插值函数,记作n(x),它满足n(x)=y,且ln(x)在每个小区间[x1,x1]上是线性 179 函数(i=0, l,(x)可以表示为 x)=∑ i0 x-x ,x∈[x1,x](-0时舍去) xi-xi (x)=1x=xn,x∈[x,xn1(=n时爸去) 其它 n(x)有良好的收敛性,即对于x∈[a,b有, imln(x)=f(x)。 用n(x)计算x点的插值时,只用到x左右的两个节点,计算量与节点个数n无关。 但n越大,分段越多,插值误差越小。实际上用函效表作插值计算时,分段线性插值貮 足够了,如数学、物理中用的特妺函数,数理统汁中用的概率分布表等。 1.3.3用 Matlab实现分段线性插值 用 Matlab实现分段线性插值不需要鳊制函数程序, Matlab中有现成的·维插值函 数 interp I y=interp(x0, yo, x, 'method) method指定插值的方法,默认为线性插值。其值可为: nearest'最近项插值 linear'线性插值 spline’逐段3次样条插值 cubic保凹凸性3次插值。 所有的插值方法要求x0是单调的。 当x0为等距时可以用快速插值法,使用快速插值法的格式为"* nearest'、"* linear * spline'、"* cubic 14埃尔米特( Hermite)插值 1.4.1 Hermite插值多项式 如果对插值函数,不仅要求它在节点处与函数同值,而且要求它与函数有相同的 阶、二阶甚至更高阶的导数值,这就是 Hermite插值问题。本节主要讨论在节点处插值 函数与函数的值及一阶导数值均相等的 Hermite插值。 设已知函数y=f(x)在n+1个互只节点x0,x1,…,x上的函数佰y;=f(x) (i=0,1,…,n)和导数值y=∫"(x,)(=0,1…,mn),要求一个至多2n+1次的多项式 H(x),使得 (x)=yH(x1)=y,(i=0,1, 清足上述条件的多项式H(x)称为 Hermite插值多项式 Hermite插值多项式为 -180 H(x)=hI(x-x)(2a,y;y,)+y 1 其中h j=0 j≠ 142用 Matlab实现 Hermite插值 Matlab中没有现成的 Hermite捅值数,必须编写一个M文件实现插值。 设n个节点的数据以数组x0(已知点的橫坐标),y0(函数值),yl(导数值) 输入(注意 Matlat的数组下标从1始),m个插值点以数组x输入,输出数组y为m 个插值。编写一个名为 hermite. m的M文件 function y-hermitc(xO y2, y1, x)i n=length(x0);m=length(x)i for k=l:m yy=0.0; for h=1.0; 0,0; Lor j=1 if jv= h=h*((x(k)-xC(2))/(x0=)-x0())^2 a=1/(x0(1)-x(2)】+a; en end yy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(1))+y0(i)); end y(k=yyi end 1.5样条插值 许多工程技术中提出的计算问题对插值函效的光滑性冇较高要求,如飞机的机翼外 形,内燃机的进、排气门的凸轮曲线,都要求曲线具有较高的光滑程度,不仅要连续, 而且要有连续的曲率,这就导致了样条插值的产生。 1.51样条函数的概念 所谓样条( Spline)本来是工程设计中使用的一种绘图工具,它是富有弹性的细木 条或细金属条。绘图员利用它把一些已知点连接戍一条光滑曲线(称为样条曲线),并 使连接点处有连续的曲率。 数学上将具有一定光滑性的分段多项式称为样条函数。具体地说,给定区间[a,b] 的一个分划 △ d=x<x 和 In- b 如果函数s(x)满足 (i)在每个小区间[x,x,11(=Q,,…,n-1)上s(x)是k次多项式 (ⅱi)s(x)在[4,b]上具有k-1阶连续导数。 则称S(x)为关于分划Δ的k次样条函数,其图形弥为k次样条曲线。x2,x,…,x称为 样条节点,x1,x2,…,xn1称为内节点,x,x称为边界点,这类样条函数的全体元做 181 S2(△,k),称为k次样条函数空间 显然,折线是一次样条曲线。 若S(x)∈S2(△,k),则(x)是关于分划Δ的k次多项式样条函数。k次多项式样 条函数的一般形式为 s()=2 ∑(x-x) i! K! 其中a(i=01,…,k)和B(=1,2…,n-1)均为任意常数,而 x> Y -1.2,…,n-1) 在实际中最常用的是k-2和3的情况,即为二次样条函数和二次样条函数。 二次样条函数:对于[a,b小]上的分划△:a=x0<x<…<xn=b,则 s2(x)-an+a1x+0x2+∑,(x-x,)∈S(△2), (5) (x-x)2,x>x 其中(x-x)+= ,(=l,2,…,n-1)。 0.x<x 三次样条函数:对于[ab上的分划△:a=x<x<…<x2=b,则 s1(x)=an+a1x+2x2+2x3∑(x-x)∈S(A,3),(6) 其中(x-x,)= (x-x1),x≥ ,(j=1,2,…,n-1)。 0,x< 利用样条函数进行插值,即取插值函数为样条函数,称为样条插值。例如分段线性插值 是一次样条插值。下面我们介绍二次、三次样条插值 1.5,2二次样条函数插值 首先,我们注意到s2(x)∈S,(△,2)中含有n+2个特定常数,故应需要m+2个插 值条件,因此,二次样条插值问趣可分为两类: 问题 已知插佰节点和相应的函数值y(=01,…,n)以及端点x。(或x)处的导数 值y(或y,),求S2(x)∈S(△,2)使得 S2(x)-y(i-0,2,…,n) (7 s,(ro)=yo(Eks, (xn)=yn) 问题(2): 已知插值节点x和相应的导数值y(i=0,1,2,…,n)以及端点x。(或x)处的函 数值yo(或yn),求S2(x)∈S2(△,2)使得 js2(x)=y(=012,…,n (8) S,(ro)=yo(Es, (x, )=y) 事实上,可以证明这两类插值问題都是唯一可解的。 对于问题(1),由条件(7) ,(xo)=a+axo+=,xo=y S2(x)=00+a,+a,r=y )=a+a+2+B(-x)=y(=23…,n s2(ro)=a+a,]0=y'o 引入记号X=(a0,a1,a2,月,…,Bn1)为末知向量,C=(0,y1,…,yn,y)为已 知向量。 A=1x22x22 (xn-x)…=(xn-xn1) 01 于是,问题转化为求方程组AX-C的解x-(a0,a1,a2,B1…,Bn1)的问题 即可得到二次样条函数S2(x)的表达式。 对于问题(2)的情况类似。 15.3三次样条函数插值 由于S3(x)∈Sp(△,3)中含有n+3个待定系数,故应需要n+3个插值条件,已知 插值节点x1和相应的函数值f(x,)=y(=0.1,2,…,n),这里提供了n+1个条件,还 需要2个边界条件 常用的二次样条函数的边界条件有3种类型 (i)s'3(a)=y,s3(b)=yn。由这种边界条件建立的样条插值函数称为f(x)的 完备三次样条插值函数。 特别地,y=yn=0时,样条曲线在端点处呈水平状态。 如果疒"(x)不知道,我们叫以要求S3(x)与f(x)在端点处近似相等。这时以 x0,x,x2,x3为节点作一个三次 Newton插值多项式N2(x),以xn,xn-1,xn=2,xn3作一 个三次 Newton插值多项式N(x),要求 s(a)=N(a), s(b)=N(h) 由这种边界条件建立的三次样条称为f(x)的 Lagrange三次样条插值函数 (i)s"3(a)=y"0,s"3(b)=y"3。特别地yn=y"n=0时,称为自然边界条件 183 (i)s’3(a+0)=S3(b-0),s3(a+0)=s3(b-0),(这里要求S(a+0) S3(b-0))此条件称为周期条件。 154三次样条插值在 Matlab中的实现 在 Matlab中数据点称之为断点。如果三次样条插值没有边界条件,最常用的方法, 就是采用非扭结(not-a-knot)条件。这个条件强迫第个和第2个三次多项式的三阶 导数相等。对最后一个和倒数第2个三次多项式也做同样地处理。 Matlab中三次样条插值也有现成的函数 y=interp(xo, yO, x, spline); y=spline(o, yO, x) pp=cape(x0, yo, conds), y=ppval(pp, x) 其中xOy0是已知数据点,x是插值点,y是插值点的函数值。 对于二次样条插值,我们提倡使用函数 cape, cape的返回值是pp形式,要求插 值点的函数值,必须调用函数 ppva pp= cape(xO,y):使用默认的边界条件,目 Lagrange边界条件。 p- cape(xOy0, conds)中的cond非定插值的边界条件,其值可为 complete边界为一阶导数,即默认的边界条件 not- a-knot非扭结条件 periodic期条件 边界为二阶导数,二阶导数的值[0.o variationa设置边界的一阶导数值为[O0]。 对于一些特殊的边界条件,可以通过 conds的一个1×2矩阵来表小, conds元素的 取值为1,2。此时,使用命令 pp=cape(X0, yo ext, conds) 其中yext-[le,yo, right],这旦l表示左边界的取值, right表示右边界的取值。 conds(i)与j的含义是给定端点i的j阶导数,即 conds的第一个元素表示左边界的条 件,第二个元素表示右边界的条件, conds=[2,1表示左边界是一阶导数,右边界是一阶 数,对应的值由let和 right给出 详细情况请使用帮助 help cape 例1机床加工 待加工零件的外形根据工艺要求由一组数据(x,y)给出(在平面情况下),用程控 铣床加工时每一刀只能沿x方向和y方向走非常小的一步,这就需要从已知数据得到加 工所要求的步长很小的(x,y)坐标 表1屮给出的x,y数据位于枳翼断面的下轮廙线上,假设需要得到x坐标每改变 0.1时的y坐标。试完成加工所需数据,画出曲线,并求出x=0处的曲线斜率和 13≤x≤15范围内y的最小值。 表1 r035791112131415 y01.21.72.0212.01.81.21.01.6 要求用 Lagrange、分段线性和二次样条二种指值方法计算。 解编写以下程序: clc clear 0=[0357 2-314151; y0=[01.21.72.02.12.01.81.21.01,6]; 0:0.1:15 y1- lagrange(x0,y0,x);豸调用前而编写的 agrange插值函数 y2-interpl (x0, yo, x)i y3-interpl(xo, yo x,'spline) ppl-csape(x0, yo)iy4-ppval(rpl x) pp2=cape(x0, yo, 'second'); y5=ppval(pp2, x)i tprint. f('比较一下不同插值方法和边界条件的结果:\n') printf( 1 y2 4 5\n') xianshi=[x’,y1',y2’,y3',y4';y51]; fprintf('各f\各f七fft号ftfn’, xianshi!) subplot(2,2,1), plot(xC, yO,+',x, y1),title('lagrange) subplot(2,2,2), plot(x0,y2, +,x, y2), title(' Piecewise linear F) subplot (2,2,3), plot(xC, O,+,x,y3), title( Splinc1' subplot(2,2,4), plot(xC, y0,+,x,y4),title(' Spline2') dyx0=ppva1( finder(pp1),x0(1)号求x=0处的导数 y temp-y3(131:151) index-find(temp==min(temp))i xymin-[x(130+index), temp(index)- 讣算结果略。 可以看出,拉格朗日插值的结果根本不能应用,分段线性插值的光滑性较差(特别 是在x=14附近弯曲处),建议选用三次样条值的结果。 1.6B杵条函数插值方法 1.6.1磨光函数 实际中的许多问题,往往是既要求近似函数(曲线或曲面)有足够的光滑性,又要 求与实际函数有相同的凹凸性,一股插值函数和样条函数都不具有这种性质。如果对于 个特殊函数进行磨光处理生成磨光函数(多项式),则用磨光函数构造出样条函数作 为插值函数,既有足够的光滑性,而且也具有较好的保凹凸性,因此磨光函数在一维插 值(曲线)和二维插值(曲面)问题中有着广泛的应用。 由积分理论可知,对于可积函数通过积分会提高函数的光滑度,因此,我们可以利 用积分方法对函数进行磨光处坦。 定义若f(x)为可积函数,对于h>0,则称积分 f(tdr 为f(x)的一次磨光函数,h称为磨光宽度。 同样的,可以定义f(x)的k次磨光函数为 f(x)= 人h(t)dt(k>1) 事实上,磨光函数h(x)比f(x)的元滑程度要高,且当磨光宽度h很少时fkn(x) 很接近于f(x)。 1.6.,2等距B样条函数 对于住意的函数∫(x),定义其步长为1的中心差分算子如下 183

...展开详情
试读 127P 数学建模算法全收录
立即下载 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
关注 私信
上传资源赚钱or赚积分
最新推荐
数学建模算法全收录 27积分/C币 立即下载
1/127
数学建模算法全收录第1页
数学建模算法全收录第2页
数学建模算法全收录第3页
数学建模算法全收录第4页
数学建模算法全收录第5页
数学建模算法全收录第6页
数学建模算法全收录第7页
数学建模算法全收录第8页
数学建模算法全收录第9页
数学建模算法全收录第10页
数学建模算法全收录第11页
数学建模算法全收录第12页
数学建模算法全收录第13页
数学建模算法全收录第14页
数学建模算法全收录第15页
数学建模算法全收录第16页
数学建模算法全收录第17页
数学建模算法全收录第18页
数学建模算法全收录第19页
数学建模算法全收录第20页

试读结束, 可继续阅读

27积分/C币 立即下载