搜档网
当前位置:搜档网 › 最优化课程设计共轭梯度法算法分析与实现样本

最优化课程设计共轭梯度法算法分析与实现样本

最优化课程设计共轭梯度法算法分析与实现样本
最优化课程设计共轭梯度法算法分析与实现样本

最优化课程设计--共轭梯度法算法分析与实现(设计程序)

题目共轭梯度法算法分析与实现

班级 / 学号 14140101/ 学生姓名黄中武指导教师王吉波王微微

课程设计任务书

课程名称最优化方法课程设计院(系) 理学院专业信息与计算科学

课程设计题目共轭梯度法算法分析与实现课程设计时间: 年6月 16日至年 6月 27日

课程设计的要求及内容:

[要求]

1. 学习态度要认真, 要积极参与课程设计, 锻炼独立思考能力;

2. 严格遵守上机时间安排;

3. 按照MATLAB编程训练的任务要求来编写程序;

4. 根据任务书来完成课程设计论文;

5. 报告书写格式要求按照沈阳航空航天大学”课程设计报告撰写规范”;

6. 报告上交时间:课程设计结束时上交报告;

7. 严禁抄袭行为, 一旦发现, 课程设计成绩为不及格。

一、运用共轭梯度法求解无约束最优化问题

要求:1)了解求解无约束最优化问题的共轭梯度法;

2)绘出程序流程图;

3)编写求解无约束最优化问题的共轭梯度法MATLAB程序;

4)利用编写文件求解某无约束最优化问题;

5)给出程序注释。

指导教师年月日

负责教师年月日

学生签字年月日

沈阳航空航天大学

课程设计成绩评定单

课程名称最优化理论与算法课程设计院(系) 理学院专业信息与计算科学课程设计题目共轭梯度法算法分析与实现学号姓名黄中武指导教师评语:

课程设计成绩

指导教师签字

年月日

最优化方法课程设计沈阳航空航天大学课程设计用纸目录目录

一、正

文 ........................................................ ....... 1 二、总

结 ........................................................ ....... 8 参考文

献 ........................................................ ....... 9 附

录 ........................................................ (10)

第 I 页

最优化方法课程设计沈阳航空航天大学课程设计用纸正文

一、正文

一无约束最优化问题的共轭梯度法

共轭梯度法最初是由Hesteness和Stiefel于1952年为求解线形方程组而提出的。后来, 人们把这种方法用于求解无约束最优化问题, 使之成为一种重要的最优化方法。

下面, 重点介绍Fletcher-Reeves共轭梯度法, 简称FR法。

共轭梯度法的基本思想是把共轭性与最速下降法相结合, 利用已知点处的梯度构造一组共轭方向, 并沿这组方向进行搜索, 求出目标函数的极小点。根据共轭梯度方向的基本性质, 这种方法具有二次终止性。首先讨论对于二次函数的共轭梯度法, 然后再把这种方法推广到极小化一般函数的情形。考虑问题

TTmi fx(),, , 0.5xAxbxcn

其中A是对称正定矩阵, c是常数。

具体求解方法如下:

(1)首先, 任意给定一个初始点, 计算出目变函数在这点的梯度, fx()x

g若=0, 则停止计算, 否则, 令 1

(1)(1)dfxg,,,,,() 1

(1)(2)(2),0沿方向搜索, 得到点, 计算在处的梯度, 若g, 则利用dxx2

(1)(2)(2)和构造第二个搜索方向, 再沿搜索。 ,gddd2

()k()k()k()k一般地, 若已知点和搜索方向, 则从出发, 沿进行xdxd搜索, 得到

(1)()()kkk, xxd,, , k

其中步长满足 ,k

()()kk()()kkfxd(), ,,fxd(), ,min k

此时可求出的显式表示。令 ,k

()()kk,,,()(),, fxd

,,()求得极小点, 令

'(1)()kTk, ,,()()0,,,fxd

第 1 页

最优化方法课程设计沈阳航空航天大学课程设计用纸正文根据二次函数的梯度表示式, 即

(1)()kTk, ()0Axbd, ,

T()()kkk Axdbd(+)0,, ,,,k

T()()kk (10.3.16) gAdd, ,,0,,()kk

由(10.3.16)式得到

Tk()gd()()kTkk (10.3.17) ,,,dAdk

(1)k, 计算在处的梯度, 若, 则停止计算;否则, 用fx()g,0x,gk, 1k, 1

()k(1)k, (1)k, ()k和构造下一个搜索方向, 并使和关于A共

轭。按此设dddd

想, 令

(1)()kk, dgd,,, , (10.3.18) kk, 1

()kT上式两端左乘, 并令 dA

