DFP算法是本科数学系中最优化方法的知识,也是无约束最优化方法中非常重要的两个拟Newton算法之一,上一周写了一周的数学软件课程论文,姑且将DFP算法的实现细节贴出来分享给学弟学妹参考吧,由于博客不支持数学公式,所以就不累述算法原理及推导公式了。

DFP算法流程图

先给出DFP算法迭代流程图,总体上是拟Newton方法的通用迭代步骤,唯独在校正公式的地方有所区别。

MATLAB实现DFP

基于此图便可以设计DFP算法的MATLAB程序:

对分法及加步探索法的实现

首先由于DFP算法中需要利用一维搜索得到最优步长,因此需要先设计一个一维搜索函数,博主选用的是简单的对分法(二分法):

%本函数利用二分法求解X = ls(Xk,Pk)问题

%目标函数:f

%符号参数:var

%终止限:eps

function x = dichotomy(f,var,eps)

g = diff(f,var);

[a, b] = search(f,var);

x = (a + b)/2; %防止eps过大导致x无值

while b - a > eps

x = (a+b)/2;

gx = subs(g, var, x);

if gx > 0

b = x;

elseif gx < 0

a = x;

else break;

end

end

%加步搜索法-确定搜索区间

function [a, b] = search(g,var)

gt = matlabFunction(g);

X = 0; tmp = X;

h = 1; k = 0;

while 1

Xk = X + h; k = k+1;

Y = subs(gt,var,X);

Yk = subs(gt,var,Xk);

if Y > Yk %加大步长搜索

h = 2 * h;

tmp = X;

X = Xk;

elseif Y == Yk %缩小步长搜索

h = h/2;

elseif k == 1

h = -h; %反向搜索

else break;

end

end

a = min(tmp, Xk);

b = max(tmp, Xk);

end

end

DFP算法的实现

有了一维搜索函数,那么实现DFP算法也就能依照算法流程图来设计了:

%DFP算法主程序

%目标函数:f

%初始点:X0

%参数:var

%终止限:eps

function DFP(f, X0, var, eps)

%初始化符号函数,梯度,维数等

syms var t;

g = jacobian(f)'; %Jacobian转置->Grad

fx = matlabFunction(f); %符号函数->函数句柄(R2009以上支持)

gx = matlabFunction(g);

n = length(var); %维数

X = X0; Xk = X0;

while 1

fx0 = fx(X(1),X(2)); gx0 = gx(X(1),X(2));

Hk = eye(2); Pk = -gx0; %初始方向

k = 0; %迭代次数

while 1

Y = Xk + t*Pk;

y = fx(Y(1),Y(2));

tk = dichotomy(y, t, eps); %一维搜索

Xk = Xk + tk*Pk;

fx1 = fx(Xk(1),Xk(2));

gx1 = gx(Xk(1),Xk(2));

if norm(gx1) < eps || k == n

X = Xk; fx0 = fx1;

break;

end

Sk = Xk - X; Yk = gx1 - gx0;

Hk = Hk + Sk*Sk'/(Sk'*Yk) - Hk*(Yk)*Yk'*Hk/(Yk'*Hk*Yk);

Pk = -Hk*gx1; %校正方向

k = k+1;

end

if norm(gx1) < eps

disp('X(k+1) = '); disp(Xk);

disp('F(K+1) = '); disp(fx0);

break;

end

end

实例验证

有了DFP算法的实现函数,那么应用于实例也就不难了。

可以在命令文件下输入如下代码就能得到目标函数极值点及极值

clear; clc; format long;

syms x1 x2;

f = 4*(x1-5)^2 + (x2-6)^2;

tic; %初始时间

DFP(f, [8;9], [x1, x2], 0.00000001);

toc; %结束时间

输出结果如下:

X(k+1) =

4.999995811278565

5.999767686222325

F(K+1) =

5.403987284687523e-08

Elapsed time is 8.229108 seconds.

算法时间度分析:

由此可知,函数在[8,9]附近的点[5.00,6.00]处取得局部最小值,其中局部极值点约为5.40e-8.

此算法运行时间约为8.23s,并且我们在降低终止限eps后,针对本题,算法运行时间增长较快,例如若eps = 1e-3,耗时11.6s,若eps = 1e-5,耗时22.94s,而eps = 1e-7,耗时甚至超过15分钟.这说明DFP算法在求解高精度运算时的运行效率表现得并不是那么好,甚至有可能无法得出最优解.

实例搜索图

基于该实例,对算法的迭代过程进行绘图,得到如下搜索图

