注明:程序中调用的函数jintuifa.m golddiv.m我在之前的笔记中已贴出

DFP算法和BFGS算法不同在于H矩阵的修正公式不同

DFP算法

%拟牛顿法中DFP算法求解f = x1*x1+2*x2*x2-2*x1*x2-4*x1的最小值,起始点为x0=[1 1]  H0为二阶单位阵

%算法根据最优化方法(天津大学出版社)116页算法3.5.1编写

%v1.0 author: liuxi BIT

%format long

syms  x1 x2 alpha;

f = x1*x1+2*x2*x2-2*x1*x2-4*x1;%要最小化的函数

df=jacobian(f,[x1 x2]);%函数f的偏导

epsilon=1e-6;%0.000001

k=1;

x0=[1 1];%起始点

xk=x0;

gk=subs(df,[x1 x2],xk);%起始点的梯度

%gk=double(gk);

H0=[1 0;0 1];%初始矩阵为二阶单位阵

while(norm(gk)>epsilon)%迭代终止条件||gk||<=epsilon

if k==1

pk=-H0*gk';%负梯度方向

Hk0=H0;%HK0代表HK(k-1)

else

pk=-Hk*gk';

Hk0=Hk;%HK0代表HK(k-1)

end

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';

gk0=gk;%gk0代表g(k-1)

gk=subs(df,[x1 x2],xk);

%gk=double(gk);

yk=gk-gk0;

sk=best_alpha*pk';%sk=x(k+1)-xk

Hk=Hk0-Hk0*yk'*yk*Hk0/(yk*Hk0*yk')+sk'*sk/(yk*sk');%修正公式

k=k+1;

end

best_x=xk;%最优点

best_fx=subs(f,[x1 x2],best_x);%最优值

BFGS算法

%拟牛顿法中BFGS算法求解f = x1*x1+2*x2*x2-2*x1*x2-4*x1的最小值,起始点为x0=[1 1]  H0为二阶单位阵

%算法根据最优化方法(天津大学出版社)122页编写

%v1.0 author: liuxi BIT

%format long

syms  x1 x2 alpha;

f = x1*x1+2*x2*x2-2*x1*x2-4*x1;%要最小化的函数

df=jacobian(f,[x1 x2]);%函数f的偏导

epsilon=1e-6;%0.000001

k=1;

x0=[1 1];%起始点

xk=x0;

gk=subs(df,[x1 x2],xk);%起始点的梯度

%gk=double(gk);

H0=[1 0;0 1];%初始矩阵为二阶单位阵

while(norm(gk)>epsilon)%迭代终止条件||gk||<=epsilon

if k==1

pk=-H0*gk';%负梯度方向

Hk0=H0;%HK0代表HK(k-1)

else

pk=-Hk*gk';

Hk0=Hk;%HK0代表HK(k-1)

end

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';

gk0=gk;%gk0代表g(k-1)

gk=subs(df,[x1 x2],xk);

%gk=double(gk);

yk=gk-gk0;

sk=best_alpha*pk';%sk=x(k+1)-xk

