c语言dfp算法程序,拟牛顿法中的DFP算法和BFGS算法
注明:程序中调用的函数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算法相关推荐
- Widar2.0:SAGE算法和SAGE算法在在无线信道参数估计中的应用
Widar2.0:SAGE算法和SAGE算法在在无线信道参数估计中的应用 C1 本文背景 C2 SAGE算法 C2.1 EM算法 C2.2 SAGE算法 C2.3 SAGE算法和SAGE算法在在无线信 ...
- Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)
Algorithm:C++语言实现之字符串相关算法(字符串的循环左移.字符串的全排列.带有同个字符的全排列.串匹配问题的BF算法和KMP算法) 目录 一.字符串的算法 1.字符串的循环左移 2.字符串 ...
- WordCount作业提交到FileInputFormat类中split切分算法和host选择算法过程源码分析
参考 FileInputFormat类中split切分算法和host选择算法介绍 以及 Hadoop2.6.0的FileInputFormat的任务切分原理分析(即如何控制FileInputForm ...
- 游戏中DDA算法和Bresenham算法的应用
在角色扮演或即时战略游戏中,经常会将角色以最佳的方式走到指定地点.游戏场景的地面情况复杂,而且场面大,若采用盲目式搜索,例如盲目穷举法,则几乎要遍历整个场景,效率非常低,造成角色反应速度过慢,实践证明 ...
- FileInputFormat类中split切分算法和host选择算法介绍
在hadoop源码的org.apache.hadoop.mapred包中,有个FileInputFormat类,这个类的主要作用是提供统一的getSplits函数.该函数实现中最核心的两个算法是 sp ...
- C语言——中点画圆算法和Bresenham画圆算法(easyx图形库)
一.中点画圆法 首先是中点画圆法,考虑圆心在原点,半径为R的圆在第一象限内的八分之一圆弧,从点(0, R)到点(R/ , R/ )顺时针方向确定这段圆弧.假定某点Pi(xi, yi)已经是该圆弧上最接 ...
- JVM中的垃圾收集算法和Heap分区简记
如何判断垃圾对象? 垃圾收集的第一步就是先需要算法来标记哪些是垃圾,然后再对垃圾进行处理. 引用计数(ReferenceCounting)算法 这种方法比较简单直观,FlashPlayer/Pytho ...
- prim算法和kruskal算法(C语言)
prim算法: /* 邻接矩阵存储 - Prim最小生成树算法 */Vertex FindMinDist( MGraph Graph, WeightType dist[] ) { /* 返回未被收录顶 ...
- dijkstra算法和floyd算法(C语言)
dijkstra算法: /* 邻接表存储 - 无权图的单源最短路算法 *//* dist[]和path[]全部初始化为-1 */ void Unweighted ( LGraph Graph, int ...
最新文章
- java 实例化 bean,Spring(02)——bean实例化
- fiddler设置https抓包
- java集合set的使用_浅析Java中的set集合类型及其接口的用法
- 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 23丨学生们参加各科测试的次数【难度简单】​
- linux进程实际内存大小,Linux进程内存用量分析之堆内存篇
- 新手程序员不知道的小技巧!
- 从零开始学PowerShell(3)筛选的力量
- C++:利用sort()对vector中的数据自定义排序
- PAT乙级 1005继续3n+1猜想
- java递归 优点缺点_java编程之递归算法总结
- 动态构建LINQ表达式
- C++语言函数重载详解和示例
- 初识Git-GitHub
- luogu P5290 [十二省联考2019]春节十二响 优先队列 + 启发式合并
- 卡巴斯基安全部队2013 卡巴斯基正式版 送一年使用序列号
- cdr怎么抠图轮廓线条_cdr怎么快速抠图呢 需要技巧
- erp框架 saas_Saas模式ERP系统
- paip 破解网站手机验证码
- 举例在移动HTML5 UI框架有那些
- 正则表达式--教程一 简介(共三篇)
热门文章
- 基于MATLAB与VC混合编程的数字均衡器设计
- R语言【SPSS的sav数据导入Rstudio】
- 如何在沟通当中避免生气,减少负面情绪?
- golang读取mongodb数据出错:invalid character ‘Ì‘ looking for beginning of value
- 人脸检测颜值软件_颜值检测软件下载-颜值检测 安卓版v1.0-PC6安卓网
- HTML插入在线图片不成功?
- Android Media Format 支持的格式
- C++ 使用base64进行编码和解码
- 强迫对流换热系数测定所求实验公式的应用条件和范围式什么
- 2. Kimball的DW/BI架构解析