()(1)()()()kTkkTkTk, dAddAgdAd,,, ,,0 kk, 1

由此得到

()kT()()kTk,,dAg (10.3.19) dAd, kk1

(1)k, (1)k, 再从出发, 沿方向搜索 xd

综上分析, 在第一个搜索方向取负梯度的前提下, 重复使用公式(10.3.14), (10.3.17), (10.3.18)和(10.3.19), 就能伴随计算点

的增加, 构造出一组搜索方向。

第 2 页

最优化方法课程设计沈阳航空航天大学课程设计用纸正文二程序流程图

数学实验“线性方程组的最速下降法与共轭梯度法解法”实验报告(内含matlab程序代码)

西京学院数学软件实验任务书

实验五实验报告 一、实验名称:最速下降法与共轭梯度法解线性方程组。 二、实验目的:进一步熟悉理解掌握最速下降法与共轭梯度法解法思路,提高matlab 编程能力。 三、实验要求:已知线性方程矩阵,应用最速下降与共轭梯度法在相关软件编程求解线性方程组的解。 四、实验原理: 1.最速下降法: 从某个初始点)0(X 出发,沿)(X f 在点)0(X 处的负梯度方向 )0()0()0()(AX b X f r -=-?= 求得)(X f 的极小值点)1(X , 即 )(min )0()0(0 r X f λλ+> 然后从)1(X 出发,重复上面的过程得到)2(X 。如此下去,得到序列{)(k X } )(...)()()()1()0(k X f X f X f >>> 可以证明,从任一初始点)0(X 出发, 用最速下降法所得到的序列{)(k X }均收敛于问题使X 最小化)(X f 的解,也就是方程组b AX =的解。其收敛速度取决于 1 1 λλλλ+-n n ,其中1λ ,n λ分别

为A 的最小,最大特征值。最速下降法迭代格式:给定初值)0(X , )(k X 按如下方法决定: ()) ()(1)(k )()()()(k ) ()(X ,,)(k k k k T k k T k k k k r X Ar r r r AX b X f r λλ+=> <><=-=-?=+ 2.共轭梯度法 其基本步骤是在点)(k X 处选取搜索方向)(k d , 使其与前一次的搜索方向)1(-k d 关于A 共轭,即 (1)()(1),0k k k d d Ad --<>= 然后从点)(k X 出发,沿方向)(k d 求得)(X f 的极小值点 )1(+k X , 即 )(min )() ()(0 )1(k d X f X f k k λλ+=>+ 如此下去, 得到序列{)(k X }。不难求得0,)1()(>=<-k k Ad d 的解为 ) () 1()1()()() () 1(,,k k k k k k k d Ad d d AX b X X > <>-<+=--+ 注意到)(k d 的选取不唯一,我们可取

共轭梯度法C语言(西安交大)

#include #include #define N 10 /*定义矩阵阶数*/ void main() { int i,j,m,A[N][N],B[N]; double X[N],akv[N],dka[N],rk[N],dk[N],pk,pkk,ak,bk; for(i=0;i

printf("\n"); printf("input the Maxtr X\n"); /*给X0输入一个初始向量*/ for(i=0;i

最优化课程设计--共轭梯度法算法分析与实现

最优化课程设计--共轭梯度法算法分析与实现(设计程序) 题目共轭梯度法算法分析与实现 班级 / 学号 14140101/2011041401011 学生姓名黄中武指导教师王吉波王微微 课程设计任务书 课程名称最优化方法课程设计院(系) 理学院专业信息与计算科学 课程设计题目共轭梯度法算法分析与实现课程设计时间: 2014 年 6月 16日至 2014 年 6月 27日 课程设计的要求及内容: [要求] 1. 学习态度要认真,要积极参与课程设计,锻炼独立思考能力; 2. 严格遵守上机时间安排; 3. 按照MATLAB编程训练的任务要求来编写程序; 4. 根据任务书来完成课程设计论文; 5. 报告书写格式要求按照沈阳航空航天大学“课程设计报告撰写规范”; 6. 报告上交时间:课程设计结束时上交报告; 7. 严禁抄袭行为,一旦发现,课程设计成绩为不及格。 一、运用共轭梯度法求解无约束最优化问题 要求:1)了解求解无约束最优化问题的共轭梯度法; 2)绘出程序流程图; 3)编写求解无约束最优化问题的共轭梯度法MATLAB程序; 4)利用编写文件求解某无约束最优化问题;

