目录

题目

作答

本文使用MATLAB作答

1. 建立函数文件ceshi.m

function [x1,y1,f_now,z] = ceshi(z1,z2)
%%%%%%%%%%%%%% 梯度下降法求函数局部极大值@冀瑞静 %%%%%%%%%%%%%%%%%%
% 函数:f(x,y)=
% 目的:求局部极大值和对应的极大值点坐标
% 方法:梯度下降法
% 理论:
% 方向导数:偏导数反应的是函数沿坐标轴方向的变化率,但许多物理现象告诉我们,只考虑函数沿坐标轴方向的变化率是不够的,有必要研究函数沿任一指定方向的变化率。
% 函数f(x,y)在点P0(x0,y0)可微分,那么函数在改点沿任一方向l的方向导数存在,其值为:f'x(x0,y0)*cos(α)+f'y(x0,y0)*cos(β),其中,cos(α),cos(β)是方向l的方向余弦。
% 梯 度:是与方向导数有关联的另一个概念,梯度是一个向量,表示为:'x(x0,y0)*i+f'y(x0,y0)*j。
% 关 系:
% f'x(x0,y0)*cos(α)+f'y(x0,y0)*cos(β)
% =grad f(x0,y0)*el
% =|grad f(x0,y0)|*cos(θ),其中el=(cos(α),cos(β))是与方向l同方向的单位向量。
% 变化率:函数沿某个方向的变化率指的是函数值沿这个方向变化的快慢。
% θ=0,el与梯度同向,函数增加最快,函数在这个方向的方向导数达到最大值,这个最大值就是梯度的模;
% θ=π,el与梯度反向,函数减少最快,函数在这个方向的方向导数达到最小值;
% θ=π/2,el与梯度方向正交,函数变化率为零。 x0 = z1;
y0 = z2;
f_now = exp((sin(y0) - 1)^2)*cos(x0) + (x0 - y0)^2 + exp((cos(x0) - 1)^2)*sin(y0);%求解函数的极大值点,先求其函数负值的极小值点
z=0; %用于记录循环次数
f_error = 1; %f_error为迭代差值,作为判别标准
h = 1.0e-8; %步长 while f_error>1.0e-8 %判定标准:1.前后两次的差>1.0e-8(选用);2.迭代次数达到XX次;
if (x0<-5)||(x0>0)
break;
end
if ((y0<-5)||(y0>0))
break;
end
f_val = f_now;
x1 = x0 + h * (2*x0 - 2*y0 - exp((sin(y0) - 1)^2)*sin(x0) - 2*exp((cos(x0) - 1)^2)*sin(x0)*sin(y0)*(cos(x0) - 1));
y1 = y0 + h * (2*y0 - 2*x0 + exp((cos(x0) - 1)^2)*cos(y0) + 2*exp((sin(y0) - 1)^2)*cos(x0)*cos(y0)*(sin(y0) - 1));
f_now = exp((sin(y1) - 1)^2)*cos(x1) + (x1 - y1)^2 + exp((cos(x1) - 1)^2)*sin(y1) ;
f_error = f_now-f_val;
x0 = x1;
y0 = y1;
z = z+1;
end end

2. 这是调用的命令,也可以写在.m文件里

clear
clc
[x1,y1,f_out] = ceshi(-1,-2);
fprintf('%.3f\t',x1,y1,f_out); %f保留小数点后三位

3. 输出结果

0.000 -1.585 56.088

这是截图

题外话

第一次发博客,开始涉足计算机视觉领域,欢迎拍砖。

