上一篇文章介绍了修正牛顿法,修正牛顿法的缺点是收敛速度一般,所以为了使算法既不使用Hess阵,也要保证它的收敛速度,本文介绍共轭梯度法。共轭梯度法有超线性的收敛速度,算法结构简单,容易编程,并且不用计算Hess阵的优点。下面介绍共轭梯度法的算法步骤。

步0:确定精度e=(0~1),给定初始点x0,计算g0=f(x0),k=0

步1:若||gk||<=e,停止运算,输出xk作为最优解

步2:计算搜索方向dk:

若k=0,dk=-gk

若k>=1,dk= -gk+*       其中

步3:用Armijo精确线搜索技术确定搜索步长,具体步骤上一篇文章已经详细介绍。这里不再赘述。算了,还是写吧:

设置初始参数 ,=(0~1),=(0~0.5)

步长k=^mk,m的值从0开始

若满足不等式f(xk+ ^m*dk)<=f(xk)+*^m*gk'dk

则 mk=m,步长 k=^mk,若不满足上式,则m=m+1,直到满足上述不等式为止

步4:令Xk+1=xk+ k*dk,然后计算gk=f(xk+1),k=k+1,转步1

代码实现:

1.共轭梯度函数

function [x,val,k]=frcg(fun,gfun,x0)
%功能:用共轭梯度法求无约束问题 mini f(x)
%输入:fun,gfun分别是目标函数和梯度,x0是初始点
%输出:x,val分别是近似最优点和最优值,k表示迭代次数
k=0;
maxk=5000;
rho=0.6;
sigma=0.4;
e=1e-5;%精度
n=length(x0);
while(k<maxk)g=feval(gfun,x0);%求梯度itern=k-(n+1)*floor(k/(n+1));%用于重新开始itern=itern+1;%计算搜索方向if(itern==1)d=-g;elsebeta=(g'*g)/(g0'*g0);d=-g+beta*d0;gd=g'*d; %当搜索方向不是下降方向时,插入负梯度方向作为搜索方向if(gd>=0.0)d=-g;endendif(norm(g)<=e) ,break;end
m=0;
mk=0;
while(m<20)if(feval(fun,x0+rho^m*d)<feval(fun,x0)+sigma*rho^m*g'*d);mk=m;break;endm=m+1;
endx0=x0+d*rho^mk;val=feval(fun,x0);g0=g;d0=d;k=k+1;
end
x=x0;
val=feval(fun,x);
end

2.fun函数

function f= fun(x)
%目标函数
f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;
end

3.gfun函数

function  g=gfun(x)
%目标函数的梯度
g=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1),-200*(x(1)^2-x(2))]';
end

4.主函数

%这个问题的精确值是x=(1,1)',f(x)=0;
clear all
clc
x0=[-1.2 1]';
[x,val,k]=frcg('fun','gfun',x0);
disp('迭代次数:k=')
disp(k)
disp(['最优解:x = '])
disp(x)
disp(['此时: f(x) = ',num2str(val)]) 

5.运行结果

共轭梯度法通常在迭代n步之后,需要重新取负梯度方向作为搜索方向,因为n步迭代之后共轭梯度法产生的搜索搜索方向一般都不是正确的下降搜索方向,所以在n>m时的第m步时通常会插入负梯度方向作为搜索方向。