5)给出程序注释。 指导教师年月日 负责教师年月日 学生签字年月日 沈阳航空航天大学 课程设计成绩评定单 课程名称最优化理论与算法课程设计院(系) 理学院专业信息与计算科学课程设计题目共轭梯度法算法分析与实现学号 2011041401011 姓名黄中武指导教师评语: 课程设计成绩 指导教师签字 年月日 最优化方法课程设计沈阳航空航天大学课程设计用纸目录 目录 一、正 文 (1) 二、总结 ............................................................... 8 参考文 献 ............................................................... 9 附录 .. (10) 第 I 页 最优化方法课程设计沈阳航空航天大学课程设计用纸正文 一、正文 一无约束最优化问题的共轭梯度法

清华大学高等数值计算(李津)实践题目一(共轭梯度CG法,Lanczos算法与MINRES算法)

高等数值计算实践题目一 1. 实践目的 本次计算实践主要是在掌握共轭梯度法,Lanczos 算法与MINRES 算法的基础上,进一步探讨这3种算法的数值性质,主要研究特征值特征向量对算法收敛性的影响。 2. 实践过程 (一)生成矩阵 (1)作5个100阶对角阵i D 如下: 1D 对角元:1,1,...,20,1+0.1(-20),21,...,100j j d j d j j ==== 2D 对角元:1,1,...,20,1+(-20),21,...,100j j d j d j j ==== 3D 对角元:,1,...,80,81,81,...,100j j d j j d j ==== 4D 对角元:,1,...,40,41,41,...,60,41+(60),61,...,100j j j d j j d j d j j =====-= 5D 对角元:,1,...,100j d j j == 记i D 的最大模特征值和最小模特征值分别为1i λ和i n λ,则i D 特征值分布有如下特点: 1D 的特征值有较多接近于i n λ,并且1/i i n λλ较小, 2D 的特征值有较多接近于i n λ,并且1/i i n λλ较大, 3D 的特征值有较多接近于1i λ,并且1/i i n λλ较大, 4D 的特征值有较多接近于中间模特征值,并且1/i i n λλ较大, 5D 的特征值均匀分布,并且1/i i n λλ较大 (2)随机生成10个100阶矩阵j M : (100(100))j M fix rand = 并作它们的QR 分解,得j Q 和j R ,这样可得50个对称的矩阵T ij j i j A Q DQ =,其中i D 的对角元就是ij A 的特征值,若它们都大于0,则ij A 正定,j Q 的列就是相应的特征向量。结合(1)可知,ij A 都是对称正定阵。

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

用MATLAB 实现共轭梯度法求解实例 康福 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(0,1,2,) k k k k s k α+=+=x x

作业4-FR共轭梯度法

最优化方法第四次作业 题目:利用FR-共轭梯度法求解无约束优化问题222 12122min ()44412x R f x x x x x x ∈=+--。初始点(0)(0.5,1).T x =- () ()T k k T k k k k k k k g g g g k d g k g d 111110.0,;0,-----=???≥+-=-=ββ 一、程序 function [x,val,k]=frcg(fun,gfun,x0) %功能:用FR 共轭梯度法求解无约束问题min f (x ) %输入:x0是初始点,fun,gfun 分别是求目标函数和梯度 %输出:x,val 分别是近似最优点和最优值,k 是迭代次数 maxk=5000; rho=0.6; sigma=0.4; k=0; epsilon=1e-4; n=length(x0); while (k=0.0) d=-g; end end if (norm(d)

while (m<20) %用Armijo 搜索求步长 if (feval(fun,x0+rho^m*d)> x0=[-0.5,1]'; >> [x,val,k]=frcg('fun','gfun',x0) x = 1.0000 2.0000 val = -12.0000 k = 10 即22212122min ()44412x R f x x x x x x ∈=+--的极小值点x=[1;2];minf(x)= -12。

共轭梯度法

共轭梯度法 1.算法思想: 共轭梯度法是利用目标函数梯度逐步产生共轭方向作为线搜索方向的方法,每次搜索方向都是在目标函数梯度的共轭方向,搜索步长通过一维极值算法确定。 2.算法步骤: 用共轭梯度法求无约束多维极值问题min (),n f x x R ∈的算法步骤如下: (1) 给定初始点(0)x ,及精度0ε>; (2) 若 (0)()f x ε ?≤,停止,极小值点为(0)x ,否则转步骤(3); (3) 取(0)(0)()p f x =-?,且置0k =; (4) 用一维搜索法求k t ,使得()()()()()0 ()min k k k k k t f x t p f x tp ≥+=+,令,(1)()()k k k k x x t p +=+,转步骤5; (5) 若 (1)()k f x ε +?≤,停止,极小值点为(1)k x +,否则转步骤(6); (6) 若1k n +=,令(0)()n x x =,转步骤(3),否则转步骤(7); (7) 令(1)(1)()()k k k k p f x p λ++=-?+,2(1)2 () () () k k k f x f x λ+?=?,置1k k =+,转 步骤(4)。 3.算法源程序: #include #include

#define N 10 #define eps pow(10,-6) double f(double x[],double p[],double t) { double s; s=pow(x[0]+t*p[0],2)+25*pow(x[1]+t*p[1],2); return s; } /*以下是进退法搜索区间源程序*/ void sb(double *a,double *b,double x[],double p[]) { double t0,t1,t,h,alpha,f0,f1; int k=0; t0=2.5; /*初始值*/ h=1; /*初始步长*/ alpha=2; /*加步系数*/ f0=f(x,p,t0); t1=t0+h; f1=f(x,p,t1); while(1) {

最优化课程设计--共轭梯度法算法分析与实现

最优化课程设计--共轭梯度法算法分析与实现 (设计程序) 题目共轭梯度法算法分析与实现 班级 / 学号 14140101/11 学生姓名黄中武指导教师王吉波王微微 课程设计任务书 课程名称最优化方法课程设计院(系) 理学院专业信息与计算科学 课程设计题目共轭梯度法算法分析与实现课程设计时间: 2014 年 6月 16日至2014 年 6月 27日 课程设计的要求及容: [要求] 1. 学习态度要认真,要积极参与课程设计,锻炼独立思考能力; 2. 严格遵守上机时间安排; 3. 按照MATLAB编程训练的任务要求来编写程序; 4. 根据任务书来完成课程设计论文; 5. 报告书写格式要求按照航空航天大学“课程设计报告撰写规”; 6. 报告上交时间:课程设计结束时上交报告; 7. 严禁抄袭行为,一旦发现,课程设计成绩为不及格。 一、运用共轭梯度法求解无约束最优化问题 要求:1)了解求解无约束最优化问题的共轭梯度法; 2)绘出程序流程图; 3)编写求解无约束最优化问题的共轭梯度法MATLAB程序; 4)利用编写文件求解某无约束最优化问题; 5)给出程序注释。

