鲍威尔法VB程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

鲍威尔法实验报告姓名:刘阳阳学号:1201013009鲍威尔法程序设计1方法(算法)介绍1.1方法原理简介鲍威尔法——多维无约束优化算法是在无约束优化算法之一,首先选取一组共轭方向,从某个初始点出发,求目标函数在这些方向上的极小值点,然后以该点为新的出发点,重复这一过程直到获得满意解,其优点是不必计算目标函数的梯度就可以在有限步内找到极值点。鲍威尔法是以共轭方向为基础的收敛较快的直接法之一,是一种十分有效的算法。在无约束方法中许多算法都是以共轭方向作为搜索方向,它们具有许多特点。根据构造共轭方向的原理不同,可以形成不同的共轭方向法。基本算法1)任选一初始点x0,再选两个线性无关的向量,如坐标轴单位向量e1=[1,0]T和e2=[0,1]T作为初始搜索方向。2)从x0出发,顺次沿e1,e2作一维搜索,得x10,x20点,两点连线得一新方向d1=x20-x0。用d1代替e1形成两个线性无关向量d1,e2,作为下一轮迭代的搜索方向。再x20出发,沿d1作一维搜索得点x01,作为下一轮迭代的初始点。3)从x1出发,顺次沿,e2。d1作一维搜索,得到点x11,x21,两点连线得一新方向:d2=x21-x11。4)沿d2d2作一维搜索得点.x2,即是二维问题的极小点x*把二维情况的基本算法扩展到n维,则鲍威尔基本算法的要点是:在每一轮迭代中总有一个始点(第一轮的始点是任选的初始点)和n个线性独立的搜索方向。从始点出发顺次沿n个方向作一维搜索得一终点,由始点和终点决定了一个新的搜索方向。用这个方向替换原来n个方向中的一个,于是形成新的搜索方向组。替换的原则是去掉原方向组的第一个方向而将新方向排在原方向的最后。此外规定,从这一轮的搜索终点出发沿新的搜索方向作一维搜索而得到的极小点,作为下一轮迭代的始点。这样就形成算法的循环。1.2程序设计框图1.3程序说明本程序使用VB程序语言设计,在该程序中插入command模块picture模块利用矩阵函数语句迭代计算出鲍威尔最小值并将之在picture模块中显示出2例题计算2.1例题:用鲍威尔法求f(x1,x2)=10*(x1+x2-5)^2+(x1-x2)^22.2计算结果与分析VB程序计算结果如图:经演算迭代后得到结果为:X0^2=2.49952.5091F0=f0(x0^2)=0.0008可见已足够接近极值点x*=(2.5,2.5)T及极小值f(x*)=02.3结论经验算鲍威尔法VB程序计算结果正确且为最优解。附录I:源程序DimNCOM,PCOM(50),XICOM(50)PrivateSubCommand1_Click()np=2'np个坐标轴,取x轴和Y轴两个方向ndim=npDimp(2),xI(2,2)Fori=1TonpForj=1TonpxI(i,j)=0#NextjNextixI(1,1)=1#xI(2,2)=1#p(1)=1.5p(2)=1.5Callpowell(p(),xI(),ndim,np,ftol,iter,fret)Picture1.FontSize=18Picture1.PrintTab(2);**********************************************************Picture1.PrintTab(4);函数:F(x1,x2)=10*(x1+x2-5)^2+(x1-x2)^2Picture1.PrintTab(4);已知条件:n=2;迭代初始点:xk(n)=[0,0]TPicture1.PrintTab(4);一维搜索步长tt=0.005,一维迭代精度及收敛精度ad=0.0000001Picture1.PrintTab(2);**********************************************************Picture1.PrintTab(4);迭代次数:;Format$(iter,##)Fori=1TonpPicture1.PrintTab(4);极值点X;i;=;Format(p(i),#0.#####0)NextiPicture1.PrintTab(4);极小值Fx=;Format(fret,#0.#####0)Picture1.PrintTab(2);**********************************************************EndSubFunctionfunc(x)func=f1dim(x)EndFunctionFunctionfunc2(x(),n)'方程函数子程序AA=10*(x(1)+x(2)-5)^2+(x(1)-x(2))^2func2=AAEndFunctionSubpowell(p(),xI(),n,np,ftol,iter,fret)itmax=200'迭代最大值为200次Dimpt(20),ptt(20),xit(20)fret=func2(p(),n)Forj=1Tonpt(j)=p(j)Nextjiter=0DoDoDoiter=iter+1fp=fretibig=0del=0#Fori=1TonForj=1Tonxit(j)=xI(j,i)Nextjfptt=fretCalllinmin(p(),xit(),n,fret)IfAbs(fptt-fret)delThendel=Abs(fptt-fret)ibig=iEndIfNextiIf2#*Abs(fp-fret)=ftol*(Abs(fp)+Abs(fret))ThenErasexit,ptt,ptExitSubEndIfIfiter=itmaxThenPrintpowellexceedingmaximumiterationaExitSubEndIfForj=1Tonptt(j)=2#*p(j)-pt(j)xit(j)=p(j)-pt(j)pt(j)=p(j)Nextjfptt=func2(ptt(),n)LoopWhilefptt=fppDUM=fp-2*fret+fpttT=2#*DUM*(fp-fret-del)^2-del*(fp-fptt^2)LoopWhileT=0#Calllinmin(p(),xit(),n,fret)Forj=1TonxI(j,ibig)=xit(j)NextjLoopEndSubSublinmin(p(),xI(),n,fret)'求一维搜索极小值TOL=0.0001'迭代精度NCOM=n'搜索方向的个数Forj=1TonPCOM(j)=p(j)XICOM(j)=xI(j)NextjAX=a#BX=1#'初始步长设为1CallMNBRAK(AX,BX,CX,FA,FX,FB)fret=GOLDEN(AX,BX,CX,TOL,XMIN)Forj=1TonxI(j)=XMIN*xI(j)p(j)=p(j)+xI(j)NextjEndSubFunctionf1dim(x)'矩阵相乘函数子程序Dimxt(50)Forj=1ToNCOMxt(j)=PCOM(j)+x*XICOM(j)Nextjf1dim=func2(xt(),NCOM)ErasextEndFunctionSubMNBRAK(AX,BX,CX,FA,FB,FC)'用进退法求解区间GOLD=1.618034GLIMIT=100TINY=1E-20FA=func(AX)FB=func(BX)IfFBFAThenDUM=AXAX=BXBX=DUMDUN=FBFB=FAFA=DUMEndIfCX=BX+GOLD*(BX-AX)FC=func(CX)1IfFB=FCThenR=(BX-AX)*(FB-FC)Q=(BX-CX)*(FB-FA)DUM=Q-RIfAbs(DUM)TINYThenDUM=TINYU=BX-((BX-CX)*Q-(BX-AX)*R)/(2*DUM)ULIM=BX+GLIMIT*(CX-BX)If(BX-U)*(U-CX)0ThenFU=func(U)IfFUFCThenAX=BXFA=FBBX=UFB=FUExitSubElseIfFUFBThenCX=UFC=FUExitSubEndIfU=CX+GOLD*(CX-BX)FU=func(U)ElseIf(CX-U)*(U-ULIM)0ThenFU=func(U)IfFUFCThenBX=CXCX=UU=CX+GOLD*(CX-BX)FB=FCFC=FUFU=func(U)EndIfElseIf(U-ULIM)*(ULIM-CX)0ThenU=ULIMFU=func(U)ElseU=CX+GOLD*(CX-BX)FU=func(U)EndIfAX=BXBX=CXCX=UFA=FBFB=FCFC=FUGoTo1EndIfEndSubFunctionGOLDEN(AX,BX,CX,TOL,XMIN)'黄金分割法子程序R=0.61803399C=0.38196601X0=AXX3=CXIfAbs(CX-BX)Abs(BX-AX)ThenX1=BXX2=BX+C*(CX-BX)ElseX2=BXX1=BX-C*(BX-AX)EndIfF1=func(X1)F2=func(X2)WhileAbs(X3-X0)TOL*(Abs(X1)+Abs(X2))IfF2F1ThenX0=X1X1=X2X2=R*X1+C*X3F0=F1F1=F2F2=func(X2)ElseX3=X2X2=X1X1=R*X2+C*X0F3=F2F2=F1F1=func(X1)EndIfWendIfF1F2ThenGOLDEN=F1XMIN=X1ElseGOLDEN=F2XMIN=X2EndIfEndFunction

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功