DFP算法原理

由于博主使用WPS编辑的文本,公式无法赋值粘贴,这里以截图的方法给出了推导过程。博主会上传该DOC文档。

牛顿法

阻尼牛顿法

BFGS算法原理

matlab代码(DFP)

syms x1 x2

f=@(x1,x2) x1.^2+x2.^2-x1*x2-10*x1-4*x2+60;

X=DFP(f,[0 0],1e-8,100)

function x=DFP(f,x0,eps,k)

%目标函数f

%初始迭代点x0

%迭代精度eps

%迭代次数K

x0=x0';

TiDu=matlabFunction(gradient(sym(f)));

m=length(x0);

H=eye(m);%构造初始海塞矩阵

%写出函数值,梯度值的表达式

f_cal='f(x0(1),x0(2))'; %初始点函数值

tidu_cal='TiDu(x0(1),x0(2))';

f1_cal='f(x_1(1),x_1(2))';%下一点函数值

%% 从第一个点计算到第二个点

f_x0=eval(f_cal);%计算初始点函数值

tidu_x0=eval(tidu_cal);%计算初始点梯度值

if norm(tidu_x0) < eps%判断是否满足终止条件

x=x0;

return;

end

d=-A*tidu_x0;% 下降方向

syms alfa %定义步长

x_1=x0+alfa*d;%更新迭代点位置

f_x1=eval(f1_cal);%计算迭代点的函数表达式

df_x1=diff(f_x1);%迭代点的梯度表达式

dalfa=double(solve(df_x1));%求解,得到步长alfa

x0=x0+dalfa*d;%更新初始点

tidu_x1=eval(tidu_cal);%计算该点梯度

n=1;

while n < k && norm(tidu_x1) > eps

delta_x=dalfa*d; %计算sK

delta_g=tidu_x1-tidu_x0; %计算yk

delta_H=delta_x*delta_x'/(delta_x'*delta_g)- H*delta_g*delta_g'*H/(delta_g'*H*delta_g); %计算delta_Dk

H=H+delta_H; %dfp迭代公式

tidu_x0=tidu_x1; %将该点梯度作为新的初始点继续迭代

d=-A*tidu_x0;% 下降方向

syms alfa

x_1=x0+alfa*d;

f_x1=eval(f1_cal);

df_x1=diff(f_x1);

dalfa=double(solve(df_x1));

x0=x0+dalfa*d;

tidu_x1=eval(tidu_cal);

end

x=x0;

end

matlab代码(BFGS)

%% BFGS算法与DFP算法过程类似,只是迭代函数不同

clc

clear

syms x1 x2

f=@(x1,x2) x1.^2+x2.^2-x1*x2-10*x1-4*x2+60;

X=BFGS(f,[0 0],1e-8,100)

function x=BFGS(f,x0,eps,k)

x0=x0';

TiDu=matlabFunction(gradient(sym(f)));

m=length(x0);

A=eye(m);%构造初始矩阵

f_cal='f(x0(1),x0(2))';

tidu_cal='TiDu(x0(1),x0(2))';

f1_cal='f(x_1(1),x_1(2))';

%从第一个点计算到第二个点

f_x0=eval(f_cal);

tidu_x0=eval(tidu_cal);

if norm(tidu_x0) < eps

x=x0;

return;

end

d=-A*tidu_x0;% 下降方向

syms alfa

x_1=x0+alfa*d;

f_x1=eval(f1_cal);

df_x1=diff(f_x1);

dalfa=double(solve(df_x1));

x0=x0+dalfa*d;

tidu_x1=eval(tidu_cal);

n=1;

while n < k && norm(tidu_x1) > eps

delta_x=dalfa*d;

delta_g=tidu_x1-tidu_x0;

delta_A=-A*delta_x*delta_x'*A/(delta_x'*A*delta_x)+delta_g*delta_g'/(delta_g'*delta_x);

A=A+delta_A;

tidu_x0=tidu_x1;

d=-A*tidu_x0;% 下降方向

syms alfa

x_1=x0+alfa*d;

f_x1=eval(f1_cal);

df_x1=diff(f_x1);

dalfa=double(solve(df_x1));

x0=x0+dalfa*d;

tidu_x1=eval(tidu_cal);

end

x=x0;

end

