资源描述:
《非线性优化算法及实现.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编号:26最优化实验报告实验题目:非线性优化算法及实现实验成绩(指导教师填):院(系):数学与计算科学专业:信息与计算科学学生姓名:刘建海学号:指导教师:李丰兵实验类型:验证性设计性工综合性其它2009年11月21日一、实验目的1、用matlab的优化工具箱对无约束优化问题进行算法实现。2、培养matlab编程与上机调试能力。二、实验内容1.利用matlab的优化工具箱求解以下问题:1)求函数在处的的零点及在内的最大值;>>f=@(x)1/((x-0.3)^2+0.01)+1/((x-0.9)^2+0.04)-6>>z=fzero(f,1)z=1.2995>>fun=inline('-
2、((1/((x-0.3)^2+0.01))+(1/((x-0.9)^2+0.04))-6)');[x,fval]=fminbnd(fun,-0.5,1.5)x=0.3004fval=-96.5014所以函数的最大值为:96.50142)求函数在点附近的最小值。>>fun=inline('100*(x(2)-x(1)^2)^2+(1-x(1))^2');[x,fval]=fminsearch(fun,[1;1])x=11fval=02.编写函数文件,实现Fibonacci法,并求解下列问题1)求函数在内的极大值function[x,minf]=minFBNQ(f,a,b,deilta,e
3、ps)formatlong;ifnargin==4eps=1.0e-6;endF=ones(2,1);N=(b-a)/eps;c=F(2)-N;n=2;whilec<0n=n+1;F(n)=F(n-1)+F(n-2);c=F(n)-N;endl=a+F(n-2)*(b-a)/F(n);u=a+F(n-1)*(b-a)/F(n);K=1;while1f1=subs(f,findsym(f),l);fu=subs(f,findsym(f),u);iff1>fua=l;l=u;k=1;u=a+F(n-k-1)*(b-a)/F(n-k);if(k==n-3)break;elsek=k+1;en
4、delseb=u;u=1;l=a+F(n-k-2)*(b-a)/F(n-k);if(k==n-3)break;elsek=k+1;endendendifk==disp('找不到最小值!');x=NaN;minf=NaN;return;endu=l+delta;f1=subs(f,findsym(f),l);fu=subs(f,findsym(f),u);iff1>fua=l;elseb=l;endx=(a+b)/2;minf=subs(f,findsym(f),x);formatshort;运行结果:>>symsx;>>f=(sin(x))^6*tan(1-x)*exp(30*x);>
5、>[x,fx]=minFBNQ(F,0,1,0.05);x=0.9707fx=-4.1086e+010则f(x)的极大值为:4.1086e+0101)求函数在内的极小值>>symst;>>f=exp(-t)+exp(t);>>[x,fx]=minFBNQ(F,-1,1,0.05)x=-1.4808e-006fx=2.00003.编写函数文件,实现FR共轭梯度法或拟牛顿法(BFGS校正),并求解下列问题1),df文件:functiondy=df(x)symsyx1x2y=(x1-x2)^4+(x1-2)^2*x2^2+(x2+1)^2;y1=diff(y,x1);y2=diff(y,x2
6、);dy1=subs(y1,'x1',x(1));dy1=subs(dy1,'x2',x(2));dy2=subs(y2,'x1',x(1));dy2=subs(dy2,'x2',x(2));dy=[dy1,dy2]';f文件:functiony=f(x)y=(x(1)-x(2))^4+(x(1)-2)^2*x(2)^2+(x(2)+1)^2;输入:xk=[11]',eps=10^(-5),[optx,opty]=gong_t(xk,eps)输出:optx=0.1347-0.2056opty=0.79162),df文件:functiondy=df(x)symsyx1x2y=(1-x1)
7、.^2+2*(x2-x1.^2).^2;y1=diff(y,x1);y2=diff(y,x2);dy1=subs(y1,'x1',x(1));dy1=subs(dy1,'x2',x(2));dy2=subs(y2,'x1',x(1));dy2=subs(dy2,'x2',x(2));dy=[dy1,dy2]';f文件:functiony=f(x)y=(1-x(1)).^2+2*(x(2)-x(1).^2).^2;输入:xk=[00]',esp=