在matlab中实现梯度下降法
MATLAB 实现 梯度 下降
2023-09-11 14:17:16 时间
梯度下降法的原理,本文不再描述,请参阅其它资料。
梯度下降法函数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
相关文章
- Matlab分类器大全
- matlab 点云粗配准(2)—— 根据FPFH特征查找匹配点对(Fast Global Registration算法的部分实现)
- matlab 点云粗配准(1)—— 计算FPFH并可视化
- 【STM32F429的DSP教程】第28章 FFT和IFFT的Matlab实现(幅频响应和相频响应)
- 基于粒子群优化算法的分布式电源选址与定容【多目标优化】【IEEE33节点】(Matlab代码实现)
- 独立储能的现货电能量与调频辅助服务市场出清协调机制(Matlab代码实现)
- 风光场景削减及源荷不确定性的虚拟电厂随机优化调度研究(Matlab代码实现)
- 改进粒子群算法的配电网故障定位(Python&Matlab代码实现)
- 【路径优化】基于帝企鹅算法求解TSP问题(Matlab代码实现)
- 结合邻域连接法的蚁群优化(NACO)求解TSP问题(Matlab代码实现)
- 基于改进遗传算法的卡车和两架无人机旅行推销员问题(D2TSP)(Matlab代码实现)
- 空间误差分析:统一的应用导向处理(Matlab代码实现)
- 【图像处理】双边滤波器论文代码复现及其改进(Matlab代码实现)
- 基于多尺度形态学梯度进行边缘检测(Matlab代码实现)
- 【MATLAB】绘制三角函数曲线、图像的叠加
- 【MATLAB】matlab实现最大熵法图像分割程序
- 【图像处理】基于MATLAB的形态学权重自适应图像去噪
- 基于SIFT特征提取的图像特征提取配准和拼接matlab仿真
- Matlab使用笔记(九):matlab实现交通流仿真/车感知/城市交通交叉路口
- 非线性非高斯模型的改进粒子滤波算法(Matlab代码实现)
- 时间重分配多同步挤压变换在旋转机械轴承故障诊断中的应用(Matlab代码实现)
- 基于评估去混响算法的房间脉冲响应研究(Matlab代码实现)
- 【语音编码】基于matlab ADPCM编解码(Matlab代码实现)
- Matlab Tips: 结构体递归式打印--Dump matlab struct content recursively