




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
代數方程與最優化問題第1頁,課件共86頁,創作于2023年2月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])%同時繪制橫軸第2頁,課件共86頁,創作于2023年2月驗證:>>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第3頁,課件共86頁,創作于2023年2月二元方程的圖解法例:>>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)')第4頁,課件共86頁,創作于2023年2月方程的圖解法僅適用于一元、二元方程的求根問題。第5頁,課件共86頁,創作于2023年2月7.1.2多項式型方程的準解析解法例:>>ezplot('x^2+y^2-1');holdon%繪制第一方程的曲線>>ezplot(‘0.75*x^3-y+0.9’)%繪制第二方程為關于x的6次多項式方程應有6對根。圖解法只能顯示求解方程的實根。第6頁,課件共86頁,創作于2023年2月一般多項式方程的根可為實數,也可為復數。可用MATLAB符號工具箱中的solve()函數。最簡調用格式:
S=solve(eqn1,eqn2,…,eqnn)
(返回一個結構題型變量S,如S.x表示方程的根。)直接得出根:(變量返回到MATLAB工作空間)
[x,…]=solve(eqn1,eqn2,…,eqnn)同上,并指定變量
[x,…]=solve(eqn1,eqn2,…,eqnn,’x,…’)第7頁,課件共86頁,創作于2023年2月例:>>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]第8頁,課件共86頁,創作于2023年2月驗證>>[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的符號工具箱得出原始問題的高精度數值解,故稱之為準解析解。第9頁,課件共86頁,創作于2023年2月例:>>[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第10頁,課件共86頁,創作于2023年2月驗證:>>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第11頁,課件共86頁,創作于2023年2月例:求解(含變量倒數)>>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第12頁,課件共86頁,創作于2023年2月例:求解(帶參數方程)>>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]第13頁,課件共86頁,創作于2023年2月7.1.3一般非線性方程數值解非線性方程的標準形式為f(x)=0函數
fzero格式x=fzero(fun,x0)%用fun定義表達式f(x),x0為初始解。
x=fzero(fun,x0,options)
[x,fval]=fzero(…)%fval=f(x)
[x,fval,exitflag]=fzero(…)
[x,fval,exitflag,output]=fzero(…)
說明該函數采用數值解求方程f(x)=0的根。第14頁,課件共86頁,創作于2023年2月例:求的根解:>>fun='x^3-2*x-5';>>z=fzero(fun,2)%初始估計值為2z=2.0946>>formatlong>>opt=optimset('Tolx',1.0e-8);>>y=fzero('x^3-2*x-5',2,opt)y=2.09455148211709第15頁,課件共86頁,創作于2023年2月7.1.4一般非線性方程組數值解格式:最簡求解語句
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)第16頁,課件共86頁,創作于2023年2月例:自編函數: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第17頁,課件共86頁,創作于2023年2月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第18頁,課件共86頁,創作于2023年2月>>[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初值改變有可能得出另外一組解。故初值的選擇對解的影響很大,在某些初值下甚至無法搜索到方程的解。第19頁,課件共86頁,創作于2023年2月例:用solve()函數求近似解析解>>symst;solve(exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)-0.5)ans=.67374570500134756702960220427474%不允許手工選擇初值,只能獲得這樣的一個解。可先用用圖解法選取初值,再調用fsolve()函數數值計算第20頁,課件共86頁,創作于2023年2月>>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第21頁,課件共86頁,創作于2023年2月重新設置相關的控制變量,提高精度。>>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第22頁,課件共86頁,創作于2023年2月例:求的根解:化為標準形式設初值點為x0=[-5-5]。functionF=myfun(x)F=[2*x(1)-x(2)-exp(-x(1));-x(1)+2*x(2)-exp(-x(2))];>>x0=[-5;-5];%初始點>>options=optimset('Display','iter');%顯示輸出信息>>[x,fval]=fsolve(@myfun,x0,options)
第23頁,課件共86頁,創作于2023年2月NormofFirst-orderTrust-regionIterationFunc-countf(x)stepoptimalityradius0347071.22.29e+00411612003.415.75e+0031293147.0211.47e+0031312854.45213881415239.5271107151867.0412130.8162116.704219.0517242.4278812.2618270.0326580.7595110.2062.59307.03149e-0060.1119270.002942.510333.29525e-0130.001691326.36e-0072.5Optimizationterminated:first-orderoptimalityislessthanoptions.TolFun.x=0.567143031397360.56714303139736fval=1.0e-006*-0.40590960570519-0.40590960570519第24頁,課件共86頁,創作于2023年2月例:求矩陣x使其滿足方程,并設初始解向量為x=[1,1;1,1]。解:functionF=myfun(x)F=x*x*x-[1,2;3,4];>>x0=ones(2,2);%初始解向量>>options=optimset('Display','off');%不顯示優化信息>>[x,Fval,exitflag]=fsolve(@myfun,x0,options)x=-0.12910.86021.29031.1612Fval=1.0e-003*0.1541-0.11630.0109-0.0243exitflag=1第25頁,課件共86頁,創作于2023年2月7.2無約束最優化問題求解
7.2.1解析解法和圖解法第26頁,課件共86頁,創作于2023年2月例:>>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])%繪制出選定區間內一階導函數曲線第27頁,課件共86頁,創作于2023年2月>>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)第28頁,課件共86頁,創作于2023年2月單變量函數求最小值的(數值解法)%求解區間優化問題標準形式為:s.t.函數
fminbnd格式x=fminbnd(fun,x1,x2)x=fminbnd(fun,x1,x2,options)[x,fval]=fminbnd(…)%fval為目標函數的最小值[x,fval,exitflag]=fminbnd(…)
exitflag為終止迭代的條件,若exitflag>0,收斂于x,exitflag=0,表示超過函數估計值或迭代的最大數字,exitflag<0表示函數不收斂于x;
[x,fval,exitflag,output]=fminbnd(…)
output為優化信息,若output=iterations表示迭代次數,output=funccount表示函數賦值次數,output=algorithm表示所使用的算法
第29頁,課件共86頁,創作于2023年2月例:
計算下面函數在區間(0,1)內的最小值。解:>>[x,fval,exitflag,output]=fminbnd('(x^3+cos(x)+x*log(x))/exp(x)',0,1)x=0.5223fval=0.3974exitflag=1output=iterations:9funcCount:11algorithm:'goldensectionsearch,parabolicinterpolation'第30頁,課件共86頁,創作于2023年2月例:在[0,5]上求下面函數的最小值
解:
functionf=myfun(x)f=(x-3).^2-1;>>x=fminbnd(@myfun,0,5)x=3第31頁,課件共86頁,創作于2023年2月7.2.2基于MATLAB的數值解法第32頁,課件共86頁,創作于2023年2月例:>>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第33頁,課件共86頁,創作于2023年2月
>>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()函數,但當所選函數高度不連續時,使用fminsearch效果較好。故若安裝了最優化工具箱則應調用fminunc()函數。第34頁,課件共86頁,創作于2023年2月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第35頁,課件共86頁,創作于2023年2月>>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第36頁,課件共86頁,創作于2023年2月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])%測試算法的函數第37頁,課件共86頁,創作于2023年2月>>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第38頁,課件共86頁,創作于2023年2月%求梯度向量(比較引入梯度的作用,但梯度的計算也費時間)>>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第39頁,課件共86頁,創作于2023年2月7.2.5非線性最小二乘
函數
lsqnonlin格式x=lsqnonlin(fun,x0)x=lsqnonlin(fun,x0,lb,ub)x=lsqnonlin(fun,x0,lb,ub,options)%x0為初始解向量;fun為,i=1,2,…,m,
lb、ub定義x的下界和上界,options為指定優化參數,若x沒有界,則lb=[],ub=[]。第40頁,課件共86頁,創作于2023年2月例:求下面非線性最小二乘問題初始解向量為x0=[0.3,0.4]。解:先建立函數文件,并保存為myfun.m.
由于lsqnonlin中的fun為向量形式而不是平方和形式,因此,myfun函數應由建立:
k=1,2,…,10
第41頁,課件共86頁,創作于2023年2月functionF=myfun10(x)k=1:10;F=2+2*k-exp(k*x(1))-exp(k*x(2));然后調用優化程序:
>>x0=[0.30.4];>>[x,resnorm]=lsqnonlin(@myfun10,x0)Optimizationterminated:normofthecurrentstepislessthanOPTIONS.TolX.x=0.25780.2578resnorm=124.3622第42頁,課件共86頁,創作于2023年2月7.3有約束最優化問題的計算機求解
7.3.1約束條件與可行解區域有約束最優化問題的一般描述:對于一般的一元問題和二元問題,可用圖解法直接得出問題的最優解。第43頁,課件共86頁,創作于2023年2月例:用圖解方法求解:>>[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第44頁,課件共86頁,創作于2023年2月7.3.2線性規劃問題的計算機求解第45頁,課件共86頁,創作于2023年2月例:求解>>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)第46頁,課件共86頁,創作于2023年2月Optimizationterminatedsuccessfully.x=19.78500.00003.320011.38502.5700f_opt=-89.5750key=1%求解成功c=iterations:5algorithm:'medium-scale:activeset'cgiterations:[]第47頁,課件共86頁,創作于2023年2月例:求解>>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;ff.TolCon=1e-20;ff.Display='iter';>>[x,f_opt,key,c]=linprog(f,A,B,Aeq,Beq,xm,xM,[0;0;0;0],ff)第48頁,課件共86頁,創作于2023年2月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+001Iter10: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'第49頁,課件共86頁,創作于2023年2月7.3.3二次型規劃的求解(線性)第50頁,課件共86頁,創作于2023年2月例:求解>>H=diag([2,2,2,2]);f=[-2,-4,-6,-8];>>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)第51頁,課件共86頁,創作于2023年2月例:求解下面二次規劃問題解:則
第52頁,課件共86頁,創作于2023年2月>>H=[1-1;-12];f=[-2;-6];>>A=[11;-12;21];b=[2;2;3];>>lb=zeros(2,1);>>[x,fval,exitflag,output,lambda]=quadprog(H,f,A,b,[],[],lb)x=%最優解0.66671.3333fval=%最優值-8.2222exitflag=%收斂1output=iterations:3algorithm:'medium-scale:active-set'firstorderopt:[]cgiterations:[]第53頁,課件共86頁,創作于2023年2月例:求二次規劃的最優解maxf(x1,x2)=x1x2+3sub.tox1+x2-2=0解:化成標準形式:>>H=[0,-1;-1,0];f=[0;0];Aeq=[11];>>[x,fval,exitflag,output]=quadprog(H,f,[],[],Aeq)第54頁,課件共86頁,創作于2023年2月6.3.4一般非線性規劃問題的求解第55頁,課件共86頁,創作于2023年2月例:求解目標函數: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=[];第56頁,課件共86頁,創作于2023年2月>>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第57頁,課件共86頁,創作于2023年2月簡化非線約束函數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%從略(計算結果同上一樣)第58頁,課件共86頁,創作于2023年2月例:利用梯度求解梯度函數:>>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)];第59頁,課件共86頁,創作于2023年2月>>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第60頁,課件共86頁,創作于2023年2月6.3.5約束線性最小二乘
有約束線性最小二乘的標準形式為:其中:C、A、Aeq為矩陣;d、b、beq、lb、ub、x是向量。第61頁,課件共86頁,創作于2023年2月函數lsqlin格式x=lsqlin(C,d,A,b)x=lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options)%求在約束條件下,方程Cx=d的最小二乘解x。Aeq、beq滿足等式約束,若沒有不等式約束,則設A=[],b=[]。lb、ub滿足,若沒有等式約束,則Aeq=[],beq=[]。x0為初始解向量,若x沒有界,則lb=[],ub=[]。options為指定優化參數
[x,resnorm,residual,exitflag,output,lambda]=lsqlin(…)%resnorm=norm(C*x-d)^2,即2-范數。residual=C*x-d,即殘差。exitflag為終止迭代的條件output表示輸出優化信息lambda為解x的Lagrange乘子第62頁,課件共86頁,創作于2023年2月例:求解下面系統的最小二乘解系統:Cx=d約束:先輸入系統系數和x的上下界:C=[0.95010.76200.61530.4057;…0.23110.45640.79190.9354;…0.60680.01850.92180.9169;…0.48590.82140.73820.4102;…0.89120.44470.17620.8936];d=[0.0578;0.3528;0.8131;0.0098;0.1388];A=[0.20270.27210.74670.4659;…0.19870.19880.44500.4186;…0.60370.01520.93180.8462];第63頁,課件共86頁,創作于2023年2月b=[0.5251;0.2026;0.6721];lb=-0.1*ones(4,1);ub=2*ones(4,1);然后調用最小二乘命令:
>>[x,resnorm,residual,exitflag,output,lambda]=lsqlin(C,d,A,b,[],[],lb,ub)x=-0.1000-0.10000.21520.3502resnorm=0.1672第64頁,課件共86頁,創作于2023年2月residual=0.04550.0764-0.35620.16200.0784exitflag=1%說明解x是收斂的output=iterations:4algorithm:'medium-scale:active-set'firstorderopt:[]cgiterations:[]第65頁,課件共86頁,創作于2023年2月lambda=lower:[4x1double]upper:[4x1double]eqlin:[0x1double]ineqlin:[3x1double]%通過lambda.ineqlin可查看不等式約束是否有效。>>lambda.ineqlinans=00.23920第66頁,課件共86頁,創作于2023年2月7.4整數規劃問題的計算機求解7.4.1整數線性規劃問題的求解(matlab2009a有問題)A、B線性等式和不等式約束,,約束式子由ctype變量控制,intlist為整數約束標示,how=0表示結果最優,2為無可行解,其余失敗。第67頁,課件共86頁,創作于2023年2月例:>>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)res=1904105b=%因為返回的b=0,表示優化成功0第68頁,課件共86頁,創作于2023年2月>>[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,一般計算機配置下實現不了,故求解整數規劃時不適合采用窮舉算法。第69頁,課件共86頁,創作于2023年2月次最優解>>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第70頁,課件共86頁,創作于2023年2月7.4.2一般非線性整數規劃問題與求解(matlab2009a有問題)第71頁,課件共86頁,創作于2023年2月err字符串為空,則返回最優解。該函數尚有不完全之處,解往往不是精確整數,可用下面語句將其化成整數。第72頁,課件共86頁,創作于2023年2月例: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=19.000004.000010.00005.0000第73頁,課件共86頁,創作于2023年2月>>intlist=[1,0,0,1,1]';>>xm=[0,0,3.32,1,3]';>>[errmsg,f,X]=bnb20('c6miopt',x0,intlist,xm,xM,A,B,Aeq,Beq);XX=19.000003.800011.00003.0000第74頁,課件共86頁,創作于2023年2月例:編寫函數:functiony=c7fun1(x)y=100*(x(2)-x(1)^2)^2+(4.5543-x(1))^2;>>x0=[1;1];xm=-100*[1;1];xM=100*[1;1];>>A=[];B=[];Aeq=[];Beq=[];intlist=[1,1]';>>[errmsg,f,x]=bnb20('c6fun1',x0,intlist,xm,xM,A,B,Aeq,Beq);x'ans=5.0000000000000025.00000001055334第75頁,課件共86頁,創作于2023年2月>>iflength(errmsg)==0,x=round(x),end;x=x';x=525%縮小范圍。>>xm=-20*[1;1];
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機二級考試經驗考量試題及答案
- 法律考試題庫及答案詳解
- 數據完整性與安全試題及答案
- 風險管理的創新與實踐案例試題及答案
- 2025企業合作協議合同
- 數據庫范式及其應用試題及答案
- 22025年經濟法精練試題及答案
- 了解Msoffice考試試題及答案技巧
- 經濟法課程學習心得試題及答案
- 2025年Web考試集訓營試題及答案總結
- 基于主題意義的小學英語單元整體教學 論文
- 化工總經理崗位職責
- 小學英語復習講座88課件
- 醫院發生意外自殺的應急預案流程
- 中山職業技術學院宿舍寬帶接入校園網連接技術方案
- 經濟學論文的選題與寫作
- 癌性傷口的處理教學課件
- 過熱蒸汽壓力控制設計
- 血栓與止血檢驗及其相關疾病-血栓與止血檢驗(血液學檢驗課件)
- 深圳中考志愿表格模板
- 國際志愿服務培訓與實踐-浙江外國語學院中國大學mooc課后章節答案期末考試題庫2023年
評論
0/150
提交評論