1、基于 Matlab 的共轭梯度算法指导老师: 姓 名: 学 号: 班 级: 日 期: 基于 Matlab 的共轭梯度算法1、实验目的及要求(1)熟悉使用共轭梯度法求解无约束非线性规划问题的原理;(2)在掌握原理的基础上熟练运用此方法解决问题(3)学会利用计算机语言编写程序来辅助解决数学问题;(4)解决问题的同时分析问题,力求达到理论与实践的统一; (5)编写规范的实验报告.实验内容2、实验原理1.基本思想:把共轭性与最速下降方法相结合,利用已知点处的梯度构造一组共轭方向,并沿这组方向进行搜索,求出目标函数的极小点。根据共轭方向的基本性质,这种方法具有二次终止性。在各种优化算法中,共轭梯度法是非
2、常重要的一种。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。2.程序流图:三、实验代码通过查阅相关资料,编写一个基于 Matlab 的共轭梯度算法,具体代码如下:function f=grad_2d(x0,t) %用共轭梯度法求已知函数 f(x1,x2)=x12+2*x22-4*x1-2*x1*x2 的极值点%已知初始点坐标:x0%已知收敛精度:t %求得已知函数的极值:fx=x0; syms xi yi a; %定义自变量,步长为符号变量f=xi2+2*yi2-4*yi-2*xi*yi; %创建符号表达式 ffx=diff(f,xi); %求表达式 f 对 xi 的一
3、阶求导fy=diff(f,yi); %求表达式 f 对 yi 的一阶求导 fx=subs(fx,xi,yi,x0); %代入初始点坐标计算对 xi 的一阶求导实值 fy=subs(fy,xi,yi,x0); %代入初始点坐标计算对 yi 的一阶求导实值fi=fx,fy; %初始点梯度向量 count=0; %搜索次数初始为 0 while double(sqrt(fx2+fy2)t %搜索精度不满足已知条件 s=-fi; %第一次搜索的方向为负梯度方向 if count=0 s=-fi; elses=s1; endx=x+a*s; %进行一次搜索后的点坐标 f=subs(f,xi,yi,x);
4、 %构造一元搜索的一元函数 (a) f1=diff(f); %对函数 (a)进行求导 f1=solve(f1); %得到最佳步长 a if f1=0 ai=double(f1); %强制转换数据类型为双精度数值 elsebreak %若 a=0,则直接跳出循环,此点即为极值点 endx=subs(x,a,ai); %得到一次搜索后的点坐标值 f=xi2+2*yi2-4*xi-2*xi*yi; fxi=diff(f,xi); fyi=diff(f,yi); fxi=subs(fxi,xi,yi,x); fyi=subs(fyi,xi,yi,x); fii=fxi,fyi; %下一点梯度向量d=(
5、fxi2+fyi2)/(fx2+fy2); s1=-fii+d*s; %下一点搜索的方向向量 count=count+1; %搜索次数加 1 fx=fxi; fy=fyi; %搜索后终点坐标变为下一次搜索的始点坐标endx,f=subs(f,xi,yi,x),count %输出极值点,极小值以及搜索次数end四、实验结果在命令窗口输入:f=grad_2d(1,1,0.0000001)输出结果如下:x =4.0000 2.0000f =-8.0000count = 75f =-8.0000当在命令窗口输入如下命令时:f=grad_2d(2,1,0.0000001)x =4.0000 2.0000
6、f =-8.0000count =22f =-8.0000当在命令窗口输入如下命令时:f=grad_2d(2,1,0.001)x = 3.9996 1.9999f =-8.0000count =12f =-8.0000由以上结果可知:(1.)初始点不同搜索次数不同(2.)无论初始点为多少,精度相同时最终结果极值点都是(4.0000,2.0000)(3.)当初始点相同时,若精度不一样搜索次数和最终结果会有差异但大致相同。五、总结从共轭梯度法的计算过程可以看出,第一个搜索方向取作负梯度方向,这就 是最速下降法。其余各步的搜索方向是将负梯度偏转一个角度,也就是对负梯度进行修正。所以共轭梯度法实质上是
7、对最速下降法进行的一种改进,故它又被称作旋转梯度法在自然科学和工程技术中很多问题的解决常常归结为约束优化或无约束优化的问题。首先根据实际的机械问题建立相应的数学模型,即应用数学形式描述实际设计问题。同时需要用专业的知识确定设计的限制条件和所追求的目标,确立各设计变量之间的相互关系等。一旦建立数学模型,应用数学规划理论的方法,根据数学模型的特点可以选择适当的优化方法,进而可以选择适当的计算机程序,以计算作为工具求得最佳优化设计参数。通过学习发现,共轭梯度法是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算 Hesse 矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法 之一。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。如何把实际的工程技术问题转化为理论的数学模型,进行分析运算求解,是检验我们是否学好这一课的关键。这可以让我们在以后的研究生生涯中有更加透彻的理解能力,扎实地撑握机械知识,培养创造性思维,专业技能有新的提高6、调试截图