前言:

其中一维搜索方法这种思想,在图像二值化里面有应用。像二维码算法里面的条形码二值化,就是这种算法的进阶版。

缺点是只能按照一个方向进行搜索,且步伐需要调整。

目录:

  1. 数学期望例子
  2. 一维搜索方法求极值
  3. 黄金分隔法求极值

一    数学期望例子

普查某种疾病,为此要抽验N个人血,有两种方法:

方案1: 每个人分别去检验,这需要检验N次

方案2:  k个人混合在一起检验,如果检验出来呈阳性,就全部检测一次,需要K+1一次,否则只检验一次。

假设每个人呈阳性概率为p,阴性概率为q(q=1-p).

求: 如果按照第二种方案,可以减少检验次数,且k取什么值最合适

解:

X
-

X的数学期望为

N个人平均化验次数为

则,只要选择合适的k,使得

, 二阶导数小于0,有极小值

"""
Created on Fri Oct 16 14:41:02 2020@author: chengxf2
"""
import numpy as np
import matplotlib.pyplot as pltdef Draw():q = 0.9k = np.arange(2,20,1)L =1-np.power(q,k)+1/kplt.plot(k,L)plt.show()Draw()

要取合适的k,使得L最小. 

除了牛顿迭代法, 这里介绍两种方法,一维搜索区间法,黄金分割法,求解极小值


二  一维搜索的搜索区间

迭代公式:

其中:

: 当前点

: 下一个点

: 步长因子

: 当前搜索的步伐大小,以及方向

如上图,极小值点具有如下特征:

思想:

从一点出发,找到大,小 ,大特征的三个点,如果一个方向不成功,就反过来寻找

算法流程:

初始化:

,其中h 为步伐

if  

 前进计算Forward

else(两点换位)

后退计算Backward

    Forward( 前进计算)

                   

                   

                   if   :

                          return  [a, b] =[]

else

h = 2h

return Forward

                   

  Backward( 反向计算)

    

       ;

       if 

               return 

else

return Backward

# -*- coding: utf-8 -*-
"""
Created on Wed Oct 21 15:32:43 2020@author: chengxf2
"""import numpy as npclass Find():"""计算f值argskreturnf"""def Calc(self,k):#f= np.power(a,2)-7*a+10q = 0.9#k = np.arange(2,20,1)f =1-np.power(q,k)+1/kreturn fdef __init__(self):self.h = 1.0 #搜索步伐self.alpha = 1.0 #alphaself.iterNum = 0self.x0 = 2.0"""前进运算argsx1: 左边点x2: 中间点a3: 右边点"""def Forward(self,x1,x2,f1,f2,h):#print("\n Forward :",a1,a2,a3,f1,f2,f3,h)self.iterNum = self.iterNum+1x3  = x2+h*self.alphaf3 = self.Calc(x3)  #调到step1if f2<=f3: #大 小 大 找到了 a = x1 #左边点b = x2  #中间点c = x3 #右边点return a,b,celse: #f2>f3 大 小 小 h = 2*hx1 = x2 #这个点是大的f1 = f2  x2 = x3f2 =f3return self.Forward(x1,x2,f1,f2,h) #再做前进运算"""反向运算argsa1: 左边点a2: 中间点a3: 右边点"""def Backward(self,x1,x2,f1,f2,h):#移动x1,x2 指针,保持x2为最小点位置x3 = x2+h*self.alphaf3 = self.Calc(x3)if f3>=f2: #大 小 大 找到了 a = x1 #左边点b = x2  #右边点c = x3 #极小点return a,b,celse: #f3<f2 大 小 小 h = 2*hx1 = x2 #这个点是大的f1 = f2  x2 = x3f2 =f3return self.Forward(x1,x2,f1,f2,h) #再做前进运算def Run(self):print("\n =======一维搜索===")a= 0b =0c = 0x1 = self.x0f1 = self.Calc(x1)x2 = x1+self.h*self.alphaf2 = self.Calc(x2)if f2<f1:  # 前进运算h = self.ha,b,c=self.Forward(x1,x2,f1,f2,h)print("\n 左区间 : ",a,"\t 极小点 : ",b,"\t 右区间 ",c,"\t 迭代次数 ",self.iterNum)else: #后退算法h = -self.hm = x1  #a3 只是中间值,保存f1n = f1 x1= x2f1= f2x2 = mf2 = na,b,c = self.Backward(x1,x2,f1,f2,h)print("\n 反向 a: ",a,"\t b: ",b,"\c ",c)fd = Find()fd.Run()

运算结果

=======一维搜索===

左区间 :  3.0      极小点 :  4.0      右区间  6.0        迭代次数  2


三 黄金分隔法

缺点: 当区间有全局极小值,但是多个极小值的时候,无法找到全局极小值

算法流程

 始终落在极小值区间[a,b]的黄金分割点上

算法流程:

迭代 (step1)

   终止

if 

  跳转到step1

else

  跳转到step1