共轭梯度法及其matlab程序相关推荐

  1. fcm算法的MATLAB实现,FCM算法的matlab程序(初步)

    FCM算法的matlab程序 1.采用iris数据库 iris_data.txt 5.1 3.5 1.4 0.2 4.9 3 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0 ...

  2. matlab 流程计算方法,吸波材料LLG公式计算复磁导率的过程及matlab程序

    看到一篇paper,利用Landau-Lifshitz-Gilbert 公式计算片状颗粒的复磁导率.(JAP 107,033913, 2010) http://scitation.aip.org/co ...

  3. matlab图像定位分割,車牌定位matlab程序:通過hsv彩色分割方式定位車牌

    最近看了<基於數字圖像處理的車牌識別研究>這篇論文,對車牌識別知識講的很仔細,推薦. 1.(摘自<基於數字圖像處理的車牌識別研究>) 通過對大量車牌圖像的分析,可以發現對於具有 ...

  4. matlab dfp法,DFP算法及Matlab程序.docx

    DFP算法及Matlab程序 作业二 用DFP算法求解,取,.一.求解:求迭代点x1令,得的极小值点,所以得:于是,由DFP修正公式有下一个搜索方向为求迭代点x2令,得的极小值点于是得:,所以:,因H ...

  5. matlab程序eX2_2是什么意思,第2章 MATLAB程序设计

    第2章MATLAB程序设计基础 Matlab以矩阵为运算单元,除非特殊需要,矩阵不必事先定义维数大小.Matlab还提供了丰富的矩阵运算函数,如求逆矩阵的inv函数,求方阵行列式的det函数,求矩阵特 ...

  6. 不用工具箱的神经网络matlab程序_MATLAB中的神经网络工具箱(2)函数命令及模型搭建...

    前面介绍了神经网络工具箱GUI的使用,它功能强大可以直接生成脚本.但是函数命令的灵活性是GUI所不及的.也应该有所了解. 神经网络函数命令 1.网络创建函数 函数名称 功能 fitnet 创建函数拟合 ...

  7. matlab解决多旅游商问题,多旅行商问题的matlab程序

    %多旅行商问题的matlab程序 function varargout = mtspf_ga(xy,dmat,salesmen,min_tour,pop_size,num_iter,show_prog ...

  8. 数值分析龙贝格matlab,龙贝格matlab程序

    k>=15 [龙贝格求积算法 Matlab 主程序] function[t]=rbg(f,a,b,c) t=zeros(15,4); %定义龙贝格积分函数,f 为待积函数,a 与 b 为积 分上 ...

  9. 几种常见窗函数及其MATLAB程序实现

    数字信号处理中通常是取其有限的时间片段进行分析,而不是对无限长的信号进行测量和运算.具体做法是从信号中截取一个时间片段,然后对信号进行傅里叶变换.相关分析等数学处理.信号的截断产生了能量泄漏,而用FF ...

  10. 倒立摆的数学模型,matlab程序,simulink,c语言控制,一级倒立摆的控制设计

    本论文主要研究内容 倒立摆装置被公认为自动控制理论中的典型试验设备,也是控制理论教学和科研中不可多得的典型物理模型.本论文的研究旨在完成这样一系列工作: 介绍倒立摆系统控制的研究发展过程和现状:研究单 ...

最新文章

  1. 三张图读懂机器学习 :基本概念、五大流派与九种常见算法
  2. 在Ubuntu下利用Eclipse调试FFmpeg
  3. Windows系统笔记本禁用自带键盘
  4. 【深度学习】近几年,关于基于Imagenet数据集图像分类的模型总结
  5. JQuery在循环中绑定事件的问题详解
  6. QAliber - 介绍一款开源的GUI自动化测试工具
  7. 电子购物网站导航制作
  8. gcode 解析入门1-1
  9. 图片边缘出现黑点的问题分析和解决(纹理过滤)
  10. 上海东方美谷JW万豪、福清喜来登、宁波杭州湾凯悦等酒店开业 | 中国酒店周刊...
  11. 【学习方法】无论学什么东西,三个步骤:①大致粗通 ②重点精通 ③融会贯通...
  12. python程序员电脑推荐_2019程序员笔记本推荐?
  13. 中国文化产业基地(园区)前景预测和发展战略规划建议报告2021年版
  14. 德州市德城区农产品区域公用品牌“尚德诚品”正式发布
  15. 基于对话框的MFC程序加载位图为背景图案
  16. Netty-入门篇(核心组件介绍实战)
  17. 计算机公式与函数试题,计算机国考样题EXCEL之公式与函数的应用一
  18. python小组项目总结报告_项目总结报告范文78922
  19. 使用皮皮影院搭建电影展
  20. matlab工具箱简述 自用

热门文章

  1. Hybrid Astar 算法剖析和实现(二)
  2. java itext 页边距_iText的用法
  3. 年轻人的第一笔债,在双11的直播间里
  4. Nginx源码安装(CentOS7)
  5. 机器学习中的矩阵分析与应用
  6. delphi播放wav声音
  7. KITTI数据集GPS数据格式dataformat
  8. 高斯求积分公式matlab,matlab高斯积分公式
  9. 如何解决手机电话本CSV格式和VCF格式的转换
  10. GBA模拟器 v1.8官方简体中文版