梯度下降法求解函数极大值-Matlab的更多相关文章

  1. 机器学习---用python实现最小二乘线性回归算法并用随机梯度下降法求解 (Machine Learning Least Squares Linear Regression Application SGD)

    在<机器学习---线性回归(Machine Learning Linear Regression)>一文中,我们主要介绍了最小二乘线性回归算法以及简单地介绍了梯度下降法.现在,让我们来实践 ...

  2. OpenACC 梯度下降法求解线性方程的优化

    ▶ 书上第二章,用一系列步骤优化梯度下降法解线性方程组.才发现 PGI community 编译器不支持 Windows 下的 C++ 编译(有 pgCC 命令但是不支持 .cpp 文件,要专业版才支 ...

  3. 使用matlab用优化后的梯度下降法求解达最小值时参数

    matlab可以用 -Conjugate gradient -BFGS -L-BFGS 等优化后的梯度方法来求解优化问题.当feature过多时,最小二乘计算复杂度过高(O(n**3)),此时 这一些 ...

  4. tensorflow实现svm多分类 iris 3分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)

    # Multi-class (Nonlinear) SVM Example # # This function wll illustrate how to # implement the gaussi ...

  5. tensorflow实现svm iris二分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)

    iris二分类 # Linear Support Vector Machine: Soft Margin # ---------------------------------- # # This f ...

  6. 理解梯度下降法(Gradient Decent)

    1. 什么是梯度下降法?   梯度下降法(Gradient Decent)是一种常用的最优化方法,是求解无约束问题最古老也是最常用的方法之一.也被称之为最速下降法.梯度下降法在机器学习中十分常见,多用 ...

  7. 梯度下降法原理与python实现

    梯度下降法(Gradient descent)是一个一阶最优化算法,通常也称为最速下降法. 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离 ...

  8. 梯度下降法(BGD、SGD)、牛顿法、拟牛顿法(DFP、BFGS)、共轭梯度法

    一.梯度下降法 梯度:如果函数是一维的变量,则梯度就是导数的方向:      如果是大于一维的,梯度就是在这个点的法向量,并指向数值更高的等值线,这就是为什么求最小值的时候要用负梯度 梯度下降法(Gr ...

  9. [ch04-02] 用梯度下降法解决线性回归问题

    系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 4.2 梯度下降法 有了上一节的最小二乘法做基准,我们这 ...

随机推荐

  1. unset命令详解

    基础命令学习目录首页 功能说明:unset是一个内建的Unix shell命令,在Bourne shell家族(sh.ksh.bash等)和C shell家族(csh.tcsh等)都有实现.它可以取消 ...

  2. Final发布 -----欢迎来怼团队

    欢迎来怼项目小组—Final发布展示 一.小组成员 队长:田继平 成员:葛美义,王伟东,姜珊,邵朔,阚博文 ,李圆圆 二.文案+美工展示 链接:http://www.cnblogs.com/js201 ...

  3. 利用JAVA制作简单登录窗口

    import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; ...

  4. MAVEN ERROR maven-resources-plugin

    maven新建项目时报错 Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin: ...

  5. Codeforces Round #341 (Div. 2) E. Wet Shark and Blocks dp+矩阵加速

    题目链接: http://codeforces.com/problemset/problem/621/E E. Wet Shark and Blocks time limit per test2 se ...

  6. Mutual and feedback(互评与反馈)

    互评与反馈: 注:我在收集各小组对我小组的评价了,发现有几个没有收集到,不知道是我看不到还是贵小组不小心遗漏了对我小组的评价,如果看到,请给我留意,谢谢! 组名                  对我 ...

  7. BZOJ 3132(上帝造题的七分钟-树状数组求和+2D逆求和数组)

    3132: 上帝造题的七分钟 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 46  Solved: 18[Submit][Status][Discus ...

  8. quartz任务管理

    导入quartz相关jar包后,要执行任务的类须实现Job接口 package quartz; import org.quartz.Job; import org.quartz.JobExecutio ...

  9. 区别mouseover与mouseenter?

    区别mouseover与mouseenter? * mouseover: 在移入子元素时也会触发, 对应mouseout,进入子元素的时候,父元素显示离开状态 * mouseenter: 只在移入当前 ...

  10. Mscomm控件安装问题 License information for TMSComm not found.

    操作步骤: 1.打开delphi,菜单选择compoents->import Activex control,然后选择那个mscomm32.ocx安装即可. 2.注册MScomm控件   开始- ...