# -*- coding: utf-8 -*-
"""
Created on Mon Oct 26 10:51:21 2020@author: chengxf2
"""import numpy as npclass Golden():"""一维函数Argsf: 概率值"""def Calc(self,x):q = 0.9f =1-np.power(q,x)+1/xreturn fdef __init__(self):self.tol = 0.5  #精度要去self.T = 0.618 #黄金分割系数self.k = 1 #迭代次数self.N = 100  #总人数self.a = 0self.b = 10"""迭代argsa: 区间左b: 区间右"""def Loop(self):a = 2b = self.Nfor k in range(self.N):x1 = a +(1.0-self.T)*(b-a) #x1x2 = a +self.T*(b-a) #x2点if (b-a)<self.tol :c = int((a+b)/2.0+0.5) #四舍五入取整数print("\n 极小值点 ",c)return cf1 = self.Calc(x1)f2 = self.Calc(x2)if f1>f2: #截取左边的 # 重新切换黄金分割点a = x1x1 = x2  x2 = x1+ self.T*(b-a)else:# print("\n 右边 截取 ")b = x2 #截取右边的x2 = x1 x1 = a + (1-self.T)*(b-a)gd = Golden()
gd.Loop()           

数学期望 极小值的几种求法相关推荐

  1. 区分两种题目类型中的数学期望

    在概率论和统计学中,数学期望(mean)(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和(百度百科) 一种类型的题目:小明抽中彩票的概率为 p,小明重复进行抽奖,则其能抽中彩票所需的抽 ...

  2. 7种常见分布的数学期望及其证明

    1.数学期望 (1)数学期望定义 离散型随机变量数学期望 定义1 设离散型随机变量 X X X的分布律为 P ( X = x i ) = p i , i = 1 , 2... P(X=x_i)=p_i ...

  3. 解题报告(一)F、(2018 ACM - ICPC shenyang I)Distance Between Sweethearts(数学期望 + 乘法原理 + FWT)(4.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  4. python 数学期望_python机器学习笔记:EM算法

    完整代码及其数据,请移步小编的GitHub 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote EM算法也称期望最大化 ...

  5. CSU 1596 Dick.Z 的炉石赛 数学期望

    1596: Dick.Z 的炉石赛 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 53  Solved: 39 [Submit][Status][We ...

  6. 数学期望,方差,标准差,样本方差,协方差,相关系数概念扫盲

    数学期望 在概率论和统计学中,数学期望(mean)(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和,是最基本的数学特征之一.它反映随机变量平均取值的大小. 再举个例子理解一下数学期望: ...

  7. c语言编程求数学期望,数学期望的计算方法与技巧.pdf

    第22卷第3期 湖 南 工 业 大 学 学 报 VO1.22 NO.3 2008年5月 Journal of Hunan University of Technology Mav 2008 数学期望的 ...

  8. 数学期望、方差、标准差、协方差、残差、均方差、均方误差、均方根误差、均方根值对比分析及python实现

    内容较多,如有错误之处请评论区留言以便更正,内容仅供参考. 文章目录 期望(Expected value) 意义 定义 离散型 连续型 期望与平均值的区别 方差(Variance) 案例 概率论方差 ...

  9. HDU - 4586 数学期望

    题意 有一个骰子有n个面,掷到每一个面的概率是相等的,每一个面上都有相应的钱数.其中当你掷到某些面 一共m个面之一时,你有多掷一次的机会.问最后所得钱数的期望. 分析 数学期望是什么 数学期望就是一种 ...

最新文章

  1. Jupyter notebook与Spyder,以及Jupyter notebook与Spyder集成插件
  2. centos启动流程
  3. ios 系统状态栏样式修改_iOS设置状态栏样式,statusBarStyle
  4. c语言 如何连接两个程序,C语言连接两个链表程序
  5. Service rootservice does not have a SELinux domain defined
  6. python将excel数据批量导入sqlserver数据库
  7. 解决360Wifi无法在校园网和企业网下使用的方法
  8. [C]结构体数组初始化
  9. 使用JS实现对页面的繁体简体翻译转换
  10. 【第一组】第六次冲刺例会
  11. pytorch中实现Balanced Cross-Entropy
  12. 浏览器页签icon图标的设置和获取
  13. 点线面平面设计的概念是什么,分享点线结合构成设计图
  14. C# 读取CSV文件
  15. Python图片处理模块PIL操作方法(pillow)(转载)
  16. HEIC文件怎么打开,如何将HEIC格式转换为JPG格式
  17. 正向动力学与反向动力学
  18. SAP CO01(创建生产订单)/MIGO(发货投料)前台操作
  19. 必须收藏!企业邮箱申请的详细流程
  20. AdobeAcrobat DC pro 2019版JH教程

热门文章

  1. Docker快速搭建OpenProject项目管理协作平台
  2. 魔幻滤镜Gabor Filter 原理与实现(python C++)
  3. SPSS Modeler基础操作与模型求解
  4. CSDN为什么会发展社区?看看官方怎么说
  5. Navy maneuvers(dfs)
  6. ps去掉文字的简单方法
  7. 【服务器搭建个人网站】教程五:手把手教你怎样进行公安备案 快来学~
  8. About Flash
  9. C# CultureInfo 类之各国语言所对应的的区域性名称
  10. Spring Web MVC (Spring MVC) 的相关例题及解析