指导教师年月日 负责教师年月日 学生签字年月日 航空航天大学 课程设计成绩评定单 课程名称最优化理论与算法课程设计院(系) 理学院专业信息与计算科学课程设计题目共轭梯度法算法分析与实现学号 11 黄中武指导教师评语: 课程设计成绩 指导教师签字 年月日 最优化方法课程设计航空航天大学课程设计用纸目录 目录 一、正文 ............................................................... 1 二、总 结 ............................................................... 8 参考文 献 ............................................................... 9 附 录 (10) 第 I 页 最优化方法课程设计航空航天大学课程设计用纸正文 一、正文 一无约束最优化问题的共轭梯度法 共轭梯度法最初是由Hesteness和Stiefel于1952年为求解线形方程组而提出的。后来,人们把这种方法用于求解无约束最优化问题,使之成为一种重要的最优化方法。 下面,重点介绍Fletcher-Reeves共轭梯度法,简称FR法。

共轭梯度法程序

一、共轭梯度法 共轭梯度法(Conjugate Gradient)是共轭方向法的一种,因为在该方向法中每一个共轭向量都是依靠赖于迭代点处的负梯度而构造出来的,所以称为共轭梯度法。由于此法最先由Fletcher和Reeves (1964)提出了解非线性最优化问题的,因而又称为FR 共轭梯度法。由于共轭梯度法不需要矩阵存储,且有较快的收敛速度和二次终止性等优点,现在共轭梯度法已经广泛地应用于实际问题中。共轭梯度法是一个典型的共轭方向法,它的每一个搜索方向是互相共轭的,而这些搜索方向d仅仅是负梯度方向与上一次迭代的搜索方向的组合,因此,存储量少,计算方便,效果好。 二、共轭梯度法的原理 设有目标函数 f(X)=1/2X T HX+b T X+c 式1 式中,H作为f(X)的二阶导数矩阵,b为常数矢量,b=[b1,b2,b3,...b n]T 在第k次迭代计算中,从点X(k)出发,沿负梯度方向作一维搜索,得 S(K)=-?f(X(k))式2 X(k+1)=X(k)+ɑ(k)S(k) 式3 在式中,ɑ(k)为最优步长。 设与S(k)共轭的下一个方向S(k+1)由点S(k)和点X(k+1)负梯度的线性组

