梯度下降实现matlab,梯度下降代码实现(matlab,c++)

本文介绍了如何使用MATLAB和C++实现梯度下降算法。在MATLAB部分,通过fs2steep函数展示了最速下降法,包括求解梯度和Hesse矩阵的过程。而在C++部分,给出了一个简单的梯度下降迭代实现,计算函数最小值。通过设置迭代精度和步长,最终得到最小值和对应x坐标。
摘要由CSDN通过智能技术生成

matlab:

function y=fs2steep(f,e,a,b) %返回的是点坐标的2个分量

% fs2steep函数 最速下降法

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

% fsx TJPU 2008.6.15

x1=a;x2=b;

Q=fs2hesse(f,x1,x2);

x0=[x1 x2]';

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

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

g=[fx1 fx2]'; %梯度

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

d=-g1;%d为搜索方向

while (abs(norm(g1))>=e) %norm(g1)为g1的2范数,即sqrt(x1^2+x2^2),因为梯度其各分量=0,所以其梯度幅值=0

t=(-d)'*d/((-d)'*Q*d);%求搜索步长,方法是?

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

v=x0;

a=[1 0]*x0;

b=[0 1]*x0;

x1=a;

x2=b;

Q=fs2hesse(f,x1,x2);

x0=[x1 x2]';

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

fx2=diff(f,'x2');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值