可以由以上两个搜索图像得出一个结论:DFP算法的实质是在每一次迭代过程中调整自己的搜索方向,以使得该方向能够尽可能接近极值点,这也正是几乎所有拟Newton算法中校正矩阵的作用.

dfp方法例题_数学软件 之 基于MATLAB的DFP算法相关推荐

  1. dfp算法例题matlab,数学软件 之 基于MATLAB的DFP算法

    DFP算法是本科数学系中最优化方法的知识,也是无约束最优化方法中非常重要的两个拟Newton算法之一,上一周写了一周的数学软件课程论文,姑且将DFP算法的实现细节贴出来分享给学弟学妹参考吧,由于博客不 ...

  2. dfp方法例题_最优化之DFP算法考试题

    最优化之 DFP 算法考试题 代码: Dfp.m 文件 function [x,val,k]=dfp(fun,gfun,x0) % 功能 : 用 DFP 算法求解无约束问题 : min f(x) % ...

  3. matlab 图像分割_好文章:基于MATLAB的图像分割算法研究

    摘 要 本文从原理和应用效果上对经典的图像分割方法如边缘检测.阈值分割技术和区域增长等进行了分析.对梯度算法中的Roberts算子.Sobel算子.Prewitt算子.拉普拉斯(Laplacian)算 ...

  4. 数学软件四大家族—MATLAB、MathCAD、Maple 和 Mathematica 优缺点比较

    目录 数学软件四大家族-MATLAB.MathCAD.Maple 和 Mathematica 优缺点比较 MATLAB 系统 MathCAD 系统 Maple V 系统 Mathematica 系统 ...

  5. 【数学建模】基于matlab动态水波仿真【含Matlab源码 2056期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数学建模]基于matlab动态水波仿真[含Matlab源码 2056期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费 ...

  6. 【数学建模】基于matlab武汉地铁2号线路线地图动态模拟【含Matlab源码 1092期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数学建模]基于matlab武汉地铁2号线路线地图动态模拟[含Matlab源码 1092期] 点击上面蓝色字体,直接付费下载,即可. 获取代 ...

  7. 【数学建模】基于matlab船舶三自由度MMG模型【含Matlab源码 1925期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数学建模]基于matlab船舶三自由度MMG模型[含Matlab源码 1925期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式 ...

  8. 【数学建模】基于matlab zernike泽尼克多项式仿真【含Matlab源码 1953期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数学建模]基于matlab zernike泽尼克多项式仿真[含Matlab源码 1953期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  9. 【数学建模】基于matlab三维海浪模型仿真【含Matlab源码 1159期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数学建模]基于matlab三维海浪模型仿真[含Matlab源码 1159期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付 ...

最新文章

  1. python3哪个教程好-Python3 教程
  2. bootstrap-select实现下拉框多选效果
  3. map转字符串数组中 php_js将map转换成数组
  4. c语言 -1%4,**************
  5. [CLR via C#]4. 类型基础及类型、对象、栈和堆运行时的相互联系
  6. 半文不白的语言(语气助词)
  7. 6月份个人:修改Windows系统多人使用多账号同时远程登陆 并修改脚本自动生成每个用户登录日志。...
  8. 公共代码参考(PackageManager)
  9. 工作上不要遮掩,如实回答,什么样的借口可以接受
  10. cisco路由器OSPF基础配置命令
  11. vmplayer网络配置详解
  12. (三十七)java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案
  13. mac 语音召唤siri_在Mac上使用Siri可以做的11件事
  14. 【壁纸】kali linux 2021.1 自带原版壁纸分享
  15. guitar pro8.1免费的吉他学习辅助软件
  16. 使用git进行版本控制
  17. xss漏洞原因以及如何应对
  18. Android webview支持H5页面通过js实现文件上传、图片上传
  19. 涉密计算机的安全审计和检查,计算机安全保密审计报告
  20. 数字孪生 3D 科技馆的科学传播新模式

热门文章

  1. 原力创新护航CIBN 共促新媒体业态发展
  2. 如何用matlab判定线性相关并给出极大无关组
  3. 踢了网易自己干?魔兽手游复活!《永恒之塔》私服团伙落网
  4. 为何“迷你本”退货率很高?
  5. idea怎么设置为黑色背景
  6. mysql base64 图片php_php base64转图片
  7. 北京供销大数据集团荣获“2016-2017年度数据中心优秀创新企业奖”
  8. LeetCode精选算法100题,从入门到入赘
  9. js实现新浪微博评论
  10. 华清远见重庆中心——移动互联应用学习总结