《(最新整理)实验2最速下降法和共轭梯度法的程序设计》由会员分享,可在线阅读,更多相关《(最新整理)实验2最速下降法和共轭梯度法的程序设计(7页珍藏版)》请在人人文库网上搜索。
1、完整)实验2 最速下降法和共轭梯度法的程序设计(完整)实验2 最速下降法和共轭梯度法的程序设计编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)实验2 最速下降法和共轭梯度法的程序设计)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为(完整)实验2 最速下降法和共轭梯度法的程序设计的全部内容。实验2 最速下降法和共轭梯。
2、度法的程序设计 一、实验目的1、熟悉无约束优化问题的最速下降算法和共轭梯度法.2、培养matlab编程与上机调试能力。二、实验课时:2个课时三、实验准备1、预习无约束优化问题的最速下降算法和共轭梯度法。2、熟悉matlab软件的基本操作及程序编写.四、实验内容课堂实验演示根据最速下降法编写程序,求函数的极小值,其中初始点为算法步骤如下:Step1:给出初始点,和精度;Step2:计算,如果,则停止迭代,输出结果;否则转step3;Step3:令下降方向,计算步长因子使得,令,转step2。其程序如下:function x,iter,val,dval = Steepest_Descent_Met。
3、hod(x,eps)k = 1;dy = grad_obj(x);x_mat(:,1) = x;存储每一次迭代得到的点xwhile norm(dy)epsd = dy; % 搜索方向lambda = line_search(x,d);%步长x = x + d*lambda;k = k + 1;x_mat(:,k) = x;dy = grad_obj(x);end iter = k - 1;val = obj(x);%目标函数在极值点处的函数值dval = grad_obj(x);目标函数在极值点处的梯度%-x1 = linspace(1.2,1.2,40);x2 = linspace(-0。2。
4、,1。2,40);xx,yy = meshgrid(x1,x2);for i = 1:length(x1)for j = 1:length(x2)z(i,j) = obj(xx(i,j);yy(i,j));endendcontour(xx,yy,z,10);%画出目标函数的等高线hold onplot(x_mat(1,:),x_mat(2,:),-o)%画出最速下降法的迭代路径hold offfunction y = obj(x)%目标函数y = x(1)。2 - 2*x(1).*x(2) + 4x(2)。2 + x(1) 3*x(2);function dy = grad_obj(x)%目标。
5、函数的梯度dy = 2*x(1) - 2x(2) + 1; -2x(1) + 8*x(2) 3;function lambda = line_search(xk,dk)%作线搜索,求步长phi(lambda) = obj( xk + lambda*dk )%d_phi(lambda) = dkgrad_obj( xk + lambda*dk )syms eqn lambdaeqn = dkgrad_obj(xk+lambdadk);lambda = solve(eqn); %用符号计算命令solve求方程d_phi(lambda)=0的根lambda = eval(lambda);将符号计算的。
6、结果转化为数值类型 x = 1;1; eps = 1。0e6; x,iter,val,dval = Steepest_Descent_Method(x,eps)x = -0。1667 0。3333val = 0。5833dval = 0。52801。0e-006 -0.17601.0e006iter = 43共轭梯度法的计算步骤:Step1: 给出初始点,令,精度;Step2:计算,如果,则停止迭代,输出结果;否则转step3;Step3:计算,其中步长因子使得,计算下降方向; 令,转step2。其程序如下:function x,iter,val,dval = Conjugate_Gradie。
7、nt_Method(x,eps)k = 1;x_mat(:,1) = x;存储每一次迭代得到的点xx_old = x;dy_old = grad_obj(x_old);d_old = -dy_old;while norm(dy_old)epslambda = line_search(x_old,d_old);%步长x_new = x_old + lambdad_old;dy_new = grad_obj(x_new);coef = norm(dy_new)/norm(dy_old);d_new = dy_new + coef2d_old; % 搜索方向k = k + 1;x_old = x_n。
8、ew;dy_old = dy_new;d_old = d_new;x_mat(:,k) = x_new;防止死循环if k 100break;endend x = x_new;iter = k 1;val = obj(x_new);目标函数在极值点处的函数值dval = grad_obj(x_new);%目标函数在极值点处的梯度%-x1 = linspace(1.2,1。2,40);x2 = linspace(0.2,1。2,40);xx,yy = meshgrid(x1,x2);for i = 1:length(x1)for j = 1:length(x2)z(i,j) = obj(xx(i。
9、,j);yy(i,j));endendcontour(xx,yy,z,10);画出目标函数的等高线hold onplot(x_mat(1,:),x_mat(2,:),o)%画出最速下降法的迭代路径hold offfunction y = obj(x)目标函数y = x(1)2 - 2x(1)*x(2) + 4*x(2)2 + x(1) - 3*x(2);function dy = grad_obj(x)%目标函数的梯度dy = 2*x(1) 2*x(2) + 1; 2x(1) + 8x(2) - 3;function lambda = line_search(xk,dk)作线搜索,求步长phi。
10、(lambda) = obj( xk + lambdadk )%d_phi(lambda) = dkgrad_obj( xk + lambda*dk )syms eqn lambdaeqn = dk*grad_obj(xk+lambdadk);lambda = solve(eqn); %用符号计算命令solve求方程d_phi(lambda)=0的根lambda = max(eval(lambda));将符号计算的结果转化为数值类型课堂实验任务编写函数文件,实现最速下降法和共轭梯度法,并分别求解下列问题, 初始点取,精度取;五、实验主要步骤1、安装matlab7.0及以上版本软件;2、编写m文件以创建和保存各函数;3、运行程序,保存结果;4、撰写实验报告.六、实验报告的撰写要求1. 写出实验课程名称、日期;2. 写出姓名、学号;3. 写出实验目的、实验内容;4. 写出实验过程及结果(程序代码及数值解),尽量给出其图象;5. 写出心得体会。