代数方程 最优化方程_第1页
代数方程 最优化方程_第2页
代数方程 最优化方程_第3页
代数方程 最优化方程_第4页
代数方程 最优化方程_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

代数方程最优化方程第一页,共六十一页,编辑于2023年,星期六7.1代数方程的求解

7.1.1代数方程的图解法一元方程的图解法例:>>ezplot('exp(-3*t)…*sin(4*t+2)+4*exp…(-0.5*t)*cos(2*t)-…0.5',[05])>>holdon,>>line([0,5],[0,0])%同时绘制横轴第二页,共六十一页,编辑于2023年,星期六验证:>>symst;t=3.52028;vpa(exp(-3*t)*sin(4*t+2)+…4*exp(-0.5*t)*cos(2*t)-0.5)ans=-.19256654148425145223200161126442e-4第三页,共六十一页,编辑于2023年,星期六二元方程的图解法例:>>ezplot('x^2*exp(-x*y^2/2)+exp(-x/2)*sin(x*y)')%第一个方程曲线>>holdon%保护当前坐标系>>ezplot(‘x^2*…cos(x+y^2)+…y^2*exp(x+y)')第四页,共六十一页,编辑于2023年,星期六方程的图解法仅适用于一元、二元方程的求根问题。第五页,共六十一页,编辑于2023年,星期六7.1.2多项式型方程的准解析解法例:>>ezplot('x^2+y^2-1');holdon%绘制第一方程的曲线>>ezplot(‘0.75*x^3-y+0.9’)%绘制第二方程为关于x的6次多项式方程应有6对根。图解法只能显示求解方程的实根。第六页,共六十一页,编辑于2023年,星期六一般多项式方程的根可为实数,也可为复数。可用MATLAB符号工具箱中的solve()函数。最简调用格式:

S=solve(eqn1,eqn2,…,eqnn)

(返回一个结构题型变量S,如S.x表示方程的根。)直接得出根:(变量返回到MATLAB工作空间)

[x,…]=solve(eqn1,eqn2,…,eqnn)同上,并指定变量

[x,…]=solve(eqn1,eqn2,…,eqnn,’x,…’)第七页,共六十一页,编辑于2023年,星期六例:>>symsxy;>>[x,y]=solve('x^2+y^2-1=0','75*x^3/100-y+9/10=0')x=[-.98170264842676789676449828873194][-.55395176056834560077984413882735-.35471976465080793456863789934944*i][-.55395176056834560077984413882735+.35471976465080793456863789934944*i][.35696997189122287798839037801365][.86631809883611811016789809418650-1.2153712664671427801318378544391*i][.86631809883611811016789809418650+1.2153712664671427801318378544391*i]y=[.19042035099187730240977756415289][.92933830226674362852985276677202-.21143822185895923615623381762210*i][.92933830226674362852985276677202+.21143822185895923615623381762210*i][.93411585960628007548796029415446][-1.4916064075658223174787216959259-.70588200721402267753918827138837*i][-1.4916064075658223174787216959259+.70588200721402267753918827138837*i]第八页,共六十一页,编辑于2023年,星期六验证>>[eval('x.^2+y.^2-1')eval('75*x.^3/100-y+9/10')]ans=[0,0][0,0][0,0][-.1e-31,0][.5e-30+.1e-30*i,0][.5e-30-.1e-30*i,0]

由于方程阶次可能太高,不存在解析解。然而,可利用MATLAB的符号工具箱得出原始问题的高精度数值解,故称之为准解析解。第九页,共六十一页,编辑于2023年,星期六例:>>[x,y,z]=solve('x+3*y^3+2*z^2=1/2','x^2+3*y+z^3=2','x^3+2*z+2*y^2=2/4');>>size(x)ans=271>>x(22),y(22),z(22)ans=-1.0869654762986136074917644096117ans=.37264668450644375527750811296627e-1ans=.89073290972562790151300874796949第十页,共六十一页,编辑于2023年,星期六验证:>>err=[x+3*y.^3+2*z.^2-1/2,x.^2+3*y+z.^3-2,x.^3+2*z+2*y.^2-2/4];>>norm(double(eval(err)))ans=1.4998e-027多项式乘积形式也可,如把第三个方程替换一下。>>[x,y,z]=solve('x+3*y^3+2*z^2=1/2','x^2+3*y+z^3=2','x^3+2*z*y^2=2/4');>>err=[x+3*y.^3+2*z.^2-1/2,x.^2+3*y+z.^3-2,x.^3+2*z.*y.^2-2/4];>>norm(double(eval(err)))%将解代入求误差ans=5.4882e-028第十一页,共六十一页,编辑于2023年,星期六例:求解(含变量倒数)>>symsxy;>>[x,y]=solve('x^2/2+x+3/2+2/y+5/(2*y^2)+3/x^3=0',...'y/2+3/(2*x)+1/x^4+5*y^4','x,y');>>size(x)ans=261>>err=[x.^2/2+x+3/2+2./y+5./(2*y.^2)+3./x.^3,y/2+3./(2*x)+1./x.^4+5*y.^4];%验证>>norm(double(eval(err)))ans=8.9625e-030第十二页,共六十一页,编辑于2023年,星期六例:求解(带参数方程)>>symsabxy;>>[x,y]=solve('x^2+a*x^2+6*b+3*y^2=0','y=a+(x+3)','x,y')x=[1/2/(4+a)*(-6*a-18+2*(-21*a^2-45*a-27-24*b-6*a*b-3*a^3)^(1/2))][1/2/(4+a)*(-6*a-18-2*(-21*a^2-45*a-27-24*b-6*a*b-3*a^3)^(1/2))]y=[a+1/2/(4+a)*(-6*a-18+2*(-21*a^2-45*a-27-24*b-6*a*b-3*a^3)^(1/2))+3][a+1/2/(4+a)*(-6*a-18-2*(-21*a^2-45*a-27-24*b-6*a*b-3*a^3)^(1/2))+3]第十三页,共六十一页,编辑于2023年,星期六7.1.3一般非线性方程数值解格式:最简求解语句

x=fsolve(Fun,x0)一般求解语句

[x,f,flag,out]=fsolve(Fun,x0,opt,p1,p2,…)若返回的flag大于0,则表示求解成功,否则求解出现问题,opt求解控制参数,结构体数据。获得默认的常用变量opt=optimset;用这两种方法修改参数(解误差控制量)opt.Tolx=1e-10;或set(opt.‘Tolx’,1e-10)第十四页,共六十一页,编辑于2023年,星期六例:自编函数:functionq=my2deq(p)q=[p(1)*p(1)+p(2)*p(2)-1;0.75*p(1)^3-p(2)+0.9];>>OPT=optimset;OPT.LargeScale='off';>>[x,Y,c,d]=fsolve('my2deq',[1;2],OPT)Optimizationterminatedsuccessfully:First-orderoptimalityislessthanoptions.TolFun.x=0.35700.9341Y=1.0e-009*0.12150.0964第十五页,共六十一页,编辑于2023年,星期六c=1d=iterations:7funcCount:21algorithm:'trust-regiondogleg'firstorderopt:1.3061e-010%解回代的精度调用inline()函数:>>f=inline('[p(1)*p(1)+p(2)*p(2)-1;0.75*p(1)^3-p(2)+0.9]','p');>>[x,Y]=fsolve(f,[1;2],OPT);%结果和上述完全一致,从略。Optimizationterminatedsuccessfully:First-orderoptimalityislessthanoptions.TolFun.若改变初始值x0=[-1,0]T第十六页,共六十一页,编辑于2023年,星期六>>[x,Y,c,d]=fsolve(f,[-1,0]',OPT);x,Y,kk=d.funcCountOptimizationterminatedsuccessfully:First-orderoptimalityislessthanoptions.TolFun.x=-0.98170.1904Y=1.0e-010*0.5619-0.4500kk=15初值改变有可能得出另外一组解。故初值的选择对解的影响很大,在某些初值下甚至无法搜索到方程的解。第十七页,共六十一页,编辑于2023年,星期六例:用solve()函数求近似解析解>>symst;solve(exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)-0.5)ans=.67374570500134756702960220427474%不允许手工选择初值,只能获得这样的一个解。可先用用图解法选取初值,再调用fsolve()函数数值计算第十八页,共六十一页,编辑于2023年,星期六>>formatlong>>y=inline('exp(-3*t).*sin(4*t+2)+4*exp(-0.5*t).*cos(2*t)-0.5','t');>>ff=optimset;ff.Display='iter';[t,f]=fsolve(y,3.5203,ff)NormofFirst-orderTrust-regionIterationFunc-countf(x)stepoptimalityradius121.8634e-0095.16e-0051243.67694e-0193.61071e-0057.25e-0101Optimizationterminatedsuccessfully:First-orderoptimalityislessthanoptions.TolFun.t=3.52026389294877f=-6.063776702980306e-010第十九页,共六十一页,编辑于2023年,星期六重新设置相关的控制变量,提高精度。>>ff=optimset;ff.TolX=1e-16;ff.TolFun=1e-30;>>ff.Display='iter';[t,f]=fsolve(y,3.5203,ff)NormofFirst-orderTrust-regionIterationFunc-countf(x)stepoptimalityradius121.8634e-0095.16e-0051243.67694e-0193.61071e-0057.25e-01013605.07218e-01001Optimizationterminatedsuccessfully:First-orderoptimalityislessthanoptions.TolFun.t=3.52026389244155f=0第二十页,共六十一页,编辑于2023年,星期六7.2无约束最优化问题求解

7.2.1解析解法和图解法第二十一页,共六十一页,编辑于2023年,星期六例:>>symst;y=exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)-0.5;>>y1=diff(y,t);%求取一阶导函数>>ezplot(y1,[0,4])%绘制出选定区间内一阶导函数曲线第二十二页,共六十一页,编辑于2023年,星期六>>t0=solve(y1)%求出一阶导数等于零的点t0=1.4528424981725411893375778048840>>y2=diff(y1);b=subs(y2,t,t0)%并验证二阶导数为正b=7.8553420253333601379464405534591>>t=0:0.4:4;y=exp(-3*t).*sin(4*t+2)+4*exp(-0.5*t).*cos(2*t)-0.5;>>plot(t,y)第二十三页,共六十一页,编辑于2023年,星期六7.2.2基于MATLAB的数值解法第二十四页,共六十一页,编辑于2023年,星期六例:>>f=inline('(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2))','x');>>x0=[0;0];ff=optimset;ff.Display='iter';>>x=fminsearch(f,x0,ff)IterationFunc-countminf(x)Procedure13-0.000499937initial24-0.000499937reflect

72137-0.641424contractoutsideOptimizationterminatedsuccessfully:x=0.6111-0.3056第二十五页,共六十一页,编辑于2023年,星期六

>>x=fminunc(f,[0;.0],ff)DirectionalIterationFunc-countf(x)Step-sizederivative12-2e-0080.001-429-0.5846690.3043530.343316-0.6413970.9503220.00191422-0.6414240.984028-1.45e-008x=0.6110-0.3055比较可知fminunc()函数效率高于fminsearch()函数,故若安装了最优化工具箱则应调用fminunc()函数。第二十六页,共六十一页,编辑于2023年,星期六7.2.3全局最优解与局部最优解例:>>f=inline('exp(-2*t).*cos(10*t)+exp(-3*(t+2)).*sin(2*t)','t');%目标函数>>t0=1;[t1,f1]=fminsearch(f,t0);[t1f1]ans=0.9228-0.1547>>t0=0.1;[t2,f2]=fminsearch(f,t0);[t2f2]ans=0.2945-0.5436第二十七页,共六十一页,编辑于2023年,星期六>>symst;y=exp(-2*t)*cos(10*t)+exp(-3*(t+2))*sin(2*t);>>ezplot(y,[0,2.5]);set(gca,‘Ylim’,[-0.6,1])%在t[0,2.5]内的曲线>>ezplot(y,[-0.5,2.5]);set(gca,‘Ylim’,[-2,1.2])%在[-0.5,2.5]曲线>>t0=-0.2;[t3,f3]=fminsearch(f,t0);[t3f3]ans=-0.3340-1.9163第二十八页,共六十一页,编辑于2023年,星期六7.2.4利用梯度求解最优化问题例:>>[x,y]=meshgrid…(0.5:0.01:1.5);…z=100*(y.^2-x).^2…+(1-x).^2;>>contour3(x,y,z,100),set(gca,'zlim',[0,310])%测试算法的函数第二十九页,共六十一页,编辑于2023年,星期六>>f=inline('100*(x(2)-x(1)^2)^2+(1-x(1))^2','x');>>ff=optimset;ff.TolX=1e-10;ff.TolFun=1e-20;ff.Display='iter';>>x=fminunc(f,[0;0],ff)Warning:Gradientmustbeprovidedfortrust-regionmethod;usingline-searchmethodinstead.DirectionalIterationFunc-countf(x)Step-sizederivative1210.5-4442023.01749e-0123.40397e-009-1.77e-013x=1.000001736959721.00000347608069第三十页,共六十一页,编辑于2023年,星期六%求梯度向量(比较引入梯度的作用,但梯度的计算也费时间)>>symsx1x2;f=100*(x2-x1^2)^2+(1-x1)^2;>>J=jacobian(f,[x1,x2])J=[-400*(x2-x1^2)*x1-2+2*x1,200*x2-200*x1^2]function[y,Gy]=c6fun3(x)%目标函数编写:y=100*(x(2)-x(1)^2)^2+(1-x(1))^2;%目标函数Gy=[-400*(x(2)-x(1)^2)*x(1)-2+2*x(1);200*x(2)-200*x(1)^2];%梯度>>ff.GradObj='on';x=fminunc('c6fun3',[0;0],ff)NormofFirst-orderIterationf(x)stepoptimalityCG-iterations196.38977e-0292.12977e-0121.6e-0141x=0.999999999999990.99999999999998第三十一页,共六十一页,编辑于2023年,星期六7.3有约束最优化问题的计算机求解

6.3.1约束条件与可行解区域有约束最优化问题的一般描述:对于一般的一元问题和二元问题,可用图解法直接得出问题的最优解。第三十二页,共六十一页,编辑于2023年,星期六例:用图解方法求解:>>[x1,x2]=meshgrid(-3:.1:3);%生成网格型矩阵>>z=-x1.^2-x2;%计算出矩阵上各点的高度>>i=find(x1.^2+x2.^2>9);z(i)=NaN;%找出x1^2+x2^2>9的坐标,并置函数值为NaN>>i=find(x1+x2>1);z(i)=NaN;%找出x1+x2>1的坐标,置为NaN>>surf(x1,x2,z);shadinginterp;>>max(z(:)),view(0,90)ans=3第三十三页,共六十一页,编辑于2023年,星期六7.3.2线性规划问题的计算机求解第三十四页,共六十一页,编辑于2023年,星期六例:求解>>f=-[21431]';A=[02142;345-1-1];>>B=[54;62];Ae=[];Be=[];xm=[0,0,3.32,0.678,2.57];>>ff=optimset;ff.LargeScale='off';%不使用大规模问题求解>>ff.TolX=1e-15;ff.TolFun=1e-20;ff.TolCon=1e-20;ff.Display='iter';>>[x,f_opt,key,c]=linprog(f,A,B,Ae,Be,xm,[],[],ff)第三十五页,共六十一页,编辑于2023年,星期六Optimizationterminatedsuccessfully.x=19.78500.00003.320011.38502.5700f_opt=-89.5750key=1%求解成功c=iterations:5algorithm:'medium-scale:activeset'cgiterations:[]第三十六页,共六十一页,编辑于2023年,星期六例:求解>>f=[-3/4,150,-1/50,6]';Aeq=[];Beq=[];>>A=[1/4,-60,-1/50,9;1/2,-90,-1/50,3];B=[0;0];>>xm=[-5;-5;-5;-5];xM=[Inf;Inf;1;Inf];ff=optimset;>>ff.TolX=1e-15;ff.TolFun=1e-20;TolCon=1e-20;ff.Display='iter';>>[x,f_opt,key,c]=linprog(f,A,B,Aeq,Beq,xm,xM,[0;0;0;0],ff)第三十七页,共六十一页,编辑于2023年,星期六Residuals:PrimalDualUpperDualityTotalInfeasInfeasBoundsGapRelA*x-bA'*y+z-w-f{x}+s-ubx'*z+s'*wError-------------------------------------------------------------Iter0:9.39e+0031.43e+0021.94e+0026.03e+0042.77e+001Iter1:6.38e-0121.21e+0010.00e+0003.50e+0031.78e+000

Iter10:0.00e+0006.15e-0260.00e+0001.70e-0244.10e-028Optimizationterminatedsuccessfully.x=-5.0000-0.19471.0000-5.0000f_opt=-55.4700key=1c=iterations:10cgiterations:0algorithm:'lipsol'第三十八页,共六十一页,编辑于2023年,星期六7.3.3二次型规划的求解第三十九页,共六十一页,编辑于2023年,星期六例:求解>>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)Optimizationterminatedsuccessfully.x=0.00000.66671.66672.6667f_opt=-23.6667%(解的目标值应为30+(-23.6667)=6.3333)第四十页,共六十一页,编辑于2023年,星期六6.3.4一般非线性规划问题的求解第四十一页,共六十一页,编辑于2023年,星期六例:求解目标函数:functiony=opt_fun1(x)y=1000-x(1)*x(1)-2*x(2)*x(2)-x(3)*x(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=[];第四十二页,共六十一页,编辑于2023年,星期六>>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);>>x,f_opt,kk=d.funcCountx=3.51210.21703.5522f_opt=961.7152kk=%目标函数调用的次数108第四十三页,共六十一页,编辑于2023年,星期六简化非线约束函数function[c,ceq]=opt_con2(x)ceq=x(1)*x(1)+x(2)*x(2)+x(3)*x(3)-25;c=[];求解:>>x0=[1;1;1];Aeq=[8,14,7];Beq=56;>>[x,f_opt,c,d]=fmincon('opt_fun1',x0,A,B,Aeq,Beq,xm,xM,'opt_con2',ff);maxDirectionalFirst-orderIterF-countf(x)constraintStep-sizederivativeoptimalityProcedure111955.33622.90.25-29518.3infeasible21116961.71501-6.3e-0156.97e-005HessianmodifiedtwiceOptimizationterminatedsuccessfully:Searchdirectionlessthan2*options.TolXandmaximumconstraintviolationislessthanoptions.TolConActiveConstraints:12>>x,f_opt,kk=d.funcCount%从略(计算结果同上一样)第四十四页,共六十一页,编辑于2023年,星期六例:利用梯度求解梯度函数:>>symsx1x2x3;f=1000-x1*x1-2*x2*x2-x3*x3-x1*x2-x1*x3;>>J=jacobian(f,[x1,x2,x3])J=[-2*x1-x2-x3,-4*x2-x1,-2*x3-x1]改写目标函数:function[y,Gy]=opt_fun2(x)y=1000-x(1)*x(1)-2*x(2)*x(2)-x(3)*x(3)-x(1)*x(2)-x(1)*x(3);Gy=-[2*x(1)+x(2)+x(3);4*x(2)+x(1);2*x(3)+x(1)];第四十五页,共六十一页,编辑于2023年,星期六>>x0=[1;1;1];xm=[0;0;0];xM=[];A=[];B=[];Aeq=[];Beq=[];>>ff=optimset;ff.GradObj=‘on’;%若知道梯度函数ff.Display='iter';ff.LargeScale='off';>>ff.TolFun=1e-30;ff.TolX=1e-15;ff.TolCon=1e-20;>>[x,f_opt,c,d]=fmincon('opt_fun2',x0,A,B,Aeq,Beq,xm,xM,'opt_con1',ff);>>x,f_opt,kk=d.funcCountx=3.51210.21703.5522f_opt=961.7152kk=95第四十六页,共六十一页,编辑于2023年,星期六7.4整数规划问题的计算机求解7.4.1整数线性规划问题的求解A、B线性等式和不等式约束,约束式子由ctype变量控制,intlist为整数约束标示,how=0表示结果最优,2为无可行解,其余失败。第四十七页,共六十一页,编辑于2023年,星期六例:>>f=-[21431]';A=[02142;345-1-1];intlist=ones(5,1);>>B=[54;62];ctype=[-1;-1];xm=[0,0,3.32,0.678,2.57];xM=inf*ones(5,1);>>[res,b]=ipslv_mex(f,A,B,intlist,xM,xm,ctype)%因为返回的b=0,表示优化成功res=1904105b=0第四十八页,共六十一页,编辑于2023年,星期六>>[x1,x2,x3,x4,x5]=ndgrid(1:20,0:20,4:20,1:20,3:20);>>i=find((2*x2+x3+4*x4+2*x5<=54)&(3*x1+4*x2+5*x3-x4-x5<=62));>>f=-2*x1(i)-x2(i)-4*x3(i)-3*x4(i)-x5(i);[fmin,ii]=sort(f);>>index=i(ii(1));x=[x1(index),x2(index),x3(index),x4(index),x5(index)]x=1904105%当把20换为30,一般计算机配置下实现不了,故求解整数规划时不适合采用穷举算法。第四十九页,共六十一页,编辑于2023年,星期六次最优解>>fmin(1:10)'ans=-89-88-88-88-88-88-88-88-87-87>>in=i(ii(1:4));x=[x1(in),x2(in),x3(in),x4(in),x5(in),fmin(1:4)]x=1904105-891804113-881705104-881506104-88>>intlist=[1,0,0,1,1];%混合整数规划>>[res,b]=ipslv_mex(f,A,B,intlist,xM,xm,ctype)res=19.000003.800011.00003.0000b=0第五十页,共六十一页,编辑于2023年,星期六7.4.2一般非线性整数规划问题与求解第五十一页,共六十一页,编辑于2023年,星期六err字符串为空,则返回最优解。该函数尚有不完全之处,解往往不是精确整数,可用下面语句将其化成整数。第五十二页,共六十一页,编辑于2023年,星期六例:functionf=c6miopt(x)f=-[21431]*x;>>A=[02142;345-1-1];intlist=ones(5,1);Aeq=[];Beq=[];>>B=[54;62];ctype=[-1;-1];>>xm=[0,0,4,1,3]';xM=20000*ones(5,1);x0=xm;>>[errmsg,f,X]=bnb20('c6miopt',x0,intlist,xm,xM,A,B,Aeq,Beq);X=X'X=1

温馨提示

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

评论

0/150

提交评论