1、大连民族学院数 学 实 验 报 告课程: 最优化方法 实验题目: 共轭梯度法 系别: 理学院 专业: 信息与计算科学 姓名: 历红影 班级: 信息102班 指导教师: 葛仁东 完成学期: 2013 年 10 月 5 日实验目的:1. 熟悉Matlab上机环境,了解Matlab的相关知识;2. 学习无约束最优化方法,加深对共轭梯度法的理解;3. 学习共轭梯度的算法并编写相应的Matlab程序,;4. 学会利用共轭梯度法求解最优化问题。实验内容:(问题、数学模型、要求、关键词)问题: 用FR共轭梯度法解极小化问题:数学模型:共轭梯度法是一个典型的共轭方向法,它的每一个共轭方向是相互共轭的而这些搜索
2、方向仅仅是负梯度方向与上一次迭代的搜索方向的组合。因此,存储量少计算方便记:左乘并使得Hestenes-Stiefel)关键字: 共轭梯度 极小化问题实验方法和步骤(包括数值公式、算法步骤、程序):数值公式:可以改写为:注意到对于正定二次函数: 其中是方程组的残量,以及: 下面给出关于正定二次函数极小化的共轭梯度法。算法步骤:Step 1:(初始步)给出;计算令Step 2:如果停止Step 3:计算:步4 令转步2程序:function x,iter=cg(G,b,x0,max_iter)x = x0;tolerance=1.0e-6;fprintf(n x0=);fprintf(%10.6
3、f,x0);r=G*x-b;d=-r;for k=1:max_iter if norm(r,2) G=3 -1; -1 1;b=2 0;x0 =-2 4;max_iter=1000;fprintf(n);fprintf(= n);y,iter=cg(G,b,x0,max_iter);fprintf(n);fprintf(Iterative number: n %d n,iter);fprintf(Solution:n);fprintf(%10.6f,y);fprintf(nn=nn)输出结果为:= x0= -2.000000 4.000000 x1= 1.529412 2.235294 x2= 1.000000 1.000000 Algorithm finds a soluntion!Iterative number: 2 Solution: 1.000000 1.000000=结果分析:函数从初始点开始迭代,计算两次,得出最优解。实验的启示:1.通过这次实验,更加熟悉了共轭梯度法求解最优化问题,加深了对解共轭梯度法的计算方法的理解。2.利用Matlab的巨大功能来帮助我们学习,进一步提高我们的学习效率。3.了解到Matlab的功能之大,所以我们要好好的学习这个软件。5