25.4 matlab里面的10中优化方法介绍——最速下降法(matlab程序)

这篇具有很好参考价值的文章主要介绍了25.4 matlab里面的10中优化方法介绍——最速下降法(matlab程序)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.简述

      

matlab实现最速下降法
定义:沿负梯度方向进行搜索的算法(负梯度方向为最速下降方向)
算法步骤:

步0:选取初始点x0,容许误差是e=[0~1],令k=1

步1:计算目标函数的梯度gk=▽f(xk))
 

若 ||gk||<=e,即达到误差要求,立即停止计算,并输出xk作为近似最优解。

步2:取搜索方向为dk=-gk(即负梯度方向)。

步3:利用线搜索技术确定步长σ
 

 文章来源地址https://www.toymoban.com/news/detail-606534.html

(这里采用Armijo准则来求步长) 

步长为α

k=β是给定的,所以要求出mk

Amrijo准则就是

(1)给定βε(0~1),αε(0,0.5),令m=0

(2)若不等式

f(xk+β^m*dk)<=f(xk)*β^m*gk'*dk

成立,则令mk=m,Xk+1=xk+β^m*dk.停止运算,输出mk得到步长

(3)若不满足上述不等式,则令m=m+1,然后回到第二步。

步4:确定步长后,令Xk+1=Xk+σk*dk,k=k+1,转步骤1.

matlab 具体代码如下:
 

 

2.代码

 

主程序:

%%   用最速下降法求最优化解
f1204 = inline('x(1)*(x(1)-5-x(2))+x(2)*(x(2)-4)','x');%目标函数
grad=inline('[2*x(1)-5-x(2),-x(1)+2*x(2)-4]','x'); %目标函数的梯度函数
x0 = [1 4];
TolX = 1e-4; 
TolFun = 1e-9;
MaxIter = 100;
dist0=1;
[xo,fo] = Opt_Steepest(f1204,grad,x0,TolX,TolFun,dist0,MaxIter)

 

子程序:

function [xo,fo] = Opt_Steepest(f,grad,x0,TolX,TolFun,dist0,MaxIter)
% 用最速下降法求最优化解
%输入:f为函数名 grad为梯度函数
%x0为解的初值 TolX,TolFun分别为变量和函数的误差阈值
%dist0为初始步长 MaxIter为最大迭代次数
%输出: xo为取最小值的点 fo为最小的函数值
% f0 = f(x(0))

%%%%%%判断输入的变量数,设定一些变量为默认值
if nargin < 7
    MaxIter = 100; %最大迭代次数默认为100
end
if nargin < 6
    dist0 = 10; %初始步长默认为10
end
if nargin < 5
    TolFun = 1e-8; %函数值误差为1e-8
end
if nargin < 4
    TolX = 1e-6; %自变量距离误差
end
%%%%%第一步,求解的初值的函数值
x = x0;
fx0 = feval(f,x0);
fx = fx0;
dist = dist0;
kmax1 = 25; %线性搜索法确定步长的最大搜索次数
warning = 0; 
%%%%%迭代计算求最优解

for k = 1: MaxIter
    g = feval(grad,x);
    g = g/norm(g); %求在x处的梯度方向
    %%线性搜索方法确定步长
    dist = dist*2; %令步长为原步长的二倍
    fx1 = feval(f,x-dist*2*g);
    for k1 = 1:kmax1
        fx2 = fx1;
        fx1 = feval(f,x-dist*g);
        if fx0 > fx1+TolFun & fx1 < fx2 - TolFun %fx0 > fx1 < fx2,
            den = 4*fx1 - 2*fx0 - 2*fx2;num = den - fx0 + fx2;  %二次逼近法
            dist = dist*num/den;
            x = x - dist*g; fx = feval(f,x); %确定下一点
            break;
        else
            dist = dist/2;
        end
    end
    if k1 >= kmax1
        warning = warning + 1; %无法确定最优步长
    else
        warning = 0;
    end
    if warning >= 2|(norm(x - x0) < TolX&abs(fx - fx0) < TolFun)
        break;
    end
    x0 = x;
    fx0 = fx;
end
xo = x; fo = fx;
if k == MaxIter
    fprintf('Just best in %d iterations',MaxIter);
end

 

 

3.运行结果

 

25.4 matlab里面的10中优化方法介绍——最速下降法(matlab程序),matlab,开发语言,数据分析,人工智能,算法

 

 