合构,即 S (k+1)=-?f (X (k+1))+β(k)S (k) 式4 根据共轭的条件有 [S (k)]T ?2f (X (k))S (k+1)=0 式5 把式2和式4带入式5,得 -[?f(X (k))]T ?2f (X (k))[-?f (X (k+1))+β(k)S (k) ]=0 式6 对于式1,则在点X (k)和点X (k+1)的梯度可写为 ?f(X (k))=HX (k)+b 式7 ?f (X (k+1))=HX (k+1)+b 式8 把上面两式相减并将式3代入得 ɑ(k)H S (k)=?f (X (k+1))-?f(X (k)) 式9 将式4和式9两边分别相乘,并代入式5得 -[?f (X (k+1))+β(k)?f(X (k))]T [?f (X (k+1))-?f(X (k)]=0 式10 将式10展开,并注意到相邻两点梯度间的正交关系,整理后得 β (k ) =2 2 ||))((||||))1((||k X f k X f ?+? 式11 把式11代入式4和式3,得 S (k+1)=-?f (X (k))+β (k ) S (k ) X (k+1)=X (k )+ɑ(k )S (k ) 由上可见,只要利用相邻两点的梯度就可以构造一个共轭方向。以这种方式产生共轭方向并进行迭代运算的方法,即共轭梯度法。

共轭梯度实验报告

竭诚为您提供优质文档/双击可除 共轭梯度实验报告 篇一:共轭梯度法实验报告 数值代数实验报告 一、实验名称:用共轭梯度法解线性方程组。 二、实验目的:进一步熟悉理解掌握共轭梯度法解法思路,提高matlab编程能力。三、实验要求:已知线性方程 矩阵,应用共轭梯度法在相关软件编程求解线性方程组的解。 四、实验原理: 1.共轭梯度法: 考虑线性方程组 Ax?b 的求解问题,其中A是给定的n阶对称正定矩阵,b是 给定的n维向量,x是待求解的n维向量.为此,定义二次泛 函 ?(x)?xTAx?2bTx. 定理1设A对称正定,求方程组Ax?b的解,等价于求二次泛函?(x)的极小值点.定理1表明,求解线性方程组问题

就转化为求二次泛函?(x)的极小值点问题.求解二次函数极 小值问题,通常好像盲人下山那样,先给定一个初始向量x0,确定一个下山方向p0,沿着经过点x0而方向为p0的直线 x?x0??p0找一个点 x1?x0??0p0, 使得对所有实数?有 ??x0??0p0????x0??p0?, 即在这条直线上x1使?(x)达到极小.然后从x1出发, 再确定一个下山的方向p1,沿着直 线x?x1??p1再跨出一步,即找到?1使得??x?在 x2?x1??1p1达到极小: ??x1??1p1????x1??p1?. 重复此步骤,得到一串 ?0,?1,?2, x?xk??pk上确定步长?k使 和p0,p1,p2, , 称pk为搜索方向,?k为步长.一般情况下,先在xk点 找下山方向pk,再在直线 ??xk??kpk????xk??pk?, 最后求出xk?1?xk??kpk.然而对不同的搜索方向和步长,得到各种不同的算法.

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

【最新整理,下载后即可编辑】 用MATLAB 实现共轭梯度法求解实例 康福 201103710031 一.无约束优化方法 1.1 无约束优化方法的必要性 一般机械优化设计问题,都是在一定的限制条件下追求某一指标为最小,它们都属于约束优化问题。但是为什么要研究无约束优化问题? (1)有些实际问题,其数学模型本身就是一个无约束优化问题。 (2)通过熟悉它的解法可以为研究约束优化问题打下良好的基础。 (3)约束优化问题的求解可以通过一系列无约束优化方法来达 到。所以无约束优化问题的解法是优化设计方法的基本组成部分,也是优化方法的基础。 (4)对于多维无约束问题来说,古典极值理论中令一阶导数为零, 但要求二阶可微,且要判断海赛矩阵为正定才能求得极小点,这种方法有理论意义,但无实用价值。和一维问题一样,若多元函数F(X)不可微,亦无法求解。但古典极值理论是无约束优化方法发展的基础。 1.2共轭梯度法 目前已研究出很多种无约束优化方法,它们的主要不同点在于构造搜索方向上的差别。 (1)间接法——要使用导数,如梯度法、(阻尼)牛顿法、变尺 度法、共轭梯度法等。 (2)直接法——不使用导数信息,如坐标轮换法、鲍威尔法单纯形法等。 用直接法寻找极小点时,不必求函数的导数,只要计算目标函数值。这类方法较适用于解决变量个数较少的(n ≤20)问题,一般情况下比间接法效率低。间接法除要计算目标函数值外,还要计算目标函数的梯度,有的还要计算其海赛矩阵。 1(0,1,2,)k k k k s k α+=+=x x

搜索方向的构成问题乃是无约束优化方法的关键。 共轭梯度法是沿着共轭方向进行搜索,属于共轭方向法中的一种,该方法中每一个共轭向量都是依赖于迭代点处的负梯度而构造出来。共轭梯度法作为一种实用的迭代法,它主要有下面的优点: (1)算法中,系数矩阵A的作用仅仅是用来由已知向量P产生向量W=AP,这不仅可充分利用A的稀疏性,而且对某些提供 矩阵A较为困难而由已知向量P产生向量W=AP又十分方便 的应用问题是很有益的。 (2)不需要预先估计任何参数就可以计算,这一点不像SOR等;(3)每次迭代所需的计算,主要是向量之间的运算,便于并行化。 共轭梯度法原理的知识较多,请详见《机械优化设计》第四章的第四、五节。 图1为共轭梯度法的程度框图

共轭梯度法

最速下降法and 共轭梯度法 分类:matlab 2011-04-17 17:02 961人阅读评论(2) 收藏举报算法出版优化 注明:程序中调用的函数jintuifa.m golddiv.m我在之前的笔记中已贴出 最速下降法 %最速下降法求解f = 1/2*x1*x1+9/2*x2*x2的最小值,起始点为x0=[9 1] %算法根据最优化方法(天津大学出版社)97页算法3.2.1编写 %v1.0 author: liuxi BIT %format long syms x1 x2 alpha; f = 1/2*x1*x1+9/2*x2*x2;%要最小化的函数 df=jacobian(f,[x1 x2]);%函数f的偏导 epsilon=1e-6;%0.000001k=0; x0=[9 1];%起始点 xk=x0; gk=subs(df,[x1 x2],xk);%起始点的梯度 gk=double(gk); while(norm(gk)>epsilon)%迭代终止条件||gk||<=epsilon pk=-gk;%负梯度方向 f_alpha=subs(f,[x1 x2],xk+alpha*pk);%关于alpha的函数 [left right] = jintuifa(f_alpha,alpha);%进退法求下单峰区间 [best_alpha best_f_alpha]=golddiv(f_alpha,alpha,left,right);%黄金分割法求最优步长xk=xk+best_alpha*pk; k=k+1; gk=subs(df,[x1 x2],xk); gk=double(gk); end best_x=xk;%最优点 best_fx=subs(f,[x1 x2],best_x);%最优值 共轭梯度法

实验2 最速下降法和共轭梯度法的程序设计

实验2 最速下降法和共轭梯度法的程序设计 一、实验目的 1、熟悉无约束优化问题的最速下降算法和共轭梯度法。 2、培养matlab 编程与上机调试能力。 二、实验课时:2个课时 三、实验准备 1、预习无约束优化问题的最速下降算法和共轭梯度法。 2、熟悉matlab 软件的基本操作及程序编写。 四、实验内容 课堂实验演示 根据最速下降法编写程序,求函数 21222121342)(min x x x x x x x f -++-= 的极小值,其中初始点为()01,1T x = 算法步骤如下: Step1::给出初始点0x ,和精度1;0k ε<<=; Step2:计算()k f x ?,如果()k f x ε?≤,则停止迭代,输出结果;否则转step3; Step3:令下降方向()k k d f x =-?,计算步长因子k λ使得0()min ()k k k k k f x d f x d λλλ≥+=+,令1,1k k k k x x d k k λ+=+=+,转step2。 其程序如下: function [x,iter,val,dval] = Steepest_Descent_Method(x,eps) k = 1; dy = grad_obj(x); x_mat(:,1) = x;%存储每一次迭代得到的点x while norm(dy)>eps d = -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);%目标函数在极值点处的函数值

MATLAB实现最速下降法_和牛顿法和共轭梯度法

MATLAB实现最速下降法_和牛顿法和共轭梯度法最速下降法: 题目:f=(x-2)^2+(y-4)^2 M文件: function [R,n]=steel(x0,y0,eps) syms x; syms y; f=(x-2)^2+(y-4)^2; v=[x,y]; j=jacobian(f,v); T=[subs(j(1),x,x0),subs(j(2),y,y0)]; temp=sqrt((T(1))^2+(T(2))^2); x1=x0;y1=y0; n=0; syms kk; while (temp>eps) d=-T; f1=x1+kk*d(1);f2=y1+kk*d(2); fT=[subs(j(1),x,f1),subs(j(2),y,f2)]; fun=sqrt((fT(1))^2+(fT(2))^2); Mini=Gold(fun,0,1,0.00001); x0=x1+Mini*d(1);y0=y1+Mini*d(2); T=[subs(j(1),x,x0),subs(j(2),y,y0)]; temp=sqrt((T(1))^2+(T(2))^2); x1=x0;y1=y0;

n=n+1; end R=[x0,y0] 调用黄金分割法: M文件: function Mini=Gold(f,a0,b0,eps) syms x;format long; syms kk; u=a0+0.382*(b0-a0); v=a0+0.618*(b0-a0); k=0; a=a0;b=b0; array(k+1,1)=a;array(k+1,2)=b; while((b-a)/(b0-a0)>=eps) Fu=subs(f,kk,u); Fv=subs(f,kk,v); if(Fu<=Fv) b=v; v=u; u=a+0.382*(b-a); k=k+1; elseif(Fu>Fv) a=u; u=v; v=a+0.618*(b-a); k=k+1;

最优化牛顿法最速下降法共轭梯度法matlab代码

牛顿法 迭代公式:(1)2()1()[()]()k k k k x x f x f x +-=-?? Matlab 代码: function [x1,k] =newton(x1,eps) hs=inline('(x-1)^4+y^2'); 写入函数 ezcontour(hs,[-10 10 -10 10]); 建立坐标系 hold on; 显示图像 syms x y 定义变量 f=(x-1)^4+y^2; 定义函数 grad1=jacobian(f,[x,y]); 求f 的一阶梯度 grad2=jacobian(grad1,[x,y]); 求f 的二阶梯度 k=0; 迭代初始值 while 1 循环 grad1z=subs(subs(grad1,x,x1(1)),y,x1(2)); 给f 一阶梯度赋初值 grad2z=subs(subs(grad2,x,x1(1)),y,x1(2)); 给f 二阶梯度赋初值 x2=x1-inv(grad2z)*(grad1z)'; 核心迭代公式 if norm(x1-x2)

end end end 优点:在极小点附近收敛快 缺点:但是要计算目标函数的hesse 矩阵 最速下降法 1. :选取初始点xo ,给定误差 2. 计算一阶梯度。若一阶梯度小于误差,停止迭代,输出 3. 取()()()k k p f x =? 4. 10 t ()(), 1.min k k k k k k k k k k t f x t p f x tp x x t p k k +≥+=+=+=+进行一维搜索,求,使得令转第二步 例题: 求min (x-2)^4+(x-2*y)^2.初始值(0,3)误差为0.1 (1)编写一个目标函数,存为f.m function z = f( x,y ) z=(x-2.0)^4+(x-2.0*y)^2; end (2)分别关于x 和y 求出一阶梯度,分别存为fx.m 和fy.m function z = fx( x,y ) z=2.0*x-4.0*y+4.0*(x-2.0)^3; end 和 function z = fy( x,y )

共轭梯度法matlab实例

clear all;close all;clc; syms x1x2t; f=2*x1^2+x2^2-x1*x2; f_grad=[diff(f,x1);diff(f,x2)]; X0=[1;1]; n=10; epsonal=0.01; fx=inline(f); fx_grad=inline(f_grad); X=X0; fx0=fx(X(1),X(2)); fx0_grad=fx_grad(X(1),X(2)); while 1 if fx0_grad.'*fx0_grad<=epsonal break; end P0=-fx0_grad; k=0; while 1 Xk=X+t*P0; fx1=fx(Xk(1),Xk(2)); [tk,y]=equation_extremum(fx1,t,-1,5,epsonal); Xk=X+tk*P0; fx0_k=fx(Xk(1),Xk(2)); fx0_grad_k=fx_grad(Xk(1),Xk(2)); if fx0_grad_k.'*fx0_grad_k<=epsonal fx0_grad=fx0_grad_k; break; end if k+1==n X=X; else lamdak=fx0_grad_k.'*fx0_grad_k/(fx_grad(X(1),X(2)).'*fx_grad(X(1),X(2))); P0=-fx0_grad_k+lamdak*P0; X=Xk; k=k+1; end end end Xk fx0_k 运行结果: Xk = 1.0e-03 *

