黄金分割法

斐波那契查找(黄金分割法查找)

拜拜、爱过 提交于 2020-03-01 14:57:54
什么是斐波那契查找 斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、····,在数学上,斐波那契被递归方法如下定义:F(1)=1,F(2)=1,F(n)=f(n-1)+F(n-2) (n>=2)。该数列越往后相邻的两个数的比值越趋向于黄金比例值(0.618)。 斐波那契查找就是在二分查找的基础上根据斐波那契数列进行分割的。在斐波那契数列找一个等于略大于查找表中元素个数的数F[n],将原查找表扩展为长度为 F[n] (如果要补充元素,则补充重复最后一个元素,直到满足 F[n] 个元素),完成后进行斐波那契分割,即F[n]个元素分割为前半部分F[n-1]个元素,后半部分F[n-2]个元素,找出要查找的元素在那一部分并递归,直到找到。 代码实现 package test.algorithm.FastSlowPointer; /** * 斐波那契查找(黄金分割法查找) * @author serenity * */ public class FibonacciSearch { public final static int MAXSIZE = 20; /** * 斐波那契数列 * @return */ public static int[] fibonacci(){ int[] f = new int[20]; int i =0; f[0] = 1;

Python实现二分法和黄金分割法

浪尽此生 提交于 2019-12-02 15:09:41
  运筹学课上,首先介绍了非线性规划算法中的无约束规划算法。二分法和黄金分割法是属于无约束规划算法的一维搜索法中的代表。    二分法: $$x_{1}^{(k+1)}=\frac{1}{2}(x_{R}^{(k)}+x_{L}^{(k)}-\Delta)$$ $$x_{2}^{(k+1)}=\frac{1}{2}(x_{R}^{(k)}+x_{L}^{(k)}+\Delta)$$      下面记录下用Python实现二分法和黄金分割法的代码。    来源: https://www.cnblogs.com/chester-cs/p/11751508.html

黄金分割法求极值点

假装没事ソ 提交于 2019-11-30 06:19:33
我们先来了解什么是黄金分割算法: 黄金分割法也称0.618算法,属于区间收缩法,首先找出包含极小点的初始搜索区间,然后黄金分割点通过对函数值的比较不断缩小搜索区间(当然要保证极小点在搜素区间),当定义域的长度缩小的一定长度时候,就可以用当前区间的端点值的平均近似代替极小值点。 注:适用范围是单谷函数(就是只有一个极大值或者极小值点) 通俗点讲就是讲先给定搜索区间比如[a b],然后另x 1 = a + 0.382(b - a),x 2 = a + 0.618(b - a),然后把x 1 和x 2 代入到函数f(x)中比较f(x 1 )和f(x 2 )的大小,如果f(x 1 )>f(x 2 ),则让a = x 1 ,否则b = x 2 ,然后在新的搜索区间[a b]内,重新找到x 1 和x 2 重复以上过程,直到b - a<ξ(这个是给出的最小精度),然后取a,b的平均值近似代替f(x) min。 代码实现如下: 1 import numpy as np 2 import matplotlib.pyplot as plt 3 import time as tm 4 5 x = np.random.rand(100) 6 x.sort() 7 plt.figure() 8 plt.xlabel("t") 9 plt.ylabel("y") 10 plt.title("0.618")