版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精品文档 第七章最优化问题的计算机求解 7.1无约束最优化问题求解 无约束最优化问题是最简单的一类最优化问题,其一般数学描述为 mi nf (x)( 7-1-1) x 其中,x Xi,X2,xnT称为优化变量,f()函数称为目标函数, 该数学表示的含义亦即 求取一组x向量,使得最优化目标函数f (x)为最小,故这样的问题又称为最小化问题。其 实,最小化是最优化问题的通用描述,它不失普遍性。如果要想解最大化问题,那么只需给 目标函数f (x)乘一个负号就能立即将最大化问题转换成最小化问题。所以本书中描述的全 部问题都是最小化问题。 7.1.1解析解法和图解法 无约束最优化问题的最优点x*处,目标
2、函数f (x)对x各个分量的一阶导数为0,从而 可以列出下面的方程: f cf f 0, 0, 0 (7-1-2 ) X1 x X* X2 X X* Xn X X* 求解这些方程构成的联立方程可以得出极值点。其实,解出的一阶导数均为0的极值点不一 定都是极小值的点,其中有的还可能是极大值点。极小值问题还应该有正的二阶导数。对于 单变量的最优化问题可以考虑采用解析解的方法进行来解。然而多变量最优化问题因为需要 将其转换成求解多元非线性方程,其难度也不低于直接采取最优化问题,所以没有必要采用 解析解方法求解。 一元函数最优化问题的图解法也是很直观的,应绘制出该函数的曲线,在曲线上就能 看出其最优值
3、点。二元函数的最优化也可以通过图解法求出。但三元或多元函数,由于用图 形没有办法表示,所以不适合用图解法来解。 【例7-1】函数f (t) e 3t sin(4t 2) 4e 0.5t cos(2t) 0.5,试用解析求解和图形求解的 方法研究该函数的最优性。 【求解】可以先表示该函数,并解析地求解该函数的一阶导教,用ezplot()函数可以给制 出t 0,4区间内一阶导函数的曲线,如图7-1a所示。 syms t; y=exp(-3*t)*si n(4*t+2)+4*exp(-0.5*t)*cos(2*t)-0.5; y1=diff(y,t);%求取一阶导数 ezplot(y1,0,4)绘制
4、出选定区间内一阶导函数的曲线 其实求解导数等于 0的方程不比直接求解其最优值简单。用图解法可以看出,在这个区域内 有两点:A1, A2,使得它们的一阶导数为0,但从其一阶导数走向看,A2点对应负的二阶 导数值,所以该点对应于极大值点,而A1点对应于正的二阶导数值,故为极小值点。A1点 的值可以由下面的语句直接解出。 t0=solve(y1),ezplot(y,0,4) %求出一阶导数等于零的点 t0 = 1.4528424981725411893375778048840 y2=diff(y1); b=subs(y2,t,t0)%并验证二阶导数为正 b = 7.85534202533336013
5、79464405534590 这样,就可以求出函数的最小值。还可以用图形绘制的方法进一步验证得出的结果如图 7-1b所示,可见,A1为最小值点,A2为最大值点。 然而因为给定的函数是非线性函数.所以用解析法或类似的方法求解最小值问题一点都 不比直接求解最优化问题简单。因此除演示之外,不建议用这样的方法求解该问题,而直 接采用最优化问题求解程序得出问题的解。 -2 -4 -6 -.-8 exp(-1/2 t) sin(2 t) exp(-3 t) sin(4 t+2)+4 exp(-1/2 t) cos(2 t)-1/2 A1 -1 -2 t _n_ T5 522.533T (a)函数的一阶导函
6、数曲线 (b)函数曲线 图7-1联立方程图解法示意图 7.1.2基于MATLAB的数值解法 MATLA爵言中提供了求解无约束最优化的函数fmin search(),其最优化工具箱中还提 供了函数fminunc(),二者的调用格式完全一致,为 x=fminunc(Fun, xo)最简求解语句 x, f, flag , out=fminunc(Fun, x,opt,p 1,p 2,)一般求解格式 opt为控制参数。该函数主要采用了单纯形算法。下面将通过例子来演示无约束最优化问题 的数值解法。 2 2 【例7-2】已知二元函数z f(x,y) (x2 2x)ex y xy,试用MATLA醍供的求解函
7、数求 出其最小值并用图形方法表示其求解过程。 【求解】因为函数中给出的自变量是x,y,而最优化函数需要求取的是自变量向量x。故 在求解前应该先进行变量替换,如令x1 x,x2 y,这样就可以用下面的语句由inline() 形式定义出目标函数 f,然后将求解控制变量中的Display属性设置为iter 这样可以 显示中间的搜索结果。用下面的语句求解出最优解。 f=inlin e(x(1)A2-2*x(1)*exp(-x(1)A2-x (2) A2-x(1)*x(2),x); x0=0; 0; ff=optimset; ff.Display=iter; x=fm in search(f,x0,ff
8、) Procedure in itial simplex reflect Iteration Func-countmin f(x) 0 1 0 24-0.000499937 13-0.000499937 72137-0.641424 con tract outside Optimization terminated: the curre nt x satisfies the term in ati on criteria using OPTIONS.ToIX of 1.000000e-004 and F(X) satisfies the con verge neecriteria using
9、OPTIONS.TolF un of 1.000000e-004 x = 0.6111 -0.3056 同样的问题用fminunc ()函数求解,则可以得出如下的结果。 x=fmi nun c(f,0;.0,ff) Iterati on Fun c-co unt f(x) Step-size derivative 1 2 -2e-008 0.001 -4 2 9 -0.584669 0.304353 0.343 3 16 -0.641397 0.950322 0.00191 4 22 -0.641424 0.984028 -1.45e-008 1欢迎下载 精品文档 x = 0.6110 -0.
10、3055 比较两种方法, 显然可以看出用 fminunc() 函数的效率明显高于 fminsearch() 。所以在 无约束力优化问题求解时,如果安装了最优化工具箱则建议使用 fminunc() 函数。 练习:求解 min f (x) ex1 4x122x22 4x1x22x2 1 x 1) 首先编写该函数的 M文件:fun 1.m 2) x=-1,1 % 估计初值 fminunc( fun1 ,x) 7.2 有约束最优化问题求解 ( 7-2-1 ) 的缩写,表示满足后面的关系。 G(x) 0的前提下能够使目标 有约束最优化问题的一般描述为 min f(x) x s.t.G(x) 0 其中,
11、x x1,x2, ,xnT ,记号 s.t. 是英文 subject to 该数学表示的含义为求取一组x向量,使得在满足约束条件 函数f(x)最小化。在实际遇到的最优化问题中,有时约束条件可能是很复杂的,它既可以 是等式约束,也可以是不等式约束等,既可以是线性的,也可能是非线性的,有时甚至可以 不能用纯数学函数来描述。 7.2.1 约束条件与可行解区域 满足约束条件 G(x) 0的 x 范围称为可行解区域。下面通过例子演示二元问题的可行 解范围与图解结果。 【例 7-3 】考虑下面二元最优化问题的求解,试用图解方法对该问题进行研究 max ( x12 x2) x1 x2 1 xs.t. 2 x
12、1 2 x2 【求解】由约束条件可见,若在 -3 , 3区间选择网格则可以得出无约束时目标函数的三 维图形数据。可以用下面的语句获得这些数据。 x1,x2=meshgrid(-3:.1:3);% 生成网格型矩阵 z=-x2-x2;%计算出矩阵上各点的高度 引入了约束条件, 则在图形上需要将约束条件以外的点剔除掉。 具体的方法是找出这些点的 横纵坐标值,将其函数值设置成不定式 NaN即可剔除这些坐标点。这样可以使用如下的语句 进行求解。 22 i=find(x1.A2+x2929); z(i)=NaN; %找出 x-x29 的坐标,并置函数值为 NaN i=find(x1+x21); z(i)=
13、NaN;%找出 x1 x2 1的坐标,并置函数值为NaN surf(x1,x2,z); shading interp; 该语句可以直接绘制出如图7-2(a)所示的三维图形,若想从上向下观察该图形,则可以 使用view( 0,90)命令这样可以得出如图7-2 (b)所示的二维投影图。图形上的区域为 相应最优化问题的可行区域, 即满足约束条件的区域。 该区域内对应目标函数的最大值就是 原问题的解, 故从图形可以直接得出结论, 问题的解为 x10,x23用 max(z(:) 可以得出 最大值为 3。 4 3 3 图7-2二维最优化问题的图解法 对于一般的一元问题和二元问题,可以用图解法直接得出问题的
14、最优解。但对于一般的 多元问题和较复杂的问题,则不适合用图解法求解,而只能用数值解的方法进行求解,也没 有检验全局最优性的方法。 7.2.2线性规划问题的计算机求解 线性规划问题是一类特殊的问题,也是最简单的有约束最优化问题。在线性规划中,目 标函数和约束函数都是线性的,其整个问题的数学描述为 min fTx Ax B (7-2-2 ) X s.t.AeqX Beq XmX XM 为描述原问题的方便及求解的高效性起见,这里的约束条件已经进一步细化为线性等式 约束AeqXbeq,线性不等式约束Ax B,X变量的上界向量X”和下界向量Xm,使得 Xm X xm。 对不等式约束来说,MATLAB定义
15、的标准型是“”关系式。如果约束条件中某个式于 是“ ”关系式,则在不等号两边同时乘以1就可以转换成“”关系式了。 线性规划是一类最简单的有约束最优化问题,求解线性规划问题有多种算法。其中,单 纯形法是最有效的一种方法,MATLAB的最优化工具箱中实现了该算法,提供了求解线性规 划问题的linprog()函数。该函数的调用格式为 x , f opt,flag, c= lin prog ( f, A B, Aq, Beq, Xm xm x 0, opt, p 1, p 2,) 其中,f, A BAq,Beq, Xm, XM与前面约束与目标函数公式中的记号是完全一致的,X。为 初始搜索点。各个矩阵的
16、约束如果不存在,则应该用空矩阵来占位。OPT为控制选项,该函 数还允许使用附加参数pi, p 2,。最优化运算完成后,结果将在变量X中返回,最优化 的目标函数将在fopt变量中返回。我们将通过下面的例子来演示线性规划的求解问题。 【例7-4】试求解下面的线性规划问题。 min ( 2xi x2 4x3 3x4 x5) 2x2 x3 4x4 2x554 x s.t.3x1 4x2 5x3 x4 x5 62 NX 0, x3 3.32, x4 0.678, x5 2.57 【求解】从给出的数学式子可以看出,其目标函数可以用其系数向量f 2, 1, 4, 3, 1T 表示,不等式约束有两个,即 0
17、2 14254 A, B 3 4 5 1 162 另外,由于没有等式约束,故可以定义Aq和Bq为空矩阵。由给出的数学问题还可以看出, X的下界可以定义为 xm= : 0, 0, 3.32, 0.678, 2.57: T,且对上界没有限制,故可以将其写 成空矩阵。由前面的分析可以给出如下的MAT LA B命令来求解线性规划问题并立即得出结 果。 f=-2 1 4 3 1; A=0 2 1 4 2; 3 4 5 -1 -1; B=54; 62; Ae=; Be=; xm=0,0,3.32,0.678,2.57; ff=optimset; ff.LargeScale=off; ff.TolX=1e-
18、15; ff.TolFun=1e-20; ff.TolCon=1e-20; ff.Display=iter; x,f_opt,key,c=li nprog(f,A,B,Ae,Be,xm,ff) Optimization terminated. x = 19.7850 -0.0000 3.3200 11.3850 2.5700 f_opt = -89.5750 key = 1 iterati ons: 5 algorithm: medium-scale: active-set cgiterati ons: message: Optimizati on term in ated. 从列出的结果看,
19、由于key值为1,故求解是成功的。以上只用了5步就得出了线性规划问 题的解,可见求解程序功能是很强大的,可以很容易得出线性规划问题的解。 【例7-5】试求解下面的线性规划问题。 max (一 x-i 150 x2 4 50 6%) 1 X1 4 x s.t. X3 2x1 1, % 6OX2 90 x2 5, X2 1 x3 50 1 X3 50 5, X3 9x4 0 3x40 5, X4 【求解】原问题中应该求解的是最大值问题,所以需要首先将之转换成最小化问题,即将原 3 1 目标函数乘以1,则目标函数将改写成x1 150 x2x3 6X4。套用线性规划的格 4 50 式可以得出f向量为3
20、/4,150, 1/50,6t。 再分析约束条件可见,由最后一条可以写成xi5,所以可确定自变量的最小值向量 为Xm= : 5, 5, 5, 5: T。类似地,自变量的最大值向量为Xmf :inf, inf, inf, inf 。约束条件的前两条均为不等式约束, 其中第2条为 表示,需要将两端均乘以-1转换成 不等式,这样可以写出不等式约束为 1/460 1/509 0 A ,B 1/290 1/503 0 由于原问题中没有等式约束,故应该令人Aq= , Bq =:。最终可以输入如下的命令来 求解此最优化问题,得出原问题的最优解。 f=-3/4,150,-1/50,6; Aeq=; Beq=;
21、 A=1/4,-60,-1/50,9; 1/2,-90,-1/50,3; B=0;0; xm=-5;-5;-5;-5; xM=l nf;ln f;1;l nf; ff=optimset; ff.TolX=1e-15; ff.TolFu n=1e-20; TolCo n=1e-20; ff.Display=iter: x,f_opt,key,c=li nprog(f,A,B,Aeq,Beq,xm,xM,ff) Residuals: Primal Dual Upper Duality Total In feas In feas Bounds Gap Rel A*x-b A*y+z-w-f x+s-
22、ub x*z+s*w Error Iter 0: 9.39e+003 1.43e+002 1.94e+002 6.03e+004 2.77e+001 Iter 1: 5.90e-012 1.21e+001 0.00e+000 3.50e+003 1.78e+000 Iter 2: 3.22e-011 5.01e-001 0.00e+000 3.61e+002 3.79e-001 Iter 3: 1.16e-010 2.24e-001 0.00e+000 3.77e+002 3.62e-001 Iter 4: 1.35e-011 7.22e-016 0.00e+000 3.37e+001 4.5
23、9e-002 Iter 5: 1.80e-013 1.53e-015 0.00e+000 6.86e-001 9.51e-004 Iter 6: 7.39e-013 1.78e-015 0.00e+000 2.38e-002 3.30e-005 Iter 7: 5.36e-013 2.84e-014 8.88e-016 1.19e-006 1.66e-009 Iter 8: 8.04e-014 2.87e-014 0.00e+000 1.19e-014 4.73e-016 Iter 9: 2.84e-014 1.52e-017 0.00e+000 2.98e-017 5.67e-017 Ite
24、r 10: 0.00e+000 2.84e-022 0.00e+000 6.61e-025 1.89e-024 Optimizati on termi nated. x = -5.0000 -0.1947 1.0000 -5.0000 f_opt = -55.4700 key = 1 c = iteratio ns: 10 algorithm: large-scale: in terior point cgiterati ons: 0 message: Optimizati on term in ated. 可见经过10步迭代,就能以很高精度得出原问题的最优解。 7.2.3二次型规划的求解 二
25、次型规划问题是另一种简单的有约束最优化问题,其目标函数为x的二次型形式,约 束条件仍然为线性不定式约束。一般二次型规划问题的数学表示为 Ax B min 新Hx fTv) (7-2-3) xs.t.AeqXBeq xM 7欢迎下载 xT Hx来描述x2和 和线性规划问题相比,二次型规划目标函数中多了一个二次项 XjXj项。MATLAB勺最优化工具箱提供了求解二次型规划问题的quadprog()函数,该函数的 调用格式为 x, f opt, flag , c= quadprog (H, f, ABAq,Beq,xxm,xo,opt,P,卩2,) 其中,函数调用时,H为二次型规划目标函数中的H矩阵
26、,其余各个变量与线性规划函数调 精品文档 2 min (x1 1)2 用的完全一致。 【例 7-6 】试求解下面的四元二次型规划问题。 2 2 2 (x2 2)2 (x3 3)2 (x4 4)2 x1 x2 x3 x4 5 x s.t. 3x1 3x2 2x3 x4 10 x1, x2, x3,x4 0 求解】首先应该将原始问题写成二次型规划的模式。展开目标函数得 2 4 x3 6x3 9 22 f(x) x1 2x1 1 x2 4x2 2222 x1 x2 x3 x4 2x1 因为目标函数中的常数对最优化结果没有影响, 次型规划标准型中的 H矩阵和fT向量写为 2 x4 8x4 16 30
27、所以可以放心地略去。 这样就可以将二 4x2 6x3 8x4 H=diag(2,2,2,2);f T =-2,-4,-6,-8; 从而可以给出下列MATLAB命令来求解二次型最优化问题。 f=-2,-4,-6,-8; H=diag(2,2,2,2); OPT=optimset; OPT.LargeScale=off; A=1,1,1,1; 3,3,2,1; B=5;10; Aeq=; Beq=; LB=zeros(4,1); x,f_opt=quadprog(H,f,A,B,Aeq,Beq,LB,OPT) Optimization terminated. x = 0.0000 0.6667 1
28、.6667 2.6667 f_opt = -23.6667 这里得出的目标函数实际上不是原始问题中的最优函数, 因为人为地除去了常数项。 将 得出的结果再补上已经除去了的常数项,则可以求出原问题目标函数的值为6.3333 。 7.2.4 一般非线性规划问题的求解 有约束非线性最优化问题的一般描述为 min f(x)( 7-2-4 ) x s.t.G(x) 0 其中,x Xi,X2,XnT。为求解方便,约束条件还可以进一步细化为线性等式约束、线 性不等式约束、 x 变量的上下界向量, 还允许一般非线性函数的等式和不等式约束, 这时原 规划问题可以改写成 min f (X) AX B AeqX B
29、eq ( 7-2-5 ) X s.t. Xm X XM C(X) 0 Ceq(X) 0 MATLAB最优化工具箱中很供了一个fmincon()函数,专门用于求解各种约束下的最优化 问题。该函数的调用格式为 x, fopt, flag , c= fmincon(F,xo, AB,Aeq,Beq,Xm,xmCF,OPT, pi,p2,) 其中,F为目标函数的 M文件或inline()函数,xo为初始搜索点。各个矩阵的约束如果不存 在,则应该用空矩阵来占位。CF为非线性约束函数的M函数,OPT为控制选项。最优化运算 7欢迎。下载 精品文档 完成后,结果将在 x 变量中返回,最优化的目标函数将在变量
30、f opt 中返回。和其他优化函数 一样,选项 OPT有时是很重要的。 【例 7-7 】试求解下面的有约束最优化问题。 2 2 2 min 1000 x1 2x2 x3 x1x2 x1x3 2 x1 22 x2 x3 25 0 x s.t. 8x1 14x2 7x3 56 0 x1, x2 , x3 0 求解】 分析给出的最优化问题可以发现, 约束条件中全有非线性不等式放, 故不能使用二 次型规划的方式求解。 须用非线性规划的方式来求解。 根据给出的问题可以直接写出目标函 数为 function y=opt_fun1(x) y=1000-x(1)*x(1)-2*x(2)*x(2)-x(3)*x
31、(3)-x(1)*x(2)-x(1)*x(3); 同时给出的两个约束条件均为等式约束,所以应该写出非线性的来函数为 function c,ceq=opt_con1(x) ceq=x(1)*x(1)+x(2)*x(2)+x(3)*x(3)-25; 8*x(1)+14*x(2)+7*x(3)-56; c = ; 非线性约束函数返回变量分为 c 和 ceq 两个量,其中,前者为不等式约束的教学描述, 后者为非线性等式约束,如果某个约束不存在,则应该将其值赋为空矩阵。 描述了给出的非线性等式的束后,贝UA B, Aq, Beq都将为空矩阵了。另外应该给出搜 索初值向量 xm 0,0,0T ,因此可以调
32、用 fmincon() 函数求解此约束最优化问题。 ff=optimset; ff.LargeScale=off; ff.Display=iter; ff.TolFun=1e-30; ff.TolX=1e-15; ff.TolCon=1e-20; x0=1;1;1; xm=0;0;0; xM=; A=; B=; Aeq=; Beq=; x,f_opt,c,d=fmincon(opt_fun1,x0,A,B,Aeq,Beq,xm,xM,opt_con1,ff); max Directional First-order Iter F-count f(x) constraint Step-size
33、derivative optimality Procedure 0 4 994 27 Infeasible start point 1 11 955.336 22.9 0.25 -295 18.3 2 16 964.012 5.773 1 0.811 6.26 20 109 961.715 3.553e-015 1 4.35e-015 6.65e-007 21 114 961.715 0 1 -4.35e-015 0.00102 22 119 961.715 0 1 -3.4e-028 1.06e-006 Optimization terminated: magnitude of search
34、 direction less than 2*options.TolX and maximum constraint violation is less than options.TolCon. No active inequalities x,f_opt,kk=d.funcCount x = 3.5121 0.2170 3.5522 f_opt = 961.7152 kk = 119 考虑到第2个约束条件实际上是线性等式约束,所以能将其从非线性约束函数中除去, 故可以将非线性约束函数进一步简化为 fun cti on c,ceq=opt_c on 2(x) ceq=x(1)*x(1)+x (
35、2)*x (2)+x (3) *x (3)-25; c =; 线性等式约束可以由相应的矩阵定义出来,这时可以用下面的命令求解原始的最优化问 题,且可以得出和前面完全一致的结果。 x0=1;1;1; Aeq=8,14,7; Beq=56; x,f_opt,c,d=fmi ncon( opt_fu n1,xO,A,B,Aeq,Beq,xm,xM,opt_co n2,ff); x, f_opt, kk=d.fu ncCo unt 练习1:求解下面的最优化问题 min z 6% 3x2 4x3 st. x X2 X3 120 30 0 X2 50 X3 20 练习2: 有两个煤厂 A B每月进煤分别等
36、于 60吨、100吨。它们担负三个居民区用煤任务。这 三个居民区每月用煤量分别为45吨、75吨、40吨;A厂离这三个居民区分别为10km 5km 6km, B厂离这三个居民区分别为 4km 8km 15km,问这两煤矿厂如何分配供煤,才能使总 运输量最小? 转化为最优化方程: min z 10 x11 5x12 6x13 4x21 8x s.t. X11 X21 45 X12 X22 75 X13 X23 40 X11 X12 X13 60 X21 X22 X23 100 Xj 0,i 1,2; j 1,2,3 求解下面的最优化冋题 min f X1 2x2 1 212 x1x2 2 2 s.
37、t. 2X| 3x2 6 X1 4x2 5 练习3: 2215X23 X1,X20 7.3微分方程 微分方程是描述动态系统的最常用数学工具,也是很多科学与工程领域数学建模的基 础。线性微分方程和低阶特殊微分方程往往可以通过解析解的方法求解,但一般的非线性微 分方程是没有解析解的,需要用数值解的方式求解。本节将研究微分方程的解析解其法,介 绍在MATLAB境中如何用微分方程求解函数直接得出线性微分方程组的解析解,并对一阶 简单的非线性微分方程的解析解求解进行探讨。 常系数线性微分方程的一般描述方法为 dny(t)dn 1y(t) dtn ai dtn 1 dn 2y(t) anid any(t)
38、 dtdt b dmu(t) b dm1u(t) b du(t) b u(t) b1mb2m 1bmbm 1U (t) dtdtdt a2 (7-3-1 ) 其中,ai,bi均为常数。 7.3.1微分方程的解析解方法 MATLAB言的符号运算工具箱提供了一个线性常系数微分方程求解的函数dsolve(), 该函数允许用字符串的形式描述微分方程及初值、边值条件,最终将得出微分方程的解析解。 该函数的调用格式为 y dsolve(f1, f2, fm) y dsolve(f1, f2, fm, x) 指明自变量 其中,fi既可以描述微分方程,又可以描述初始条件或边界条件。在描述微分方程时, 可以用D
39、4y这样的记号表示 y4(t),还可以用D2y(2) = 3这类记号表示y(2) 3这样的已知 条件。该函数可以容易地得出原微分方程的解。如果描述微分方程的自变量不是t而是x , 则可以由后一个 MATLA萌句格式指明自变量。 例如: 1 U2,可以用下面的语句求解 dt dsolve(Du=1+uA2,t) ans = tan (t+C1) d2y dy 【例7-8】试求解下面的线性微分方程dX2 4dX 29 y 0 dj(0)0Xy(O) 15 上述的线性微分方程可以由下面的MATLA爵句直接求解 dsolve(D2y+4*Dy+29*y=0,y(0)=0,Dy(0)=15,x) ans
40、 = 3*exp(-2*x)*si n(5*x) 部分非线性微分方程也是可以用dsolve()函数求解析解的,这样的方程描述方式和前 面介绍的线性微分方程是一致的,描述了这样的微分方程,则可以直接来解出微分方程的解 析解。下面将通过例子演示非线性方程的解析解求解。 【例7-9】试求解下面的线性微分方程的解析解x(t) x(t)(1 x2(t) 上述的线性微分方程可以由下面的MATLA爵句直接求解 syms t x; x=dsolve(Dx=x*(1-xA2) x = 1/(1+exp(-2*t)*C1)A(1/2) -1/(1+exp(-2*t)*C1)A(1/2) 其实,稍微改变原微分方程,
41、例如将等号右侧加上1,读者会发现用dsolve()函数是无 法求出解析解的。 syms t x; x=dsolve(Dx=x*(1-xA2)+1) Warning: Explicit solution could not be found; implicit solution returned. In D:matlabtoolboxsymbolicdsolve.m at line 292 x = t-I nt(1/(a-aA3+1),a=、.x)+C1=0 可见,微分方程解析解求解函数dsolve()并不能直接应用于一般非线性方程的解析I 解的求解。所以非线性微分方程只能用数值解法去求解,即使
42、着起来很简单的非线性微I 分方程也是没有解林解的,只有极特殊的非线性微分方程解析可解。下面的将介绍非线性徽 分方程的数值解方法。 7.3.2微分方程的数值解法 MATLABF求解一阶微分方程组初值问题数值解的最常用的方法是ode45()函数,该函数 实现了变步长四阶五级Run ge KuttaFelherg 算法,可以采用变步长的算法求解微分方程。 该函数的调用格式为 t,x ode45(Fu n,鮎丄,)直接求解 t,x ode45(Fu n, t0,tf , x0,optio ns)带有控制选项 t,x ode45(Fu n,t0,tf , x(),optio ns,pp2,) 带有附加参
43、数 其中微分方程应该用 MATLABi数Fun或inline 函数按指定的格式描述,有关该函数的 编写方法后面将通过冽子专门介绍,t0,tf描述微分方程求解的区间,如果只给出一个值时 tf表示初始时刻为t0= 0,终止时刻为tf的问题求解。为使得微分方程能够求解,还应该已 知初值问题的初始状态变量X。另外,该函数还允许tf t0 ,即可以认为t0为终值时刻,tf 为初始时刻,故 X。表示状态变量的终值,故该函数可以直接求解终问题。 求解一阶显式微分方程组的关键是用MATLAE语言编写一个函数,描述需要求解的微分 方程组。该函数的人口应该为 fun ctio n Xd funn ame(t,x)
44、不附加变量的格式 function xdfunname(t,x, flag, Pi, p2,) 使用附加变量 其中,t是时间变量或自变量,即使需要求解的微分方程不是时变的,也需要给出t占位, 否则MATLAB在变量传递过程中将出现问题。变量 x为状态向量,返回的 Xd为状态向量的导 数。flag 一般用来控制求解过程,可以用其给初始状态赋值。 在微分方程求解中有时需要对求解算法及控制条件进行进一步设置,这可以通过求解过 程中的options变量进行修改。初始 options 变量可以通过 odeset()函数获取,该变量是 一个结构体变量,其中有众多成员变量,下表中列出了常用的一些变量。 常微
45、分方程求解函数的控制参数表 参数名 参数说明 Reltol 相对误差上限,默认值为0.001(即0.1%的相对误差),为保证较高精度可适当减小该值 AbsTol MaxStep Mass Jacobian 是一个向量,其分量表示每个状态变量允许的绝对误差,其默认值为 为求解方程最大允许的步长 微分代数方程中的质量矩阵 描述Jacobi矩阵函数f/ x的函数名 106,其值可改变 修改变县有两种方式,其一是用odeset()设置,其一是直接修改 例如,若想将相对误差设置成较小的10 7,则需要给出 optio ns 的变量。 options odese( RelTol ,1e 7);或者 opt
46、ions odese; options.RelTol1e 7; pi,P2,Pm表示,在编写 flag变量占位。后面将 在实际求解过程中经常需要定义一些附加参数,这些参数由 方程函数时也应该一一对应地写出,在这种调用格式下还应该使用 通过例子详细介绍相关的调用格式。 【例7-10】假设著名的Lorenz模型的状态方程表示为 其中,设 花 为X2(t)X3(t) X2(t) X2(t) X3(t) X3(t) X1(t)X2(t) X2(t) X3(t) 8/3,10, 28。若令其初值 X1(0)X2(0)0, X3(0) ,而为机器 10 10,试求解该微分方程组。 上可以识别的小常数如取一
47、个很小的正数 13欢迎下载 精品文档 【求解】该方程是非线性微分方程,所以不存在解析解只能用数值解法求解。若想用数值算 法求解读微分方程,可以按下面的格式编写出一个 MATLAB数lorenzeq.m 来描述系统的动 态模型。其内容为 function xdot=lore nzeq(t,x) xdot=-8/3*x(1)+x(2)*x(3);-10*x(2)+10*x(3);-x(1)*x(2)+28*x(2)-x(3); 这时可以调用微分方程数值解ode45()函数对lorenzeq ()函数描述的系统进行求解, 并将结果进行图形显示。 t_fin al=100;x0=0;0;1e-10;
48、t,x=ode45(lore nzeq,0,t_fi nal,xO); plot(t,x) figure plot3(x(:,1),x(:,2),x(:,3); %吉果数据太多,不显示 %创建新图形窗口 3孟 图 7-3 Lorenz 其中t_final 为设定的仿真终止时间,x0为叨始状态。第一个绘图命令绘制出系统的 各个状态和时间关系的二维曲线图,如图7-3 (a)所示。第一个绘图命令可以给制出三个 状态的相空间曲线,如图 7-3 (b)所示。可以看出看似复杂的三元一阶常微分方程组的数 值解问题由几条简单直观的MATLAB语句就求解出来了。 7.4插值与拟合 在科学与工程研究中经常会通过实
49、验测出一些数据,根据这些数据对某种规律进行研究 是数据插值与函数逼近所要解决的问题。可以将已知数据看成是样本点,所谓数据插值就是 在样本点的基础上求出不在样本点中的其他点处的函数值。本节将介绍一维、二维数据插值 问题的求解方法。所谓函数逼近问题即由已知的样本点数据求取能对其有较好拟合效果的函 数表达式的方法。本节将介绍多项式拟合的方法。 7.4.1一维插值 假设f (x)是一维给定函数,函数本身未知,已知相异的一组 N个自变量x1,x2, ,xN点 处的函数值为y1,y2, , yN,这样一组样本点(X1,yj ,(X2,y2), ,(XN,yN)又经常称 为样本点,则由这些已知样本点的信息获
50、得该函数在其他点上函数值的方法称为函数的插 值。如果在这些给定点的范围内进行插值,又称为内插,否则称为外插,如果从时间概念上 理解这个问题,则对(xn , yN)以后点的插值又称为预报。 一维插值interp1()函数的调用格式为 y1 interp1(x, y*,方法) 其中,x 为出,Xnt , y y1, y2, yN】T,两个问量分别表示给定的一组自变量和函 数值数据,可以用这这两个向量来表示已知的样本点坐标,且不要求x向量为单调的。x1为 用户指定的一组新的插值点的横坐标,它可以是标量、向量或矩阵,而得出的y1是在这一 组插值点处的插值结果。插值方法一般可以选默认的linear (线
51、性插值),它在两个样本 点间简单地采用直线拟合),nearest (最近点等值方式)、cubic (三次Hermite插值, 新版本的MATLAB改为丁 pchip )和 spline (三次分段样条插值)等,一般建议使用 三次样条插值。 【例7-11】已知的数据点来自函数f(x)(x2 3x 5)e 5xsinx,根据生成的数据进行插 值处理,得出较平滑的曲线直接生成数据。 【求解】根据给出函数则可以直接生成数据并绘制出如图7-4 (a)所示的拆线图。 x=0:.12:1;y=(x.A2-3*x+5).*exp(-5*x).*si n(x); plot(x,y,x,y,o) 可以看出,由这样
52、的数据直接连线绘制出来的曲线十分粗糙,可以再选择一组插值点, 然后直接调用in terp1()函数进行插值近似。 x1=0:.02:1; y0=(x1.A2-3*x1+5).*exp(-5*x1).*si n(x1); y1= i nterp1(x,y,x1); y2=i nterp1(x,y,x1,cubic); y3=in terp1(x,y,x1,spli ne); y4=in terp1(x,y,x1, nearest); Plot(x1,y1,y2,y3,y4,:,x,y,o,x1,y0) max(abs(y0(1:49)-y2(1:49),max(abs(y0-y3),max(ab
53、s(y0-y4) ans = 0.01770.00860.1598 分别选择各种拟合选项,可以得出拟合结果与理论曲线,它们之间的比较如图7-4 ( b)所 示。 d巧 图7-4插值结果 可以看出,默认的直线型拟合得到的曲线和图7-4 (a)中的同样粗糙,因为该方法就 是对各个点的直接连线而 n earest选项得出的拟会效果就更差了。采用cubic 和spli ne 选项的拟会更接近于理论值。事实上,应用样条插值算法得出的插值十分逼近理论值甚至用 肉眼难以分辨。所以样条函数插值在一维数据插值拟合中还是很有效的。样条插值还可以通 过spline ()函数和样条函数插值工具箱来出。 练习:在12小
54、时内,每隔1小时测量一次温度,依次为 5,8,9,15,25,29,31,22,25,27,24. 试估计在3.2,6.5,7.1,11.7小时时的温度值。 7.4.2二维网格数据的插值 MATLABF提供了二维插值的函数,女口in terp2(),该函数的调用格式为 z1in terp2(X0,y0,Z0,X1,y1, 方法) 其中X0,y,Z0为已知的数据,而人,丫1为插植点构成的新的网格参数,返回的Z1矩阵为 在所选插值网格点处的函数近似值。interp2()函数中可以选择的插值方法仍然为linear 、 cubic 和spline 。和一元函数插值类似,其中最好的方法还是样条插值spl
55、ine 。 下面将通过例子演示,比较各种算法。 2 2 【例7-12】假设由二元函数Z f (x,y)(x2 2x)e x y xy可以计算出一些较稀疏的网 格数据,试根据这些数据对整个函数曲面进行各种插值拟合并比较拟合结果。 【求解】考虑给出的二元函数.假设仅知其中较少的数据,则可以由下面命令绘制出已知数 据的网格图,如图 7-5(a)所示。从田图7-5(a)可以看出,由这些数据绘制的图形还是 很粗糙的。 x,y=meshgrid(-3:.6:3, -2:42); z=(x.A2-2*x).*exp(-x.A2-y.A2-x.*y); surf(x,y,z), axis(-3,3,-2,2,
56、-0.7,1.5) 选较密的插值点,则可以用下面的MATLAB句采用默认的插值算法进行插值,得出的 结果如图7-5 ( b)所示。 x1,y1=meshgrid(-3:.2:3, -2:.2:2); z1= in terp2(x,y,z,x1,y1); surf(x1,y1,z1), axis(-3,3,-2,2,-0.7,1.5) 图7-5二维插值结果比较 可以看出,默认的线性插值方法还原后的三维表面图在很多地方还是太粗糙。可以用下 面的命令分别由立方插值选项和样条插值选项来进行插值,得出的结果如图7-6所示。 z1=i nterp2(x,y,z,x1,y1,cubic); z2=i nte
57、rp2(x,y,z,x1,y1,spli ne); surf(x1,y1,z1), axis(-3,3,-2,2,-0.7,1.5) figure; surf(x1,y1,z2), axis(-3,3,-2,2,-0.7,1.5) Iin 井齐 图7-6二维其他插值结果比较 可以看出,这样的插值效果还都是比较理想的。 通过下面的误差分析还可以进一步比较两种算法,因为网格已知,可以由已知函数计算出z 的精确值,通过下面的语句求出两种算法得出的矩阵乙和Z2与真值z之间误差的绝对值, 分别如图7-5 (a)和7-5 (b)所示。可以看出,选择样条方法的插值精度要远高于立方插 值算法,所以在实际应用中
58、建议使用spline 插值选项。 z=(x1.A2-2*x1).*exp(-x1.A2-y1.A2-x1.*y1); %新网格各点的函数值 surf(x1,y1,abs(z-z1), axis(-3,3,-2,2,0,0.08) 15。迎下载 精品文档 figure; surf(x1,y1,abs(z-z2), axis(-3,3,-2,2,0,0.025) 0.08 0.06 0.04 0.02 -2-3 (a)立方插值算法 0 2 0.025 0.02 0.015 0.01 0.005 M32 2 (b)样条插值算法 图7-7二维函数误差 19。迎下载 练习:测得平板表面 5X 3网格点处
59、的温度分别为: 82 81 80 82 84 79 63 61 65 81 84 84 82 85 81 作出平板表面温度分布曲面。 7.4.3二维一般数据的插值 通过上面的例子可以看出,MATLAB提供的二维插值函数还是能较好地进行二维插值运 算的。但该函数有一个重要的缺陷就是它只能处理以网格形式给出的数据,如果已知数据不 是以网格形式给出的,则用该函数是无能为力的。在实际应用中,大部分问题都是以实测的 多组x , yi, Zi点给出的,所以不能直接使用interp2()进行二维插值。 MATLAB言中提供了一个更一般的griddata()函数,用来专门解决这样的问题。该函 数的调用格式为
60、z griddate (x, yo,z, x, y,v4) 其中xo, yo,z)是已知的样本点坐标,这里并不要求是网格型的,可以是任意分布的, 均由向量给出。x,y是期望的插值位置,可以是单个点,可以是向量或网格型矩阵,得出的 z应该维数和x,y 一致,表示插值的结果。选项 v4 是MATLAB中提供的插值算法,公认 效果较好,但没有一个正式的名称,所以这里用v4表明该算法。除了 v4 选项外,还 可以使用 linear 、 cubic 和nearest 等算法。 例7-13】在某海域测得一些点(x,y)处的水深z由下表给出,在矩形区域 (75,200)*(-50,150)内画出海底曲面的图
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年江西农业工程职业学院单招职业技能考试题库及答案详细解析
- 2026年甘肃工业职业技术学院单招综合素质考试题库及答案详细解析
- 2026年甘肃省人力资源市场招聘就业见习人员考试参考试题及答案解析
- 2026年池州职业技术学院单招综合素质考试题库及答案详细解析
- 2026年黑龙江幼儿师范高等专科学校单招综合素质考试题库及答案详细解析
- 2026年内蒙古自治区乌兰察布市高职单招职业适应性测试考试题库附答案详细解析
- 2026年海南省儋州市高职单招综合素质考试题库附答案详细解析
- 2026浙江金华市永康市人才发展集团有限公司招聘劳务派遣考试参考题库及答案解析
- 2026年南阳科技职业学院单招职业技能考试题库含答案详细解析
- 2026年克孜勒苏职业技术学院单招职业技能考试题库含答案详细解析
- 智能化激光制造技术的研究进展
- 《电气控制技术》课件-项目8 直流电动机控制电路安装与调试
- 外墙风管施工方案(3篇)
- 大数据赋能企业财务分析的效率提升路径
- TD/T 1033-2012高标准基本农田建设标准
- 以结果为导向的执行力培训
- 2025年江西工业贸易职业技术学院单招职业技能测试题库带答案
- 邮政快递安全培训课件
- 2025年江苏省高职单招《职测》高频必练考试题库400题(含答案)
- 阀门检测服务合同
- 毫米波雷达行业深度研究报告:4D毫米波雷达
评论
0/150
提交评论