0.0486 0.5350 fx0_k = 2.6495e-07

共轭梯度法c++程序

最优化课程设计 题目:共轭梯度法 姓名:田鑫 指导老师:智红英 学号: 201118030216 班级:信息与计算科学111802班

共轭梯度法(Conjugate Gradient) 是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。在各种优化算法中,共轭梯度法是非常重要的一种。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。 设我们要求解下列线性系统 其中n-×-n矩阵A是对称的(也即,A T = A),正定的(也即,x T Ax > 0对于所有非0向量x属于R n),并且是实系数的。 将系统的唯一解记作x*。 最后算法 经过一些简化,可以得到下列求解Ax = b的算法,其中A是实对称正定矩阵。x := 0 k := 0 r := b repeat until r k is "sufficiently small": k := k + 1 if k = 1 p := r0 1 else

end if x := x k-1 + αk p k k r := r k-1 - αk A p k k end repeat 结果为x k 共轭梯度法程序源代码 #include #include #define N 10 #define eps pow(10,-6) double f(double x[],double p[],double t) { double s; s=pow(x[0]+t*p[0],2)+25*pow(x[1]+t*p[1],2); return s; } /*以下是进退法搜索区间源程序*/ void sb(double *a,double *b,double x[],double p[]) { double t0,t1,t,h,alpha,f0,f1; int k=0; t0=2.5; /*初始值*/ h=1; /*初始步长*/ alpha=2; /*加步系数*/ f0=f(x,p,t0); t1=t0+h; f1=f(x,p,t1); while(1) {

