DFP算法及其matlab实现
目录
一.前沿
二.矫正公式
三.算法步骤
四.matlab程序实现
1.DFP算法封装函数
2.目标函数
3.目标函数梯度
4.主函数
5.运行结果与分析
一.前沿
DFP算法是由Davidon提出的,经过Fletccher和powell改进,故称之为DFP算法。DFP算法也是拟牛顿矫正的一种,目前,它是求解无约束问题最有效的算法之一。其实吧,就是给定一个初始点,根据矫正矩阵和梯度求出下一步的搜索方向,再由Armijo搜索准则求出步长(Armijo准则前面已经简述,现在不再赘述),得到步长和搜索方向之后重新计算新的初始点,若在这个新的点的梯度足够小(就是下降的足够小,一般精度都会给出)时,我们就可以停止运算,输出这个点的值做为近似最优解。
二.矫正公式
三.算法步骤
步0:确定终止误差e=(0~1),设初始点x0,参数=(0~1),=(0,0.5),初始对称正定阵H0=I(单位阵),令k=0
步1:计算gk=f(xk).若||gk||<=e,停算,输出xk作为最优解。否则,转步2
步2:计算搜索方向dk=-Hk*gk
步3:根据Armijo准则计算搜索步长:
用Armjio搜索技术求步长k=^mk,m的值从0开始,
若f(xk+ ^m*dk)<=f(xk)+*^m*gk'dk
则令 mk=m,步长k=^mk,若不满足上式,则m=m+1,直到满足上述不等式为止
其实就是用那个不等式求出m的值,然后用公式求出步长。
步4:令Xk+1=xk+ k*dk,即通过搜索方向和步长确定新的点
步5:根据上面的矫正公式求出新的Hk+1,转步1.
四.matlab程序实现
1.DFP算法封装函数
function [x,val,k]=dfp(x0,fun,gfun)
%功能:用DFP算法求解无约束问题
%输出:x,val,k分别表示近似最优解,近似最优值和迭代次数
%输入:x0,fun,gfun分别表示初始点,目标函数和目标函数的梯度
k=0;
maxk=5000;
rho=0.55;
sigma=0.4;
e=1e-5;%精度
n=length(x0);
Hk=eye(n);
while(k<maxk)gk=feval(gfun,x0);%求梯度if(norm(gk)<=e),break;end %判断是否满足停止迭代dk=-Hk*gk;%确定搜索方向,这个公式课本有mk=0;m=0;%用Armijo准则确定步长while(m<20)if(feval(fun,x0+rho^m*dk)<feval(fun,x0)+sigma*rho^m*gk'*dk)mk=m;break;endm=m+1;endx=x0+dk*rho^mk;%根据初始点,搜索方向和步长求出新的搜索点g=feval(gfun,x);%这个就是新的初始点的梯度sk=x-x0;%新的点减去原来的点yk=g-gk;%新的点的梯度%更新Hkif(sk'*yk>0)Hk=Hk-(Hk*yk*yk'*Hk)/(yk'*Hk*yk)+(sk*sk')/(sk'*yk);%公式endx0=x;k=k+1;
end
x=x0;%break跳出后输出x
val=feval(fun,x);
end
2.目标函数
function f=fun(x)
%需要求解最优值的目标函数
f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;
end
3.目标函数梯度
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.主函数
clear all
x0=[-1.2,1]';%设置的搜索初始点
[x,val,k]=dfp(x0,'fun','gfun');%调用函数
disp('迭代的次数k为:')
disp(k)
disp('近似最优解x为:')
disp(x)
disp('此时f(x)的值为:')
disp(val)
5.运行结果与分析
多试几个初始点后,就可以看到DFP算法的计算效率比不上BFGS算法。
DFP算法及其matlab实现相关推荐
- matlab dfp法,DFP算法及Matlab程序.docx
DFP算法及Matlab程序 作业二 用DFP算法求解,取,.一.求解:求迭代点x1令,得的极小值点,所以得:于是,由DFP修正公式有下一个搜索方向为求迭代点x2令,得的极小值点于是得:,所以:,因H ...
- dfp算法例题matlab,数学软件 之 基于MATLAB的DFP算法
DFP算法是本科数学系中最优化方法的知识,也是无约束最优化方法中非常重要的两个拟Newton算法之一,上一周写了一周的数学软件课程论文,姑且将DFP算法的实现细节贴出来分享给学弟学妹参考吧,由于博客不 ...
- matlab dfp法,DFP算法及Matlab程序(最新整理)
<DFP算法及Matlab程序(最新整理)>由会员分享,可在线阅读,更多相关<DFP算法及Matlab程序(最新整理)(7页珍藏版)>请在人人文库网上搜索. 1.作 业 二用 ...
- matlab dfp法,DFP算法及Matlab程序Word版
<DFP算法及Matlab程序Word版>由会员分享,可在线阅读,更多相关<DFP算法及Matlab程序Word版(6页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版 ...
- dfp matlab源程序,DFP算法及Matlab程序[精校版本]
<DFP算法及Matlab程序[精校版本]>由会员分享,可在线阅读,更多相关<DFP算法及Matlab程序[精校版本](4页珍藏版)>请在人人文库网上搜索. 1.作业二 用DF ...
- DFP算法求极值点matlab,DFP算法及Matlab程序
作业二 用DFP 算法求解1212221422)(m in x x x x x x f --+=,取()T x 110=,??? ? ??=10010H . 一.求解: T T T g H p g x ...
- matlab dfp法,DFP算法及Matlab程序
作业二 用DFP 算法求解1212221422)(min x x x x x x f --+=,取()T x 110=,??? ? ??=10010H . 一.求解: T T T g H p g x ...
- 拟牛顿法-DFP算法举例与matlab代码实现(转载+整理)
算法来自于[1],如下: 值得一提的是,[1]中的python代码实现了对Rosenbrock函数的求极值测试. 例子来自于[2]: --------------------------------- ...
- dfp方法例题_数学软件 之 基于MATLAB的DFP算法
DFP算法是本科数学系中最优化方法的知识,也是无约束最优化方法中非常重要的两个拟Newton算法之一,上一周写了一周的数学软件课程论文,姑且将DFP算法的实现细节贴出来分享给学弟学妹参考吧,由于博客不 ...
最新文章
- 【题解】 bzoj1260: [CQOI2007]涂色paint (区间dp)
- C++中头文件的命名规则
- 《写给大家看的设计书:实例与创意(修订版)》—1你已经知道多少了?
- Android开发之listview添加头布局(header)和脚布局(footer)的方法
- Hibernate generator小结
- 加密保护软件 WinLicense常见问题整理大全(四)
- Python:代码规范和命名规范
- Vim 实用技术,第 1 部分: 实用技巧(转)
- ai人工智能_相信AI?
- 三方支付 微信支付 支付宝支付 银联支付 分享
- 坚果云Outlook邮件管理体系畅享高效办公生活
- 19.首页异步数据的获取
- 一文尽览阿里小程序云应用!你想知道的都在这里!
- 小程序转uni-app——onLoad语法转换
- 苹果切换输入法_最新破解朋友圈折叠的多种方法!安卓和苹果通用!亲测有效!...
- XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 查找校验xml文件中相同的节点属性值 java遍历文件夹解析XML
- 【易通慧谷】科技赋能金融,三新理念全面解读新金融
- adb、logcat
- fusion 谷歌空间_Google Fusion Tables的用例
- Java OOP 9 Java I/O