MATLAB:梯度下降法求解一元和多元函数极小值和极大值

这篇具有很好参考价值的文章主要介绍了MATLAB:梯度下降法求解一元和多元函数极小值和极大值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

梯度下降法,顾名思义即通过梯度下降的方法。对于一个函数而言,梯度是一个向量,方向是表示函数值增长最快的方向,而大小则表示该方向的导数。下面展示了用梯度下降法求解一元函数的MATLAB代码:

syms x;

y = @(x)((x-1).^2); % 定义一元函数

dy = diff(y,x); % 一元函数导数

x = 7; % 梯度初始值

l = 0.1; % 梯度下降步长

err = inf; % 定义初始误差

Total_x = []; % 存储每次梯度下降的x值

Total_y = []; % 存储每次梯度下降的y值

i = 0;

while i <= 100

i = i + 1;

y1 = y(x); % 获取当前的函数值

x = x - l * double(subs(dy,x)); % 更新x

y2 = double(subs(y,x)); % 获取进行一次梯度下降后的函数值;

err = abs(y1-y2); % 求误差

Total_x = [Total_x;x]; % 收集梯度变化的x值

Total_y = [Total_y;y2]; % 收集梯度变化的y值

if err <= 10^-10 % 当函数值变化小于阈值时,跳出循环

break;

end

end

disp(Total_x); % 输出Total_x

%% 可视化过程

x = -5:0.1:7; % 设定x范围

figure;

plot(x,y(x)); % 绘制函数曲线图像

hold on; % 在函数曲线图像上,继续绘制图像

scatter(Total_x,Total_y); % 绘制散点图

title("y = (x-1)^2"); % 取标题

仿真结果如下:

MATLAB:梯度下降法求解一元和多元函数极小值和极大值

下面展示了用梯度下降法求解二元函数MATLAB:梯度下降法求解一元和多元函数极小值和极大值的MATLAB代码:

syms x y;

z = @(x,y)((x-1)^2+(y-1)^2); % 定义二元函数

dzx = diff(z,x); % 一元函数导数

dzy = diff(z,y);

x = 3; % x梯度初始值

y = 3; % y梯度初始值

subs(z,x,y)

l = 0.1; % 梯度下降步长

err = inf; % 定义初始误差

Total_x = []; % 存储每次梯度下降的x值

Total_y = []; % 存储每次梯度下降的y值

Total_f = []; % 存储每次梯度下降的z值

i = 0;

while i <= 100

i = i + 1;

c_f = z(x,y); % 获取进行梯度变化前的y值

x = x - l * double(subs(dzx,x)); % 更新x

y = y - l * double(subs(dzy,y));

n_f = z(x,y); % 获取进行梯度变化后的y值

err = abs(c_f-n_f); % 求误差

Total_x = [Total_x;x];

Total_y = [Total_y;y];

Total_f = [Total_f;n_f ];

if err <= 10^-10 % 当误差小于等于指定阈值时,跳出循环

break;

end

end

disp("Total_y");

x = -2:0.1:2; % 设定x范围

y = -2:0.1:2; % 设定y范围

[xx,yy]=meshgrid(x,y);

figure;

zz = (xx-1).^2+(yy-1).^2;

surf(xx,yy,zz); % 绘制函数曲线图像

hold on; % 在函数曲线图像上,继续绘制图像

scatter3(Total_x,Total_y,Total_f); % 绘制散点图

title("y = (x-1)^2+(y-1)^2"); % 取标题

 仿真结果如下:

MATLAB:梯度下降法求解一元和多元函数极小值和极大值

当然,梯度下降方法也可以求解最大值,例如:采用梯度下降法求解最大值的MATLAB代码如下:

syms x y;

z = @(x,y)(-(x-1)^2-(y-1)^2); % 定义二元函数

dzx = diff(z,x); % 一元函数导数

dzy = diff(z,y);

x = -3; % x梯度初始值

y = -3; % y梯度初始值

subs(z,x,y)

l = 0.1; % 梯度下降步长

err = inf; % 定义初始误差

Total_x = []; % 存储每次梯度下降的x值

Total_y = []; % 存储每次梯度下降的y值

Total_f = []; % 存储每次梯度下降的z值

i = 0;

while i <= 100

i = i + 1;

c_f = z(x,y); % 获取进行梯度变化前的y值

x = x + l * double(subs(dzx,x)); % 更新x

y = y + l * double(subs(dzy,y));

n_f = z(x,y); % 获取进行梯度变化后的y值

err = abs(c_f-n_f); % 求误差

Total_x = [Total_x;x];

Total_y = [Total_y;y];

Total_f = [Total_f;n_f ];

if err <= 10^-10 % 当误差小于等于指定阈值时,跳出循环

break;

end

end

disp("Total_y");

x = -2:0.1:2; % 设定x范围

y = -2:0.1:2; % 设定y范围

[xx,yy]=meshgrid(x,y);

figure;

zz = -(xx-1).^2-(yy-1).^2;

surf(xx,yy,zz); % 绘制函数曲线图像

hold on; % 在函数曲线图像上,继续绘制图像

scatter3(Total_x,Total_y,Total_f); % 绘制散点图

title("y = -(x-1)^2-(y-1)^2"); % 取标题

 仿真结果如下:

MATLAB:梯度下降法求解一元和多元函数极小值和极大值文章来源地址https://www.toymoban.com/news/detail-445687.html

