梯度最快下降matlab,MATLAB最速下降法(梯度法)程序

查看文章

matlab最速下降法

2010-08-18 17:13

function x=fsxsteep(f,e,a,b)

% fsxsteep函数最速下降法

% x=fsxsteep(f,e,a,b)为输入函数 f为函数 e为允许误差 (a,b)为初始点; % fsx TJPU 2008.6.15

x1=a;x2=b;

Q=fsxhesse(f,x1,x2);

x0=[x1 x2]';

fx1=diff(f,'x1'); %对x1求偏导数

fx2=diff(f,'x2'); %对x2求偏导数

g=[fx1 fx2]'; %梯度

g1=subs(g); %把符号变量转为数值

d=-g1;

while (abs(norm(g1))>=e)

t=(-d)'*d/((-d)'*Q*d);t=(-d)'*d/((-d)'*Q*d); %求搜索方向

x0=x0-t*g1; %搜索到的点

v=x0;

a=[1 0]*x0;

b=[0 1]*x0;

x1=a;

x2=b;

g1=subs(g);

d=-g1;

end;

x=v;

function x=fsxhesse(f,a,b)

% fsxhesse函数求函数的hesse矩阵;

% 本程序仅是简单的求二次函数的hesse矩阵!;

% x=fsxhesse(f)为输入函数 f为二次函数 x1,x2为自变量;

% fsx TJPU 2008.6.15

x1=a;x2=b;

fx=diff(f,'x1'); %求f对x1偏导数

fy=diff(f,'x2'); %求f对x2偏导数

fxx=diff(fx,'x1'); %求二阶偏导数对x1再对x1

fxy=diff(fx,'x2'); %求二阶偏导数对x1再对x2

fyx=diff(fy,'x1'); %求二阶偏导数对x2再对x1

fyy=diff(fy,'x2'); %求二阶偏导数对x2再对x2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值