到了这里,关于25.4 matlab里面的10中优化方法介绍——最速下降法(matlab程序)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 25.9 matlab里面的10中优化方法介绍—— 惩罚函数法求约束最优化问题(matlab程序)

    1. 简述          一、算法原理 1、问题引入 之前我们了解过的算法大部分都是无约束优化问题,其算法有:黄金分割法,牛顿法,拟牛顿法,共轭梯度法,单纯性法等。但在实际工程问题中,大多数优化问题都属于有约束优化问题。惩罚函数法就可以将约束优化问题转化为

    2024年02月15日
    浏览(37)
  • 25.8 matlab里面的10中优化方法介绍—— 拉各朗日乘子法求最优化解(matlab程序)

    1. 简述        拉格朗日乘子法(Lagrange multipliers)是一种寻找多元函数 在一组约束下 的 极值 的方法。 通过引入拉格朗日乘子,可将有 变量与 约束条件的最优化问题转化为具有变量的无约束优化问题求解 举个例子: 求 最小值,约束条件,可以用下图表示。 这是一个等

    2024年02月14日
    浏览(45)
  • 无约束优化——最速下降算法及Matlab实现

      最近太忙了,更新的有点慢了。本篇就更新一个通常用的较多的算法——最速下降法,其实数值分析中会讲到这个方法。此篇先回顾梯度概念,再讲述最速下降法,最后通过例子理解算法以及实现代码编写。 希望大家看完这篇文章之后能有所收获!!!! 下一篇文章:

    2024年02月02日
    浏览(47)
  • 【最优化算法】基于【MATLAB】的最速下降仿真

    无约束问题的求解过程一般都是通过一系列的一维搜索来实现,搜索方向的不同,形成了不同的最优化方法。这篇文章从最速下降法入手,来进行搜索。 最速下降法又叫梯度法,通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。如果我们需要求解损

    2024年02月05日
    浏览(44)
  • 机器人中的数值优化(六)—— 线搜索最速下降法

       本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会

    2024年02月10日
    浏览(51)
  • 共轭梯度法、 最速下降法求解大规模稀疏方程组【Matlab】

    针对此题,可分别用共轭梯度法、 最速下降法求解线性方程组。 程序如下: 附录1   共辄梯度法求解大规模稀疏方程组程序 附录2   三对角矩阵A、右端项b生成程序 附录3   最速下降法求解线性方程组程序 此处仅展示了代码实现,具体算法原理可参考《数值分析》等有关

    2024年02月08日
    浏览(37)
  • 最速下降法—python实现

    最速下降法就是从一个初始点开始,逐步沿着以当前点为基准,函数值变化最快的方向走,一直走到最优解为止。那么接下来就要考虑两个问题:(1)沿着什么方向走;(2)应该走多远; 我们知道,沿着函数中某点方向导数最大的方向走下降是最快的,那么我们就得去找平

    2024年02月02日
    浏览(35)
  • (25)(25.4) PX4FLOW光学流量相机板

    文章目录 前言 25.4.1 概述 25.4.2 在哪里购买 25.4.3 安装驱动程序(仅限 Windows) 25.4.4 使用MissionPlanner 25.4.5 使用QGroundControl 25.4.6 与Pixhawk连接 25.4.7 安装到机架上 25.4.8 启用传感器 25.4.9 测试和设置 本文介绍如何设置可用于非 GPS 导航( Non-GPS navigation )的 PX4FLOW (光学流量)传感器

    2024年02月08日
    浏览(36)
  • 优化算法之梯度下降|Matlab实现梯度下降算法

    题目要求: 使用Matab实现梯度下降法 对于函数: min ⁡ f ( x ) = 2 x 1 2 + 4 x 2 2 − 6 x 1 − 2 x 1 x 2 min f(x)=2 x_{1}^{2}+4 x_{2}^{2}-6 x_{1}-2 x_{1} x_{2} min f ( x ) = 2 x 1 2 ​ + 4 x 2 2 ​ − 6 x 1 ​ − 2 x 1 ​ x 2 ​ 试采用 MATLAB实现最速下降法求解该问题, 给出具体的迭代过程、 最终优化结果、

    2024年02月16日
    浏览(50)
  • 使用MATLAB将Excel里面的数据导入,并且将MATLAB数据导入到Excel里面的命令介绍

    Matlab中求解线性方程组——高斯消元法、LU分解法、QR分解法、SVD分解法、迭代法等 MATLAB迭代的三种方式以及相关案例举例 MATLAB矩阵的分解函数与案例举例 MATLAB当中线性方程组、不定方程组、奇异方程组、超定方程组的介绍 MATLAB语句实现方阵性质的验证 MATLAB绘图函数的相关

    2024年02月13日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包