Loading

MATLAB实验二:最速下降法程序设计

一、实验目的

通过最速下降法的程序设计,为今后的约束优化方法的学习和编程奠定基础;掌握负梯度方向的定义和最速下降法的迭代公式;通过此次实验,进一步巩固最速下降法的基本原理和思想。

二、实验内容

(1)求解无约束优化问题:

(2)完成最速下降法(负梯度法)的MATLAB编程、调试;

(3)要求选取多个不同的初始点,并给出迭代次数,最优函数值等相关信息,有能力的同学尝试画出最优值随迭代次数变化的曲线图.

function [x,val,k]=grad(fun,gfun,x0)
%功能:用最速下降法求解无约束问题:min f(x)
%输入: x0是初始点,fun,gfun分别是目标函数和梯度
%输出: x,va1分别是近似最优点和最优值,k是迭代次数.
maxk=5000; %最大迭代次数
rho=0.5;sigma=0.4;
k=0; epsilon=1e-5;
while(k<maxk)
    g=feval(gfun,x0);%计算梯度
    d=-g; %计算搜索方向
    if(norm(d)<epsilon), break; end
    m=0;mk=0;
    while(m<20) %Armijo搜索  if(feval(fun,x0+rho^m*d)<feval(fun,x0)+sigma*rho^m*g'*d)
          mk=m; break;
       end
         m=m+1;
    end
    x0=x0+rho^mk*d;
    k=k+1;
end
x=x0;
val=feval(fun,x0);
function f=fun(x)
f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;
function g=gfun(x)
g=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1),-200*(x(1)^2-x(2))]';

x0=[-1.2 1]';
[x,val,k]=grad('fun','gfun',x0)

结果

>> Untitled5

x =

    1.0000

    1.0000

val =

   1.1985e-10

k =

        1435

 

posted @ 2023-05-27 15:01  冰稀饭Aurora  阅读(603)  评论(0编辑  收藏  举报