用MATLAB实现共轭梯度法求解实例(精编文档)

【最新整理,下载后即可编辑】
用MATLAB实现共轭梯度法求解实例
康福  201103710031
1.无约束优化方法
1.1 无约束优化方法的必要性
一般机械优化设计问题,都是在一定的限制条件下追求某一指标为最小,它们都属于约束优化问题。但是为什么要研究无约束优化问题?
    (1)有些实际问题,其数学模型本身就是一个无约束优化问题。
    (2)通过熟悉它的解法可以为研究约束优化问题打下良好的基础。
    (3)约束优化问题的求解可以通过一系列无约束优化方法来达到。所以无约束优化问题的解法是优化设计方法的基本组成部分,也是优化方法的基础。
4)对于多维无约束问题来说,古典极值理论中令一阶导数为零,但要求二阶可微,且要判断海赛矩阵为正定才能求得极小点,这种方法有理论意义,但无实用价值。和一维问题一样,若多元函数F(X)不可微,亦无法求解。但古典极值理论是无约束优化方法发展的基础。
1.2共轭梯度法
目前已研究出很多种无约束优化方法,它们的主要不同点在于构造搜索方向上的差别。
1)间接法——要使用导数,如梯度法、(阻尼)牛顿法、变尺度法、共轭梯度法等。
2)直接法——不使用导数信息,如坐标轮换法、鲍威尔法单纯形法等。
用直接法寻极小点时,不必求函数的导数,只要计算目标函数值。这类方法较适用于解决变量个数较少的(n 20)问题,一般情况下比间接法效率低。间接法除要计算目标函数值外,还要计算目标函数的梯度,有的还要计算其海赛矩阵。
搜索方向的构成问题乃是无约束优化方法的关键。
共轭梯度法是沿着共轭方向进行搜索,属于共轭方向法中的一种,该方法中每一个共轭向量都是依赖于迭代点处的负梯度而构造出来。共轭梯度法作为一种实用的迭代法,它主要有下面的优点:
1)算法中,系数矩阵A的作用仅仅是用来由已知向量P产生向量W=AP,这不仅可充分利用A的稀疏性,而且对某些提供矩阵A较为困难而由已知向量P产生向量W=AP又十分方便的应用问题是很有益的。
2)不需要预先估计任何参数就可以计算,这一点不像SOR等;
(3)每次迭代所需的计算,主要是向量之间的运算,便于并行化。
共轭梯度法原理的知识较多,请详见《机械优化设计》第四章的第四、五节。
图1为共轭梯度法的程度框图
图1为共轭梯度法的程度框图
2.设计题目及要求
2.1设计题目
用共轭梯度法求二次函数
    的极小点及极小值。
2.2设计要求
(1)使用matlab编写程序,熟练撑握matlab编程方法。
(2)学习并撑握共轭梯度法的原理、方法及应用,并了解不同无约束优化方法的区别、优缺点及特殊要求。
医院院长
(3)编写程序,计算出二次函数的极小点及极小值,并适当选取不同的初始点及迭代精度精度,分析比较结果。
三.计算步骤
3.1计算求解
解:已知初始点[1,1]T  迭代精度  
1)第一次沿负梯度方向搜寻
计算初始点处的梯度:
我的性经历
为一维搜索最佳步长,应满足
得:
       
2)第二次迭代
       
       
代入目标函数
由                  得
从而有:
收敛。
3.2运行与程序
运行:打开matlab,确定conjugate_grad_2d.m文件夹为当前目录。
      在命令窗中输入:f=conjugate_grad_2d([1,1],0.001)
      选择不同的初始点坐标[0,0],[0,1],[1,0],和迭代精度0.01,0.0001,进行运行时,需要多次调用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); %求表达式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(fx^2+fy^2))>t %搜索精度不满足已知条件
    s=-fi; %第一次搜索的方向为负梯度方向
    if count<=0
2012北京高考理综
        s=-fi;
    else
        s=s1;
    end
    x=x+a*s; %进行一次搜索后的点坐标
    f=subs(f,{xi,yi},x); %构造一元搜索的一元函数φ(a)
    f1=diff(f); %对函数φ(a)进行求导
    f1=solve(f1); %得到最佳步长a
    if f1~=0
        ai=double(f1); %强制转换数据类型为双精度数值
    else
        break %若a=0,则直接跳出循环,此点即为极值点
    end
    x=subs(x,a,ai); %得到一次搜索后的点坐标值
    f=xi^2+2*yi^2-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]; %下一点梯度向量

本文发布于:2024-09-22 15:35:51,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/131380.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:梯度   优化   共轭   问题   方法   计算   搜索
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议