%====begin=============与DFP算法不同的地方==============    wk=(yk*Hk*yk')^0.5*(sk'/(yk*sk')-Hk*yk'/(yk*Hk*yk'));

Hk=Hk0-Hk0*yk'*yk*Hk0/(yk*Hk0*yk')+sk'*sk/(yk*sk')+wk*wk';%修正公式

%====end===============与DFP算法不同的地方==============    k=k+1; end best_x=xk%最优点 best_fx=subs(f,[x1 x2],best_x)%最优值

c语言dfp算法程序,拟牛顿法中的DFP算法和BFGS算法相关推荐

  1. Widar2.0:SAGE算法和SAGE算法在在无线信道参数估计中的应用

    Widar2.0:SAGE算法和SAGE算法在在无线信道参数估计中的应用 C1 本文背景 C2 SAGE算法 C2.1 EM算法 C2.2 SAGE算法 C2.3 SAGE算法和SAGE算法在在无线信 ...

  2. Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)

    Algorithm:C++语言实现之字符串相关算法(字符串的循环左移.字符串的全排列.带有同个字符的全排列.串匹配问题的BF算法和KMP算法) 目录 一.字符串的算法 1.字符串的循环左移 2.字符串 ...

  3. WordCount作业提交到FileInputFormat类中split切分算法和host选择算法过程源码分析

    参考 FileInputFormat类中split切分算法和host选择算法介绍  以及 Hadoop2.6.0的FileInputFormat的任务切分原理分析(即如何控制FileInputForm ...

  4. 游戏中DDA算法和Bresenham算法的应用

    在角色扮演或即时战略游戏中,经常会将角色以最佳的方式走到指定地点.游戏场景的地面情况复杂,而且场面大,若采用盲目式搜索,例如盲目穷举法,则几乎要遍历整个场景,效率非常低,造成角色反应速度过慢,实践证明 ...

  5. FileInputFormat类中split切分算法和host选择算法介绍

    在hadoop源码的org.apache.hadoop.mapred包中,有个FileInputFormat类,这个类的主要作用是提供统一的getSplits函数.该函数实现中最核心的两个算法是 sp ...

  6. C语言——中点画圆算法和Bresenham画圆算法(easyx图形库)

    一.中点画圆法 首先是中点画圆法,考虑圆心在原点,半径为R的圆在第一象限内的八分之一圆弧,从点(0, R)到点(R/ , R/ )顺时针方向确定这段圆弧.假定某点Pi(xi, yi)已经是该圆弧上最接 ...

  7. JVM中的垃圾收集算法和Heap分区简记

    如何判断垃圾对象? 垃圾收集的第一步就是先需要算法来标记哪些是垃圾,然后再对垃圾进行处理. 引用计数(ReferenceCounting)算法 这种方法比较简单直观,FlashPlayer/Pytho ...

  8. prim算法和kruskal算法(C语言)

    prim算法: /* 邻接矩阵存储 - Prim最小生成树算法 */Vertex FindMinDist( MGraph Graph, WeightType dist[] ) { /* 返回未被收录顶 ...

  9. dijkstra算法和floyd算法(C语言)

    dijkstra算法: /* 邻接表存储 - 无权图的单源最短路算法 *//* dist[]和path[]全部初始化为-1 */ void Unweighted ( LGraph Graph, int ...

最新文章

  1. java 实例化 bean,Spring(02)——bean实例化
  2. fiddler设置https抓包
  3. java集合set的使用_浅析Java中的set集合类型及其接口的用法
  4. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 23丨学生们参加各科测试的次数【难度简单】​
  5. linux进程实际内存大小,Linux进程内存用量分析之堆内存篇
  6. 新手程序员不知道的小技巧!
  7. 从零开始学PowerShell(3)筛选的力量
  8. C++:利用sort()对vector中的数据自定义排序
  9. PAT乙级 1005继续3n+1猜想
  10. java递归 优点缺点_java编程之递归算法总结
  11. 动态构建LINQ表达式
  12. C++语言函数重载详解和示例
  13. 初识Git-GitHub
  14. luogu P5290 [十二省联考2019]春节十二响 优先队列 + 启发式合并
  15. 卡巴斯基安全部队2013 卡巴斯基正式版 送一年使用序列号
  16. cdr怎么抠图轮廓线条_cdr怎么快速抠图呢 需要技巧
  17. erp框架 saas_Saas模式ERP系统
  18. paip 破解网站手机验证码
  19. 举例在移动HTML5 UI框架有那些
  20. 正则表达式--教程一 简介(共三篇)

热门文章

  1. 基于MATLAB与VC混合编程的数字均衡器设计
  2. R语言【SPSS的sav数据导入Rstudio】
  3. 如何在沟通当中避免生气,减少负面情绪?
  4. golang读取mongodb数据出错:invalid character ‘Ì‘ looking for beginning of value
  5. 人脸检测颜值软件_颜值检测软件下载-颜值检测 安卓版v1.0-PC6安卓网
  6. HTML插入在线图片不成功?
  7. Android Media Format 支持的格式
  8. C++ 使用base64进行编码和解码
  9. 强迫对流换热系数测定所求实验公式的应用条件和范围式什么
  10. 2. Kimball的DW/BI架构解析