共轭梯度法程序源代码

共轭梯度法程序源代码 #include #include #define N 10 #define eps pow(10,-6) double f(double x[],double p[],double t) { double s; s=pow(x[0]+t*p[0],2)+25*pow(x[1]+t*p[1],2); return s; } /*以下是进退法搜索区间源程序*/ void sb(double *a,double *b,double x[],double p[]) { double t0,t1,t,h,alpha,f0,f1; int k=0; t0=2.5; /*初始值*/ h=1; /*初始步长*/ alpha=2; /*加步系数*/ f0=f(x,p,t0); t1=t0+h; f1=f(x,p,t1); while(1) { if(f1t1?t:t1; break; } } t1=t0+h; f1=f(x,p,t1); }

} /*以下是黄金分割法程序源代码*/ double hjfg(double x[],double p[]) { double beta,t1,t2,t; double f1,f2; double a=0,b=0; double *c,*d; c=&a,d=&b; sb(c,d,x,p);/*调用进退法搜索区间*/ printf("\nx1=%lf,x2=%lf,p1=%lf,p2=%lf",x[0],x[1],p[0],p[1]); printf("\n[a,b]=[%lf,%lf]",a,b); beta=(sqrt(5)-1.0)/2; t2=a+beta*(b-a); f2=f(x,p,t2); t1=a+b-t2; f1=f(x,p,t1); while(1) { if(fabs(t1-t2)

用MATLAB实现最速下降法-牛顿法和共轭梯度法求解实例

题目和要求 最速下降法是以负梯度方向最为下降方向的极小化算法,相邻 两次的搜索方向是互相直交的。牛顿法是利用目标函数)(x f 在迭代点k x 处的Taylor 展开式作为模型函数,并利用这个二次模型函数的极小 点序列去逼近目标函数的极小点。共轭梯度法它的每一个搜索方向是互相共轭的,而这些搜索方向k d 仅仅是负梯度方向k g -与上一次接待 的搜索方向1-k d 的组合。 运行及结果如下: 最速下降法: 题目:f=(x-2)^2+(y-4)^2 M 文件: function [R,n]=steel(x0,y0,eps) syms x ; syms y ; f=(x-2)^2+(y-4)^2; v=[x,y]; j=jacobian(f,v); T=[subs(j(1),x,x0),subs(j(2),y,y0)]; temp=sqrt((T(1))^2+(T(2))^2); x1=x0;y1=y0; n=0; syms kk ; while (temp>eps) d=-T; f1=x1+kk*d(1);f2=y1+kk*d(2); fT=[subs(j(1),x,f1),subs(j(2),y,f2)]; fun=sqrt((fT(1))^2+(fT(2))^2); Mini=Gold(fun,0,1,0.00001); x0=x1+Mini*d(1);y0=y1+Mini*d(2); T=[subs(j(1),x,x0),subs(j(2),y,y0)]; temp=sqrt((T(1))^2+(T(2))^2); x1=x0;y1=y0; n=n+1;

end R=[x0,y0] 调用黄金分割法: M文件: function Mini=Gold(f,a0,b0,eps) syms x;format long; syms kk; u=a0+0.382*(b0-a0); v=a0+0.618*(b0-a0); k=0; a=a0;b=b0; array(k+1,1)=a;array(k+1,2)=b; while((b-a)/(b0-a0)>=eps) Fu=subs(f,kk,u); Fv=subs(f,kk,v); if(Fu<=Fv) b=v; v=u; u=a+0.382*(b-a); k=k+1; elseif(Fu>Fv) a=u; u=v; v=a+0.618*(b-a); k=k+1; end array(k+1,1)=a;array(k+1,2)=b; end Mini=(a+b)/2; 输入: [R,n]=steel(0,1,0.0001) R = 1.99999413667642 3.99999120501463 R = 1.99999413667642 3.99999120501463 n = 1 牛顿法: 题目:f=(x-2)^2+(y-4)^2 M文件:

相关主题