matlab中梯度下降法函数,在matlab中实现梯度下降法

梯度下降法的原理,本文不再描述,请参阅其它资料。

梯度下降法函数function [k ender]=steepest(f,x,e),需要三个参数f、x和e,其中f为目标函数,x为初始点,e为终止误差。输出也为两个参数,k表示迭代的次数,ender表示找到的最低点。

steepest.m:

function [k ender]=steepest(f,x,e)

%梯度下降法,f为目标函数(两变量x1和x2),x为初始点,如[3;4]

syms x1 x2 m; %m为学习率

d=-[diff(f,x1);diff(f,x2)]; %分别求x1和x2的偏导数,即下降的方向

flag=1; %循环标志

k=0; %迭代次数

while(flag)

d_temp=subs(d,x1,x(1)); %将起始点代入,求得当次下降x1梯度值

d_temp=subs(d_temp,x2,x(2)); %将起始点代入,求得当次下降x2梯度值

nor=norm(d_temp); %范数

if(nor>=e)

x_temp=x+m*d_temp; %改变初始点x的值

f_temp=subs(f,x1,x_temp(1)); %将改变后的x1和x2代入目标函数

f_temp=subs(f_temp,x2,x_temp(2));

h=diff(f_temp,m); %对m求导,找出最佳学习率

m_temp=solve(h); %求方程,得到当次m

x=x+m_temp*d_temp; %更新起始点x

k=k+1;

else

flag=0;

end

end

ender=double(x); %终点

end

调用示例1:

syms x1 x2;

f=(x1-2)^2+2*(x2-1)^2;

x=[1;3];

e=10^(-20);

[k ender]=steepest(f,x,e)

结果:

k =

27

ender =

2

1

调用示例2:

syms x1 x2;

f=x1-x2+2*x1^2+2*x1*x2+x2^2;

x=[0;0];

e=10^(-20);

[k ender]=steepest(f,x,e)

结果:

k =

58

ender =

-1.0000

1.5000

调用示例3:

syms x1 x2;

f=3/2*x1^2+1/2*x2^2-x1*x2-2*x1;

x=[0;0];

e=10^(-2);

[k ender]=steepest(f,x,e)

结果:

k =

9

ender =

0.9959

0.9877

原文:http://www.cnblogs.com/denny402/p/4025472.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值