一、算法原理

1、首先了解一个概念,什么式无约束最优化。

无约束优化问题就是在x∈R^n的范围内,找到一点x*,使得f(x*)<f(x)对于任意x∈R^n都成立。点x*就是全局最优解。

其一般形式为        ,x∈R^n。

2、假设函数为f(x),最速下降法通过给定一个初始点xk,选择xk处的负梯度方向为最速下降方向,然后进行线搜索来确定步长。

其迭代公式为:,

其中a为步长,∇f(xk)=gradient(f)/norm(gradient(f))为梯度。

步长a要满足,f(x(k+1))=min(f(x(k+1))

3、算法步骤,整个步骤分为两大部分:按照迭代公式的循环迭代,步长a的确定。

我们以二维极值问题f=x1.^2+25*x2.^2,为例。

(1)给定初始点[2 2],和迭代精度tol(可设置为默认值);

(2)求其梯度∇f(xk)=gradient(f)/norm(gradient(f));

(3)带入迭代公式

(4)步长的确定,将上一步的迭代公式代入f=x1.^2+25*x2.^2,对其求导,导数为零点的a就式最佳步长。

(5)将求得的步长a带入迭代公式,判断||梯度值||是否满足精度要求,不满足要求更新当前梯度值,,继续求步长。不断循环,直至满足要求。

二、MATLAB程序

clc
clear
f=@(x1,x2) x1.^2+25*x2.^2;
[x,result]=Min_TD(f,[2;2]);
function [x,result]=Min_TD(f,x0,tol)%f为匿名函数句柄,x0为初始点,tol为精度
if nargin == 2tol=1e-6;
end
x01=x0(1);
x02=x0(2);
f_sym=sym(f); %将匿名函数转化为符号函数
%% F_td为计算梯度值  f_td为了计算当前梯度值
F_td=matlabFunction(gradient(f_sym));%计算该函数梯度,并取得梯度函数句柄
f_td=F_td(x01,x02); %计算当前的梯度值
d_k=-f_td/norm(f_td);%下降方向
%% 寻找最佳迭代步长 alfa
while norm(f_td) > tol %当前梯度值不满足要求syms alfax1=x0(:)+alfa*d_k;%将这个点带入迭代表达式,求alfa x11=x1(1);x12=x1(2);fx1=f(x11,x12);%计算x1带入后的原函数表达式d_x1=diff(fx1);%对原函数表达是式求导d_alfa=double(solve(d_x1));%求解表达式为0时的alfa(导数为零时的点为极小值点)x0=x0(:)+d_alfa*d_k;%进行迭代x01=x0(1);x02=x0(2);f_td=F_td(x01,x02);%当前梯度值if norm(f_td) < tol %满足要求,退出break;endd_k=-f_td/norm(f_td);%否则,继续迭代
end
x=x0;
result=f(x(1),x(2));
end

MATLAB无约束多维极值——最速下降法相关推荐

  1. 最优化算法python实现篇(4)——无约束多维极值(梯度下降法)

    最优化算法python实现篇(4)--无约束多维极值(梯度下降法) 摘要 算法简介 注意事项 算法适用性 python实现 实例运行结果 算法过程可视化 摘要 本文介绍了多维无约束极值优化算法中的梯度 ...

  2. 无约束多维极值求解思路

    一.问题描述 无约束的多维极值问题一般描述如下公式: 其中x为向量,而f(x)为标量函数,多维极值的问题就是要求得全局最小值.但是大多数的算法都存在着搜索范围问题,无法求得全局最小值,只能计算出一些局 ...

  3. MATLAB 无约束一维极值问题

    无约束一维极值问题   极值问题表达式:min f(x)  x,x[ x1 x2];   一维极值的搜索方式包括线性搜索和非线性搜索,线性搜索包含黄金分割法.斐波那契法和牛顿法,非线性方法包含抛物线法 ...

  4. 最优化作业第6章——无约束多维非线性规划方法

    代码: #导入模块 from sympy import * import sympy as sp #将导入的模块重新定义一个名字以便后续的程序进行使用 from numpy import * impo ...

  5. matlab中fminunc函数使用方法,[分享]无约束非线性规划函数\fminunc函数使用方法(MATLAB)...

    [分享]无约束非线性规划函数\fminunc函数使用方法(MATLAB) 无约束非线性规划函数\fminunc函数使用方法(MATLAB) %用于求解无约束非线性规划的函数有:fminsearch和f ...

  6. 利用 MATLAB 编程实现最速下降法求解无约束最优化问题

    本文章包含以下内容 1.画出最速下降法的算法流程图: 2.MATLAB 编写用数值微分法的梯度计算函数(函数式 M 文件): 3.MATLAB 编写最速下降法求解无约束优化问题的函数,要求采用黄金分割 ...

  7. 最优化算法python实现篇(3)——无约束一维极值(黄金分割法)

    最优化算法python实现篇(3)--无约束一维极值(黄金分割法) 算法适用问题 python实现 示例运行结果 算法适用问题 搜索给定单峰区间的极值问题,一般对凸优化问题比较适用. python实现 ...

  8. 最优化算法python实现篇(2)—无约束一维极值(二分法)

    最优化算法python实现篇(2)--无约束一维极值(二分法) 算法适用问题 python实现 示例运行结果 算法适用问题 搜索给定单峰区间的极值问题,一般对凸优化问题比较适用. python实现 # ...

  9. 无约束一维极值——坐标轮换法

    坐标轮换法是将多维问题转化为一系列一维问题的求解方法,它将多变量的优化问题轮流转化为单变量的优化问题,因此又称为变量轮换法.这种方法在搜索过程中只需要目标函数的信息,而不需要求解目标函数的导数. 坐标 ...

最新文章

  1. Linux下CST和UTC时间的区别以及不一致的解决方法
  2. bzoj 1095: [ZJOI2007]Hide 捉迷藏
  3. [转]VC无负担实现XP风格界面
  4. 数学图形(2.10)一种绕在球上的线圈
  5. 实例Python处理XML文件的方法
  6. django项目更新图片后,页面图片不更新
  7. 围棋棋盘怎么编程python_围_围是什么意思_围字怎么读_围的含义_围字组词-新东方在线字典...
  8. abaqus推荐用哪一版本的_ABAQUS推荐资料合集(一)
  9. UITableView 协议方法中更好的 switch 使用方案
  10. ​小米 11 发布,售价 3999 元起;罗永浩回应败诉半导体公司;deepin 20.1(1010) 发布|极客头条...
  11. keepalived详解(一)——keepalived理论基础
  12. java静态类是只有一个吗,一个只有“私有最终静态”变量的java类。这是一个好主意吗?...
  13. php oracle 存储过程,用PHP调用Oracle存储过程
  14. Android原生游戏开发:使用JustWeEngine开发微信打飞机
  15. 计算机视觉应用期末试卷,计算机视觉期末复习
  16. MIUI 12稳定版系统中的开发者选项限制解除
  17. 腾讯云TVP专家眼中的云开发:尚不完美,未来可期
  18. STM32 WinUSB(WCID)免驱高速通信 20M/s(附详细测试)
  19. xshell / xftp个人免费版 seafile个人云盘下载
  20. Python的特点有哪些

热门文章

  1. 猎聘网简历优化收费服务怎么样?
  2. 鸿蒙星空的太白星 | WebView给元服务调用JS API指明方向
  3. python中参数传递的方法
  4. 多伦多大学计算机语言要求,多伦多大学语言要求
  5. AI智能写作 协作猫让写作简单
  6. 【前端开发】25种提高网页加载速度的方法和技巧
  7. java导入excel文件工具,附面试题答案
  8. 计算机类和信息与计算科学专业有什么区别,信息与计算科学专业主要学什么
  9. 深圳盛世光影传媒有限公司工作环境怎么样?
  10. 基于vue.js的uni app跨平台框架webapp、安卓app、苹果app、微信小程序 毕业设计 毕设作品 开题报告论文参考(2)预约订座APP系统