用MATLAB实现共轭梯度法求解实例.docx

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
康福 0031 .无约束优化方法 无约束优化方法的必要性 一般机械优化设计问题,都是在一定的限制条件下追求某一指标为最小,它 们都属于约束优化问题。但是为什么要研究无约束优化问题 ? (1)有些实际问题,其数学模型本身就是一个无约束优化问题。 (2)通过熟悉它的解法可以为研究约束优化问题打下良好的基础。 (3)约束优化问题的求解可以通过一系列无约束优化方法来达到。所以无约束优 化问题的解法是优化设计方法的基本组成部分,也是优化方法的基础。 (4)对于多维无约束问题来说,古典极值理论中令一阶导数为零,但要求二阶可 微,且要判断海赛矩阵为正定才能求得极小点,这种方法有理论意义,但无 实用价值。和一维问题一样,若多元函数 F(X) 不可微,亦无法求解。但古典 极值理论是无约束优化方法发展的基础。 共轭梯度法 目前已研究出很多种无约束优化方法,它们的主要不同点在于构造搜索方向 上的差别。 ( 1)间接法——要使用导数,如梯度法、 (阻尼)牛顿法、变尺度法、共轭梯度 (2)直接法——不使用导数信息,如坐标轮换法、鲍威尔法单纯形法等。 用直接法寻找极小点时,不必求函数的导数,只要计算目标函数值。这类方 法较适用于解决变量个数较少的( n ≤ 20)问题,一般情况下比间接法效率低 间接法除要计算目x标k 函1 数值x外k,还要计s算k 目标(k函数的0梯,1度,,2有,L的还) 要计算其海赛 矩阵。 搜索方向的构成问题乃是无约束优化方法的关键。 共轭梯度法是沿着共轭方向进行搜索,属于共轭方向法中的一种,该方法中 每一个共轭向量都是依赖于迭代点处的负梯度而构造出来。共轭梯度法作为一种 实用的迭代法,它主要有下面的优点: 1)算法中,系数矩阵A的作用仅仅是用来由已知向量 P产生向量 W=A,P 这不仅 可充分利用A的稀疏性,而且对某些提供矩阵A较为困难而由已知向量 P 产 生向量 W=AP又十分方便的应用问题是很有益的。 2)不需要预先估计任何参数就可以计算,这一点不像 SOR等; 3)每次迭代所需的计算,主要是向量之间的运算,便于并行化。 共轭梯度法原理的知识较多,请详见《机械优化设计》第四章的第四、五节。 图 1 为共轭梯度法的程度框图 图 1 为共轭梯度法的程度框图 二.设计题目及要求 设计题目 用共轭梯度法求二次函数 f (x1, x2 ) f (x1, x2 ) 2 x1 2x22 4x1 2x1x2 的极小点及极小值 设计要求 ( 1)使用 matlab 编写程序,熟练撑握 matlab 编程方法。 (2)学习并撑握共轭梯度法的原理、方法及应用,并了解不同无约束优化方法的 区别、优缺点及特殊要求。 (3)编写程序,计算出二次函数的极小点及极小值,并适当选取不同的初始点及 迭代精度精度,分析比较结果。 42x2 4 2 x 2 计算步骤 计算求解 解:已知初始点 [1,1] T 迭代精度 0.001 1)第一次沿负梯度方向搜寻 计算初始点处的梯度: f(x0) 10 xx 为一维搜索最佳步长,应满足 2 x1 2x2 4 4 4x2 2x1 x 0 2 0 1 4 1 40 0d0 0 10 2 1 20 f (x1) minf (x0 d0) min(40 2 20 3) 得:1 x2 得: 1 x 2 0 0.25 0.5 2)第二次迭代 代入目标函数 从而有: f(x1)2 5 0.25 0 2 f(x0) 20 d1 f (x1) 0d0 2 1.5 x 2 x1 d 12 2 22 0.5 1.5 0.5 1.5 f(x1) 1 2 f (x) (2 2 )2 2(0.5 1.5 )2 2(2 2 )(0.5 1.5 ) 4(2 2 ) ( ) ( ) 0 得 1 22 f (x2) 8, f ( x2) 因 f (x2) 0 收敛 运行与程序 运行: 打开 matlab, 确定文件夹为当前目录。 , 进行运行在命令窗中输入: f=conjugate_grad_2d([1,1], 选择不同的初始点坐标 [0,0],[0,1],[1,0], 和迭代精度, 时,需要多次调用 conjugate_grad_2d , 进行运行 程序及说明: function f=conjugate_grad_2d(x0,t) %用共轭梯度法求已知函数 f(x1,x2)=x1^2+2*x2^2-4*x1-2*x1*x2 的极值点 %已知初始点坐标: x0 %已知收敛精度: t %求得已知函数的极值: f x=x0; syms xi yi a; %定义自变量,步长为符号变量 f=xi^2+2*yi^2-4*xi-2*xi*yi; %创建符号表达式 f fx=diff(f,xi); %求表达式 f 对 xi 的一阶求导 fy=diff(f,yi);

文档评论(0)

138****0771 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档