首页 > 代码库 > 在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; endendender=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 = 27ender = 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 = 58ender = -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 = 9ender = 0.9959 0.9877
在matlab中实现梯度下降法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。