matlab中bfgs的用法,MATLAB拟牛顿法之DFP与BFGS算法相关推荐

  1. matlab中linspace的用法,matlab中的一些基本使用方法(持续添加)

    MATLAB中的常用清除命令 1.clc命令:即可清空命令窗口中的内容. 2.clf命令:清除当前figure中的内容. 3.close命令:关闭当前打开的figure图形界面. 4.clear命令: ...

  2. matlab中等号的用法,matlab中“==”两个等号连一块是啥意思?怎么用?

    www.mh456.com防采集. a=5 % 给变量a赋值a==5 % 逻辑判断,变量a是否等于5,如果是则返回1,否则返回0.追问M=max(DeD);for i=1:M+1; %网络图中节点的度 ...

  3. matlab中rng的用法,matlab 中rag函数怎么用?

    1,一维数组输入 在matlab中,基本的运算单元是无需指定维数的数组.一维数组在数学上常称为向量,如下所示,在matlab中要输入数组 a = {1,2,4,9,21,13,20} ,按照下面格式就 ...

  4. matlab中randint函数用法,matlab中rand randn randint函数的区别

    matlab中rand函数是产生0到1的随机分布 matlab中randn函数是产生标准正态分布 randint是产生整数随机数,默认为0和1 %%%%%%%%%%%rand%%%%%%%%%%%%% ...

  5. matlab中normcdf函数用法,MATLAB NORMCDF

    MATLAB 中关于常见的概率分布密度函数的语句及格 式 MATLAB 中关于常见的概率分布密度函数的语句及格式 normpdf(x,mu,sigma) 正态分布密度函数. uifpdf(x,a,b) ...

  6. matlab中repmat的用法,Matlab: sum的用法、每一行求和、repmat的用法、sum和repmat结合使用减少循环...

    偶尔会用到关于矩阵元素的求和,总结一下常用的 目录 1.向量求和 2.矩阵求和 (1)默认按列求和,得到一个行向量 (2)求每一行的和 3.sum和repmat一起使用 (1)矩阵A中每一行的平方和 ...

  7. matlab中normcdf函数用法,Matlab中标准正态分布的密度函数是normcdf(x,0,1)

    中标准正属于项目资本现金流量表中现金流出构成的是() 态分USCI模块中的波特率由分频器和调制器共同作用生成. 在MSP430F66xx时钟设置中XT1的XIN和XOUT引脚接32768Hz低频晶振, ...

  8. matlab中平均函数用法,matlab中怎样在X的指定范围内求y的平均值

    有两组数据,前面一组值设为x后面一组设为y.x是坐标的变化范围,y是每个坐标下力的大小,怎样在X的指定范围内求y的平均值?? 比如下面x范围是从-18.19959641到-18.00003052之内的 ...

  9. matlab中ga函数用法,matlab遗传算法ga函数

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 function optimization4() A=[];b=[]; Aeq=[];beq=[];LB=[0.1;0.03;0.03;0.1;0.03; ...

  10. matlab中triangle函数用法,matlab triangle函数格式

    匿名用户 1级 2016-07-27 回答 pulstran(t,d,p,fs,w)其中t是时间,d为函数偏移(如y = func(t-d(1)) + func(t-d(2)) + ... ):p是函 ...

最新文章

  1. 读书人:人机融合中的深度态势感知
  2. 利用PHP的Popen实现RRDTOOL作图的动态输出
  3. Python中self的用法
  4. OpenCV使用Laplacian filtering和距离变换以及Laplacian滤波对重叠对象进行分段的实例(附完整代码)
  5. U-boot 打补丁,编译,设置环境变量,
  6. react(86)--列表项控制选中
  7. 玩转oracle 11g(50):rman备份脚本
  8. 抖音2020研究报告_抖音音乐发布2020抖音音乐生态数据报告
  9. 通过分析系统日志,统计你的电脑开机时间的小程序PC PowerOn Time,附源码
  10. 微服务网关(gateway)概述 与 嵌入式 Zuul 反向代理
  11. 自制全铝CNC雕刻机全过程(完工篇)
  12. 英特尔核显驱动hd630_全新CPU性能天梯图,十代英特尔与R3 3100/3300X定位讲解
  13. linux下动态域名的实践
  14. BASH脚本基础:环境变量PS1配色方法
  15. java零基础风清扬黑马笔记
  16. JVM虚拟机与Android虚拟机
  17. IEC101 可变结构限定词、传送原因、ASDU公共地址和传送原因
  18. [C++]判断齐次坐标系中三点是否共线(三个向量是否共面)
  19. 新手学习python零基础_一个零基础新手学习Python应该知道的学习步骤与规划
  20. 一个屌丝程序猿的人生(九十六)

热门文章

  1. Debian 安装 xfce4 桌面
  2. drbd文件服务器搭建,Drbd概念和安装一
  3. css 鼠标滑过组件变色
  4. 【UC浏览器】魅族M8专版7.0 beta1发布啦
  5. 微信小程序开发:设定背景图片
  6. 计算机主机如何识别低速和全速,USB2.0 速度识别--区分低速-高速-全速
  7. hwclock command usage
  8. markdown数学公式(常用版介绍)
  9. 海龟画图 python太阳花_python画图之“小海龟”turtle
  10. Python—UDP网络程序