精华内容
下载资源
问答
  • MATLAB实现最速下降

    2018-04-17 21:08:23
    MATLAB实现最速下降MATLAB实现最速下降MATLAB实现最速下降MATLAB实现最速下降
  • 最速下降MATLAB程序

    2018-08-09 22:09:01
    机械工程专业,针对优化设计课程的最速下降法求某一函数的最小值
  • matlab最速下降法函数

    2014-08-09 10:45:11
    基于matlab编写的最速下降法函数文件,简单好用
  • 内含最速下降法与共个梯度法的对比以及迭代收敛性分析文档 还有实验所用的源程序,其中最速下降法程序和共个梯度法程序都有源程序。
  • MATLAB最速下降法求解函数极小值

    千次阅读 2021-04-11 16:48:19
    MATLAB最速下降法求解函数极小值1.题目2.matlab代码2.1主函数2.2调用函数2.3运行结果3.分析 写在前面:最速下降法求解函数极小值的理论部分已经写在上一篇文章中,这篇文章直接进行具体问题的求解并附上matlab代码。...


    写在前面:最速下降法求解函数极小值的理论部分已经写在上一篇文章中,这篇文章直接进行具体问题的求解并附上matlab代码。

    1.题目

    在这里插入图片描述
    设初始点为[x1 x2]=[-2.5 4.5] ,ε≤0.01,求目标函数的极小值。

    2.matlab代码

    2.1主函数

    syms x1 x2 s; %声明符号变量
    
    f1 =  x1^4 - 2*x1^2*x2 - 2*x1*x2 + x1^2 + 2*x2^2 + 4.5*x1 - 4*x2 + 4;%设定目标函数
    
    k=steepest_descent(f1,x1,x2,s,[-2.5,4.25],10^(-2));  %设定起始点[x1 x2]=[-2.5,4.25]和精度10^(-2)
    
    result_string=sprintf('在 %d 次迭代后求出极小值\n',k);%在迭代多少次之后求出极小值
    disp(result_string);
    

    2.2调用函数

    function   k = steepest_descent(f,x1,x2,s,start_point,thereshold) 
        
        k = 0;%迭代次数赋值初始化
        
        grad_f = [diff(f,x1) diff(f,x2)]; %计算f的梯度
        
        delta = subs(grad_f,[x1,x2],[start_point(1),start_point(2)]);
        %计算起点的梯度
        
        step=1; %设置初始步长为1
        
        current_point = start_point;%起点值赋给当前点
        
        %最速下降法的主循环,判断条件为:梯度的模与所给精度值进行比较
        while norm(delta) > thereshold  
            
            k = k + 1;%迭代次数+1
            
            %一维探索 求最优步长(此时方向已知,步长s为变量)
            x_next = [current_point(1),current_point(2)] - s* delta/norm(delta);% 计算x(k+1)点,其中步长s为变量 
            f_val = subs(f,[x1,x2],[x_next(1),x_next(2)]);% 将x值带入目标函数中
            step = abs(double(solve(diff(f_val,s)))); % 对s求一阶导,并加绝对值符号,得到最优步长的绝对值
            step = step(1);%更新步长
            
            %计算x(k+1)点
            current_point = double([current_point(1),current_point(2)] - step * delta/norm(delta));
            
            %计算x(k+1)点的梯度值
            delta = subs(grad_f,[x1,x2],[current_point(1),current_point(2)]);
            
            %计算函数值
            f_value = double(subs(f,[x1,x2],[current_point(1),current_point(2)]));
            
            %输出迭代计算过程
            result_string=sprintf('k=%d, x1=%.6f, x2=%.6f, step=%.6f f(x1,x2)=%.6f',...
            k,current_point(1),current_point(2),step,f_value);
            disp(result_string);
            
        end
    end
    

    (使用代码时,只需要把主函数中目标函数 ;起始点; 精度,重新设置成你所需要的就可运行。)

    2.3运行结果

    在这里插入图片描述

    3.分析

    将收敛条件由ε≤0.01改为ε≤10^(-6),运行结果如下:
    在这里插入图片描述
    可以看出,利用最速下降法求函数极小值时,在最初几步迭代中函数值下降很快,但当函数值越接近理论极小值时,函数值下降的越慢,同时,越接近理论极小值时,步长也越小,因此最速下降法的收敛速度并不快,这是因为函数在x(k)点处的负梯度方向为其最速下降方向仅仅是针对该点处而言,,一旦离开该点,原先方向就不是最速下降方向了。

    最速下降方向只是针对当前的计算点而言,并非是全局的最速下降方向

    最速下降法优点:对初始点选择要求低,远离极值点时收敛速度快
         缺点:越逼近理论极小值,收敛速度越慢

    展开全文
  • 替换代码中的函数和初始值。 您可以根据所需的解决方案更改迭代次数。
  • 最速下降迭代法又叫梯度下降迭代法,是从一已知点出发,依照某种规则,求出相继点,取代原先的点,然后重复以上过程,得到点序列,以使其趋于优解的迭代方法
  • MATLAB最速下降

    2015-03-16 01:27:07
    MATLAB最速下降法,简单,快速,易读
  • matlab最速下降

    2011-11-20 14:19:16
    一个用matlab编写的最速下降法,包括进退法,黄金分割法等一维搜索算法
  • 包含最速下降法的MATLAB,并与其他方法进行比较。
  • 最速梯度下降法,有详细的注释matlab程序 最速梯度下降法,有详细的注释matlab程序 最速梯度下降法,有详细的注释matlab程序 最速梯度下降法,有详细的注释matlab程序
  • 最速下降matlab

    2012-11-26 13:24:40
    matlab编写的最速下降法,十分详细 function x=fsxsteep(f,e,a,b) % fsxsteep函数 最速下降法 % x=fsxsteep(f,e,a,b)为输入函数 f为函数 e为允许误差 (a,b)为初始点;
  • 最速下降MATLAB

    2011-12-27 20:18:18
    梯度法中最速下降法采用Matlab编写的
  • matlab实现最速下降

    2021-10-13 21:20:04
    最速下降法 定义:沿负梯度方向进行搜索的算法(负梯度方向为最速下降方向) 优化问题: 算法流程 1.取 x0,令k=0 ; 2.求 xk 处 f(x) 的一个下降方向 dk ; 3.一维搜索: , 4. 否则,转步骤2; 这里 。 ...

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

    算法步骤:

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

    步1:计算目标函数的梯度^{_{gk=\triangledown f(_{xk}))}}.若 ||gk||<=e,即达到误差要求,立即停止计算,并输出xk作为近似最优解。

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

    步3:利用线搜索技术确定步长\sigmak(这里采用Armijo准则来求步长) 

    步长为\alphak=\beta^mk       \beta是给定的,所以要求出mk

    Amrijo准则就是

    (1)给定\beta \varepsilon(0~1),\alpha \varepsilon(0,0.5),令m=0

    (2)若不等式

    f(xk+\beta^m*dk)<=f(xk)+\sigma*\beta^m*gk'*dk

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

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

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

    matlab 具体代码如下:

    1.主函数

    clear all
    clc
    %利用grad函数求解 minif(x)=100*(x1^2-x2)^2+(x1-1)^2
    %此时还要建立两个函数,一个目标函数fun,一个梯度gfun
    x0=[-1.2 1]';
    [x,val,k]=grad('fun','gfun',x0);
    disp(['最优解:x = '])
    disp(x)
    disp(['此时: f(x) = ',num2str(val)]) 
    

     2.最速下降法

    function [x,val,k] = grad(fun,gfun,x0)
    %功能:用最速下降法求解无约束问题 minif(x)
    %输入:fun,gfun分别是目标函数和梯度,x0是初始点
    %输出:x,val分别是近似最优值和最优值,k是迭代次数
    maxk=5000; %最大迭代次数
    rho=0.5;
    sigma=0.4;
    k=0;
    e=1e-5; %精度
    while(k<maxk)
        g=feval(gfun,x0); %计算梯度
        d=-g;
        if(norm(d)<e),break;end
        %用Amrijo搜索技术确定步长
        m=0;mk=0;
        while(m<20) %最大迭代次数
           if(feval(fun,x0+rho^m*d)<feval(fun,x0)+sigma*rho^m*g'*d)
               mk=m;
               break;
           else 
               m=m+1;
           end
        end
        x0=x0+d*rho^mk;
        k=k+1;
    end
    x=x0;
    val=feval(fun,x0);
    end

     3.目标函数

    function f= fun(x)
    %目标函数
    f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;
    end

    4.目标函数的梯度

    function  g=gfun(x)
    %目标函数的梯度
    g=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1),-200*(x(1)^2-x(2))]';
    end

    5.运行结果

     

     

    展开全文
  • 我在看篇文章中作者的程序时,发现这段下面这段代码中需要自己手动输入梯度,我试着用matlab自带的求梯度函数改了一下,总数出现错误信息:输出项过多。想请教一下不可以让程序自己求梯度吗? 目标函数:...
  • 最速下降法是以负梯度方向最为下降方向的极小化算法,相邻两次的搜索方向是互相直交的。牛顿法是利用目标函数在迭代点处的Taylor展开式作为模型函数,并利用这个二次模型函数的极小点序列去逼近目标函数的极小点。...
  • 参考资料:参见 K Vasudevan 所著的“数字通信和信号处理”一书中的第 5.1.2 和 5.1.3 节
  • Matlab实现 最速下降法&&共轭梯度法

    万次阅读 2019-07-09 19:22:57
    盲人下山法: 在山顶上,小盲人拿着小拐棍,...最速下降法 function [er,k]=FastDown(A) %定义最速下降法函数文件 %er:表示停机时实际绝对误差 %k:表示停机时实际迭代次数 tol=1e-6; [n,m]=size(A); if n~=m %判断输...

    盲人下山法:
    在山顶上,小盲人拿着小拐棍,先确定方向,再确定步长,寻找下山的最优办法(即最短路径)。

    在这里插入图片描述
    上图伪码来自某 《数值线性代数》 教科书,非原创
    下述代码是原创

    最速下降法
    function [er,k]=FastDown(A)
    %定义最速下降法函数文件
    %er:表示停机时实际绝对误差
    %k:表示停机时实际迭代次数
    tol=1e-6;
    [n,m]=size(A);
    if n~=m %判断输入的合法性
        error('Wrong Input!');
    end
    b=ones(n,1);
    x=zeros(n,1);%初始化列向量
    r=b-A*x;k=0;
     while norm(r,2)>tol
         k=k+1;
         a=(r'*r)/(r'*A*r);
         x=x+a*r;%下降方向取残量方向
         r=b-A*x;
     end
    er=norm(b-A*x,2);
    
    
    共轭梯度法
    function [er,k]=ConGra(A)
    %共轭梯度法求解正定线性方程组
    %er:表示停机时实际的绝对误差
    %k:表示停机时实际的迭代次数
    tol=1e-6;%规定停机绝对误差限
    [n,m]=size(A);
    if n~=m %判断输入的合法性
        error('wrong input');
    end
    x=zeros(n,1); %初始化解向量
    b=ones(n,1);
    r=b-A*x;%当前残量
    k=0;%记录迭代次数
    while norm(r,2)>tol
        k=k+1;
        if k==1
            p=r;%第一步即最速下降法,取残量方向
        else
            q=(r'*r)/(rq'*rq);
            p=r+q*p;
        end
        a=(r'*r)/(p'*A*p);
        x=x+a*p;
        rq=r;
        r=r-a*A*p;
    end
    er=norm(A*x-b,2);
    
    

    比较&总结:
    从两种计算方法的结果来看,达到相近的绝对误差时,最速下降法需要的迭代次数明显高于共轭梯度法。这体现出相对于最速下降法选取局部最优下降方向,共轭梯度法中选取全局最优下降方向使得收敛速度更快。

    展开全文
  • clear,clc,close all syms x y t f = 4*x^2+y^2-x^2*y;%求解函数的极小值点 g = ... end plot(v1(1),v1(2),'ro'),disp(v1)%优解 disp(fval)%f在v1处的优值 该文章仅用于学习交流,若有侵权请联系本人删除!@!!

    clear,clc,close all
    syms x y t
    f = 4*x^2+y^2-x^2*y;%求解函数的极小值点
    g = [diff(f,x),diff(f,y)];%求梯度向量,对于可导函数有解析式更好,若没有则要差分处理
    x0 = 3;y0 = 4;%初值
    eps = 1e-6;%迭代误差限
    v = [x,y];%自变量
    %令函数g中变量v取[x0,y0],用来求[x0,y0]的梯度值
    g0 = subs(g,v,[x0,y0]);
    v1 = [x0,y0];temp0 = norm(g0)%初值处梯度范围
    n = 0
    ezcontour(f,[-3,7,-2,8]);
    hold on
    while temp0>eps && n<=1000
        d = -g0;%负梯度方向
        fval = subs(f,v,v1)%函数值;
        ft = subs(f,v,v1+t*d);
        dft = diff(ft);
        s = double(solve(dft));%求使得目标函数减少最大的步长
        plot([v1(1),v1(1)+s*d(1)],[v1(2),v1(2)+s*d(2)],'Color',rand(1,3));
        drawnow;
        pause(0.3);
        v1 = v1+s*d;%求下一个迭代点
        g0 = subs(g,v,v1);%更新梯度
        temp0 = norm(g0);%更新后的梯度范围,足够小时迭代终止
        n = n+1;
    end
    plot(v1(1),v1(2),'ro'),disp(v1)%最优解
    disp(fval)%f在v1处的最优值

    该文章仅用于学习交流,若有侵权请联系本人删除!@!!

    展开全文
  • 老师的成品 matlab编的 有输入和输出 自己看着应该有用
  • 要写一个最速下降法的函数(服从Ax=b) 使用割线算法求解最佳步长。 对于停止准则,使用条件“P∇f(x)”≤10-6 ![图片说明](https://img-ask.csdn.net/upload/201911/07/1573074850_745269.png) ![图片...
  • MATLAB最速下降方法

    万次阅读 多人点赞 2019-07-23 11:04:59
    最速下降法 定义:沿负梯度方向进行搜索的算法(负梯度方向为最速下降方向) 优化问题: 算法流程 1.取 x0,令k=0 ; 2.求 xk 处 f(x) 的一个下降方向 dk; 3.一维搜索: , 4. 否则,转步骤2; 这里 。 ...
  • %最速下降法 clear all clc syms x1 x2 a b Theta_error=0.001; x0=[3;2]; X = [x1;x2]; f = x1^2+25*x2^2; df = gradient(f,X); dfx = subs(df,X,x0); %求函数在x0时的梯度 Fx0 = subs(f,X,x0); X1 = x0-a.*...
  • 最小化——最速下降matlab实现

    千次阅读 多人点赞 2020-12-08 21:32:42
    最小化——最速下降matlab实现 1、matlab代码 function [min_x,min_f,k]=down(f,x0,var,eps) %%%输入目标函数f,初始点x0,以及自变量var和精度eps %%%利用Newton迭代法计算无约束目标函数极小值; %%%输出最小值点...
  • 文章目录牛顿法matlab实现参考 牛顿法 牛顿法主要应用在两个方面, 1, 求方程的根; 2, 优化。 牛顿法是收敛速度快的方法,其缺点在于要求Hessian矩阵(二阶导数矩阵)。牛顿法与梯度法很相似,先说一下梯度法:1...
  • MATLAB实现最速下降法(使用梯度作为下降方向的无限制优化方法)。使用Armijo准则找步长。 using MATLAB to do steepest descent algorithm(unconstrained optimization method that uses gratitude vector as ...
  • 最速下降法 (wolfe)

    2015-11-07 21:14:59
    Wolfe 条件下的最速下降法的matlab程序
  • 有问题请到https://www.zhihu.com/people/cao-yu-zhu-35下面寻找对应文章交流
  • 优化算法与matlab应用3:最速下降最速下降法上一种沿着N维目标函数的负梯度方向搜索最小值的方法。 (1)算法原理 函数的负梯度表示如下: 搜索步长可调整ak,通常记为 (第k次迭代的步长)。该算法利用一维的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,816
精华内容 726
关键字:

matlab最速下降

matlab 订阅