1、广东工业大学实验报告 应用数学 学院 信息与计算科学 专业1班 成绩评定_学号 3108009009 姓名 蔡宝柱 教师签名_实验项目名称:算法设计 所属课程名称:最优化方法一、 实验目的1利用所学的程序设计语言与编程技术或数学软件(Matlab),结合各种最优化方法,通过设计算法求解最优化问题,加强对优化算法的理解与应用。2进一步锻炼培养学生的思考问题与解决问题的能力。二、 实验内容和要求针对给出的最优化问题,设计出至少三种最优化算法求解,要求根据结果对给出算法进行优劣比较。Min f(x)=三、 实验方法、步骤及结果测试1、选择适当的算法测试的环境为Matlab;2、最速下降法计算步骤St
2、ep1:给出Step2: 计算如果停止迭代,为近似最优解;否则转Step 3.Step3: 计算下降方向计算步长因子令 转步. 最速下降法计算结果x=xiajiang(1 1,0.01)x =3.9922 1.99413、共轭梯度法计算步骤:给定初始点及精度;Step2:计算,令Step3:求决定,计算,Step4: 则迭代结束,否则转5Step5:若,计算令转回Step3若令,转回2共轭梯度法计算结果x=Tidu(1 1,0.01)x =3.9999 2.00184、Powell法的计算步骤Step1:给定初始点及精度;个初始的线性无关的搜索方向为令Step2:进行一维搜索,决定,使得:令令
3、转回Step2,否则转回Step3Step3:若计算结束,取否则求整数Step4:令则方向不变,令返回Step2;否则令转向Step5Step5:求,使得令转回Step2Powell法的计算结果x=Powell(1 1,0.01)x = 3.9717 1.9859四、 思考题通过实验,总结所选用算法的优缺点;1、最速下降法优点(1)、程序设计简单计算量小, 存储量小, 并且计算效率在最初几步迭代时较高,常与其他方法一起使用. (2)、 对初始点没有特别要求, 有着很好的全局收敛性.缺点最速下降法是线性收敛的,但当接近最优解时,收敛速度很慢原因:(1)、仅反映 在处的局部性质(2)、相继两次迭代
4、中搜索方向是正交的: 2、共轭梯度法优点收敛速度优于最速下降法,存贮量小,计算简单. 适合于优化变量数目较多的中等规模优化问题. 缺点当时,收敛速度是线性的. 收敛速度不如Newton法快.3、Powell法优点:(1)、Powell法也是一种共轭方向法. 由于它仅仅需要计算目标函数值而不必求其导数值,因此,原始Powell法比7.3节中共扼方向法(包括共扼梯度法)更具实用性(2)、Powell法若每次迭代的前n 个搜索方向都线性无关时,则Powell法具有二次终止性(3)、Powell法可用于求解一般无约束优化问题缺点:在Powell法中,必须保持每次迭代中前n个搜索方向线性无关,否则将永远
5、得不到问题的最优解.五、 附件:1、 最速下降法程序代码function x=xiajiang(x0,e)syms x1 x2;f1=x12+2*x22-2*x1*x2-4*x1;gf1=jacobian(f1,x1,x2);n=0;while 1 g0=subs(subs(gf1,x0(1),x0(2); if norm(g0)e break; end syms k; t=x0-g0*k; d=diff(subs(f1,x1,x2,t),k); k0=eval(solve(d,k); x0=x0-g0*k0; n=n+1;endx=x0;2、共轭梯度法代码function x=Tidu(x0
6、,e)syms x1 x2;f1=x12+2*x22-2*x1*x2-4*x1;gf1=jacobian(f1,x1,x2);n=0;d1=subs(subs(gf1,x0(1),x0(2);syms k;t=x0-d1*k;while 1 d=diff(subs(f1,x1,x2,t),k); k0=eval(solve(d,k); x0=x0-d1*k0; d2=subs(subs(gf1,x0(1),x0(2); if norm(d2)=e break; end if n=1 t=x0-d2*k; else u=norm(d2)/norm(d1); t=u2*t-d2; n=n+1; e
7、nd d1=d2;endx=x0;3、Powell法程序代码function x=Powell(x0,e)syms x1 x2;f1=x12+2*x22-2*x1*x2-4*x1;s0=1 0;s1=0 1;n=0;while 1 syms k; t1=x0-s0*k; d=diff(subs(f1,x1,x2,t1),k); k1=eval(solve(d,k); t2=x0-s1*k; d=diff(subs(f1,x1,x2,t2),k); k2=eval(solve(d,k); a1=x0-s0*k1; a2=a1-s1*k2; if norm(a2-x0)b2-b3 j=0;b=b1-b2; else j=1;b=b2-b3; end a3=2*a2-x0; b4=subs(f1,x1,x2,a3); if 2*bb1-2*b4+b3 x0=a2; else s2=a2-x0; if j=0 s0=s1;s1=s2; else s1=s2; end t3=a2-s2*k; d=diff(subs(f1,x1,x2,t3),k); k3=eval(solve(d,k); x0=a2-s2*k3; endendx=x0;