经典算法(2):黄金分割法(Gold)
黄金分割法。0.618法。优选法。
以0.618^n的速率缩减区间,寻找最值点。
两点说明。
1. 当能明确目标函数是一个单峰函数的时候,
2. 当知道目标函数的极值点在哪个区间范围内的时候,
此方法非常有效。
昨天看招聘信息,第一条就是,天文地理、物理数学等烧脑专业优先。+_+
对于我们这种还不算特别烧脑的专业的人来说,凭空想可能有点难度。
不过拿一支笔在草稿纸上画画图,应该就可以知道怎么缩小区间了。
需要多用几个临时变量,e.g. x_low_try,较小的试探点,x_high_try,较大的试探点。
要得到f(x)的函数值,最好能另写一个函数,输入x,返回f(x),这样有助于代码实现。
%% 黄金分割法
% qcy
% 2016年12月22日23:43:40clear;
close all;
clc%%fun = @(x) x.^2 - 2 * x - 3; % 匿名函数x = -2:0.001:5;
f = x.^2 - 2*x - 3;
figure(1);
plot(x,f);
hold on;grid on;
title('f(x) = x^2 - 2x - 3');SEARCH_MAX = 1e4;
X_LEN_EPS = 1e-4;
count = 0;x_low = -2;
x_high = 5; range = x_high - x_low;x_low_try = x_low + (1-0.618) * range; % 右试探点
x_high_try = x_low + 0.618 * range; % 左试探点while count X_LEN_EPS)y_low_try = fun(x_low_try);y_high_try = fun(x_high_try);if y_low_try < y_high_try x_high = x_high_try; % 更新右端点,左端点不动range = x_high - x_low; % 更新x的搜索范围x_low_try = x_low + (1-0.618) * range; % 更新试探点x_high_try = x_low + 0.618 * range; % 更新试探点elsex_low = x_low_try; % 更新右端点,左端点不动range = x_high - x_low; % 更新x的搜索范围x_low_try = x_low + (1-0.618) * range; % 更新试探点x_high_try = x_low + 0.618 * range; % 更新试探点endplot( (x_high + x_low)/2 , fun((x_high + x_low)/2) ,'r.','markersize',7) %标记当前的位置drawnow;pause(0.2);count = count + 1;endx_min = (x_high + x_low)/2 ;
y_min = fun(x_min);plot(x_min,y_min,'mp','markersize',7) %标记当前的位置
经典算法(2):黄金分割法(Gold)相关推荐
- 数据挖掘的一些经典算法
数据挖掘能做以下七种不同事情 (分析方法): 数据挖掘能做以下七种不同事情 · 分类 (Classification) · 估计(Estimation) · 预测(Prediction) · 相关性分 ...
- 经典算法研究系列:二、Dijkstra 算法初探
经典算法研究系列:二.Dijkstra 算法初探 July 二零一一年一月 ====================== 本文主要参考:算法导论 第二版.维基百科. 写的不好之处,还望见谅. 本 ...
- 经典算法书籍推荐以及算法书排行【算法四库全书】
经典算法书籍推荐以及算法书排行[算法四库全书] 作者:霞落满天 https://linuxstyle.blog.csdn.net/ https://blog.csdn.net/21aspne ...
- 经典算法题每日演练——第六题 协同推荐SlopeOne 算法
原文:经典算法题每日演练--第六题 协同推荐SlopeOne 算法 相信大家对如下的Category都很熟悉,很多网站都有类似如下的功能,"商品推荐","猜你喜欢&quo ...
- 白话经典算法系列之七 堆与堆排序
堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法.学习堆排序前,先解说下什么是数据结构中的二叉堆. 二叉堆的定义 二叉堆是全然二叉树或者是近似全然二叉树. 二叉堆满 ...
- 免费技术直播:唐宇迪带你一节课了解机器学习经典算法
常常有小伙伴在后台反馈:机器学习经典算法有哪些? 自学难度大又没有效果,该怎么办? CSDN为了解决这个难题,联合唐宇迪老师为大家带来了一场精彩的直播[一节课掌握机器学习经典算法-线性回归模型].本次 ...
- 一文了解迁移学习经典算法
来源 | linolzhang的CSDN博客 作者 | linolzhang ▌一. 了解迁移学习 迁移学习(Transfer Learning)目标是将从一个环境中学到的知识用来帮助新环境中的学习任 ...
- 调包侠福音!机器学习经典算法开源教程(附参数详解及代码实现)
Datawhale 作者:赵楠.杨开漠.谢文昕.张雨 寄语:本文针对5大机器学习经典算法,梳理了其模型.策略和求解等方面的内容,同时给出了其对应sklearn的参数详解和代码实现,帮助学习者入门和巩固 ...
- 密码学中经典算法及应用
一.加密算法理论基础 1.1 背景 密码学相关安全技术在整个信息技术领域的重要地位无需多言.如果没有现代密码学和信息安全的研究成果,人类社会根本无法进入信息时代. 实际上,密码学和安全领域所涉及的知识 ...
- PMVS:多视图匹配经典算法
导语:Multi-View Stereo(MVS)多视图立体匹配与三维重建的任务是:以已知内外参数的多幅图像(SfM的结果)为输入,重建出真实世界中物体/场景的三维模型. 本文作者提出了PMVS的经典 ...
最新文章
- (NO.00001)iOS游戏SpeedBoy Lite成形记(二十二)
- java的知识点17——java.util.Arrays类、多维数组
- [scala-spark]7. list 与 map
- 如何判断一个SAP CRM UI能否被扩展
- neo4j导入两个文件_Neo4j:找到两个纬度/经度之间的中点
- quartz基本使用
- android显示过程,Android 桌面加载图标过程分析
- mysql日志文件架构_mysql日志文件
- 免费Ebook 分享《Silverlight for Windows Phone Toolkit in Depth》
- 米线店结账程序 装饰着模式_云南大学《设计模式》实验报告2_装饰者模式.doc...
- mac本在终端查看本地ip
- 一切不能拌饭的菜都是耍流氓
- 让学前端不再害怕英语单词(三)
- c# 计算圆锥的体积_用c#编写一个程序计算出球、圆柱和圆锥的表面积和体积。...
- Serverless 开发前端初尝试
- 支持Python3、JavaScript、Shell、TypeScript 的定时任务管理面板项目
- 前端体系结构知识概括
- 看到一个描述性弹性域窗口怎么去找此弹性域段的定义
- Google在东京搬出了所有的AI产品和技术,你知道哪个? | 精选
- mac 装 Flash Player的时候别忘记装 PPAPI插件版本的
热门文章
- 阿里云服务器远程桌面连接
- VMware 17 Pro安装(升级)
- remosaic插值算法_图像插值算法及其实现
- 推荐一个免费下matlab代码的网站
- Unity触发检测和碰撞检测
- OpenCV笔记:模板匹配 cv2.matchTemplate()、cv2.minMaxLoc() 与 绘制矩形 cv2.rectangle() 方法介绍
- 【nginx】nginx的使用
- 浅谈一下汽车行业中的OTA/FOTA/SOTA
- 第3周课件-全网最详细的ORB-SLAM2精讲
- 深度学习中常见的损失函数(L1Loss、L2loss)