到了这里,关于MATLAB:梯度下降法求解一元和多元函数极小值和极大值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • matlab进阶:求解在约束条件下的多元目标函数最值(fmincon函数详解)

    欢迎来到馒头侠的博客,该类目主要讲数学建模的知识,大家一起学习,联系最后的横幅! 喜欢的朋友可以关注下,私信下次更新不迷路! 资源链接:点击这里获取众多源码、数模资料、思路精讲、论文模板latex和word、学习书籍等 Matlab 的 fmincon 函数: 寻找约束非线性多变

    2024年02月11日
    浏览(42)
  • 【算法系列】非线性最小二乘求解-梯度下降法

    ·【算法系列】卡尔曼滤波算法 ·【算法系列】非线性最小二乘求解-直接求解法 ·【算法系列】非线性最小二乘求解-梯度下降法 ·【算法系列】非线性最小二乘-高斯牛顿法  ·【算法系列】非线性最小二乘-列文伯格马夸尔和狗腿算法  文章目录 系列文章 文章目录 前言 一、

    2024年02月16日
    浏览(40)
  • 优化算法之梯度下降|Matlab实现梯度下降算法

    题目要求: 使用Matab实现梯度下降法 对于函数: min ⁡ f ( x ) = 2 x 1 2 + 4 x 2 2 − 6 x 1 − 2 x 1 x 2 min f(x)=2 x_{1}^{2}+4 x_{2}^{2}-6 x_{1}-2 x_{1} x_{2} min f ( x ) = 2 x 1 2 ​ + 4 x 2 2 ​ − 6 x 1 ​ − 2 x 1 ​ x 2 ​ 试采用 MATLAB实现最速下降法求解该问题, 给出具体的迭代过程、 最终优化结果、

    2024年02月16日
    浏览(49)
  • 如何用梯度下降法求解数学建模的拟合问题——以logistics增长问题为例

    众所周知的是,在大学课程中一般只会教授一种拟合方法(也即参数估计方法)——最小二乘法。这是一种直接求解的方法,非常的有效,不仅是损失最小解,而且是最大似然解。只不过,有一个缺点,它只能解决线性方程参数问题,对于非线性曲线,就无能为力了。大部分情

    2024年02月11日
    浏览(37)
  • 举例说明基于线性回归的单层神经网络网络(以梯度下降算法来求解权重的过程)...

    我们将通过一个简单的例子来说明基于线性回归的单层神经网络,以及如何使用梯度下降算法来求解权重。 假设我们有以下数据集,表示学生的学习时间(小时)与他们的考试分数: 学习时间(X):1, 2, 3, 4, 5 考试分数(Y):2, 4, 6, 8, 10 这是一个线性关系,我们可以使用线

    2024年02月16日
    浏览(82)
  • python遗传算法(应用篇1)--求解一元函数极值

    下面我们使用遗传算法尝试求解一元函数的最值 y = s i n ( x 2 − 1 ) + 2 c o s ( 2 x ) , x ∈ [ 0 , 10 ] y=sin(x^2-1)+2cos(2x),xin [0,10] y = s in ( x 2 − 1 ) + 2 cos ( 2 x ) , x ∈ [ 0 , 10 ] 生成二进制数组,形状为(种群个体数,个体基因个数),即(m_population, L) 运行结果 将生成的二进制数组

    2024年02月06日
    浏览(47)
  • 【Matlab算法】梯度下降法(Gradient Descent)(附MATLAB完整代码)

    梯度下降法 是一种用于最小化函数的迭代优化算法。其基本思想是通过计算函数的梯度 (导数),找到函数的最小值点。在梯度下降法中,参数(或变量)沿着负梯度的方向进行更新,以降低函数值。 以下是梯度下降法的基本描述: 选择初始点: 选择一个初始点作为优化的起

    2024年01月19日
    浏览(44)
  • 【机器学习】P2 线性回归、损失函数与梯度下降

    线性回归简单的说就是线性函数; 线性回归属于机器学习 回归问题; 在线性回归建立的线性关系的模型中,假设目标变量和自变量之间存在一种线性关系,模型的目标是找到最佳的拟合线,是的模型对于未知的数据能够进行最准确的预测; 线性回归模型的一般形式为: y

    2023年04月08日
    浏览(40)
  • 机器学习笔记值优化算法(十四)梯度下降法在凸函数上的收敛性

    本节将介绍 梯度下降法 在 凸函数 上的收敛性。 收敛速度:次线性收敛 关于 次线性收敛 ,分为两种 判别 类型: R mathcal R R -次线性收敛与 Q mathcal Q Q -次线性收敛。而次线性收敛的 特点 是: 随着迭代次数的增加,相邻迭代步骤产生的目标函数结果 f ( x k ) , f ( x k + 1 ) f

    2024年02月13日
    浏览(49)
  • 机器学习笔记之优化算法(十七)梯度下降法在强凸函数的收敛性分析

    上一节介绍并证明了: 梯度下降法 在 强凸函数 上的收敛速度满足 Q mathcal Q Q -线性收敛 。 本节将介绍:在 更强 的条件下:函数 f ( ⋅ ) f(cdot) f ( ⋅ ) 在其定义域内 二阶可微 , 梯度下降法 在 f ( ⋅ ) f(cdot) f ( ⋅ ) 上的收敛速度存在什么样的结论。 关于 梯度下降法 在

    2024年02月12日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包