- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)