所谓二次插值法,是通过二次函数去模拟我们所得到的的单峰函数,用这个二次函数的极小点作为原来函数的极小点
如果这个极小点的横坐标已经满足了精度的要求,就停止运算
算法步骤如下:
1、设x0,x1,x2三点,其中x0=a,x1=(a+b)/2,x2=b。
2、计算以(x0,f(x0))、(x1,f(x1))、(x2,f(x2)),并以此三点为值求得一个二次函数,计算此二次函数的极值点x=-b/2a,到第三步
3、如果极值点x与x1的差值小于精度,说明已经达到了精度,可以终止,否则转第四步
4、将x0,x1,x2,x进行排序,如果f(x1)>f(x),则说明x更接近最小值,我们选靠近x的两个点,并对x1,x0,x2进行更新:x1=x,x0=小,x2=大,然后回到第二步;否则,说明x1更接近最小值,我们选靠近x1的两个点,并对x0,x2进行更新:x0=小,x2=大,然后返回第二步

详细的代码如下:

import numpy as np
n=0def f(x):return float(x*x-x+2)# return float(x*x*x*x-x*x-2*x+5)if __name__=='__main__':a = float(input('请输入左端点'))b = float(input('请输入右端点'))tol=0.0001# tol=float((b-a)*0.09)x0=ax1=(a+b)/2.0x2=bn=0while 1:n=n+1xishu = [[pow(x0, 2), x0, 1], [pow(x1, 2), x1, 1], [pow(x2, 2), x2, 1]]zhi = [f(x0), f(x1), f(x2)]A = np.linalg.solve(xishu, zhi)a = A[0]b = A[1]c = A[2]x=(-1)*b/(2*a)print(x)if abs(x-x1)<tol:if f(x) < f(x1):y = f(x)print(n, '次迭代')print('x=',x)breakelse:y = f(x1)print(n, '次迭代')print('x=',x1)breakarr = [x0, x1, x2, x]arr.sort()if f(x1) > f(x):index = arr.index(x)x1 = xx0 = arr[index - 1]x2 = arr[index + 1]else:index = arr.index(x1)x0 = arr[index - 1]x2 = arr[index + 1]

这个算法对原函数为二次函数有着极其可观的效果,但随着原函数的复杂性升高,级数增加,会越来越慢

组合最优化——二次插值法相关推荐

  1. DL之DNN:自定义MultiLayerNet【6*100+ReLU,SGD】对MNIST数据集训练进而比较【多个超参数组合最优化】性能

    DL之DNN:自定义MultiLayerNet[6*100+ReLU,SGD]对MNIST数据集训练进而比较[多个超参数组合最优化]性能 目录 输出结果 设计思路 核心代码 输出结果 val_acc: ...

  2. 怎么用python编程实现二次差值多项式_二次插值法python实现

    # -*- coding: utf-8 -*- ''' 二次插值法python实现 f(x)=x^4 - 4x^3 - 6x^2 -16x +4极值 区间[-1,6] e=0.05 ''' impor ...

  3. 漫步最优化二十七——二次插值法

    陪着你,仿佛面朝阳光,\textbf{陪着你,仿佛面朝阳光,} 不管走到哪里都是晴天.\textbf{不管走到哪里都是晴天.} 在蝴蝶飞舞的百花丛中,\textbf{在蝴蝶飞舞的百花丛中,} 一朵一朵 ...

  4. matlab三点确定抛物线,[转]matlab编写的进退法,黄金分割法,抛物线法(二次插值法),wolfe不精确一维搜索...

    这是我最优化方法课程的编程作业,贴来和大家分享,后续会继续发来一些最优化的程序.. 以下程序由matlab编写 程序简介 jintuifa.m 进退法,用于确定下单峰区间.根据最优化方法(天津大学出版 ...

  5. matlab用进退法写程序,matlab编写的进退法,黄金分割法,抛物线法(二次插值法),wolfe不精确一维搜索...

    这是我最优化方法课程的编程作业,贴来和大家分享,后续会继续发来一些最优化的程序.. 以下程序由matlab编写 程序简介 jintuifa.m 进退法,用于确定下单峰区间.根据最优化方法(天津大学出版 ...

  6. 两点二次插值法求极值matlab,三点二次插值法

    function [xo,fo] = Opt_Quadratic(f,x,TolX,TolFun,MaxIter) % 用三点二次插值法求f(x)最优解 %输出: xo为取最小值的点 fo为最小的函数 ...

  7. matlab 三点插值,三点二次插值法Matlab实现

    三点二次插值法Matlab实现 实验目的: 1.通过本次实验了解线性搜索,加深对三点二次插值法的理解 2.根据三点二次插值法的算法步骤编写相应的Matlab程序,并利用matlab 程序计算求解最优化 ...

  8. 组合最优化——线性规划基本定理

    要找线性规划的最优解只需在基可行解中选择就可以了,这样将选择的范围控制在有限个. 1.定理1 设x是标准型线性规划(LP)的可行解,x为(LP)的基可行解的充要条件是,x的正分量对应的系数列向量线性无 ...

  9. 分段二次插值的matlab程序,一维优化方法之二次插值法matlab程序

    程序为: a=0; b=pi/2; a1=a; a3=b; a2=a; a4=b; while a3-a1>0.01 f1=-atan(2*sin(2*a1)/(5-cos(2*a1))); f ...

最新文章

  1. 竞赛大杀器xgboost,波士顿房价预测
  2. c++学习笔记之类的应用
  3. Django运行SQL语句
  4. 程序员修炼之道:从小工到专家读后感02
  5. react-native-Cocoapods-Swift-Project
  6. Spark之 使用SparkSql操作mysql和DataFrame的Scala实现
  7. 读取mysql数据到select_MySQL数据库8(十三)高级数据操作之select指令
  8. 2018(上)C高级第0次作业
  9. 区块链 什么是DAPP
  10. python eval函数简单使用
  11. java epoll 模型_I/O多路复用技术详解之epoll模型
  12. netty源码解读六(内存池相关)
  13. 计算机应用技术专业课程视频,微视频技术在计算机专业课程教学中的应用研究...
  14. 腾讯云服务器手动建立WordPress个人站点Windows系统教程-Unirech腾讯云国际版代充
  15. 微信小程序文本输入<textarea/> 详解
  16. Skywalking+Nacos实现高可用集群和动态配置
  17. 2.2.1 数据通信系统的模型
  18. 系统学习Pytorch笔记八:Tensorboard可视化与Hook机制
  19. 什么才是最好的语言?
  20. 使用Java分离音频左右声道

热门文章

  1. JQuery 轮播图片
  2. sth. about tarjan
  3. CodeForces - 602B Approximating a Constant Range
  4. Python(Pycharm)常用快捷键
  5. 浅谈人工智能与人形缝纫机器人
  6. 《机器学习》课后习题3.3 对率回归编程实现
  7. 【题库】上海市学校心理咨询师-普通心理学-考点解析 13.4 人格理论
  8. 校招----小米二面面经
  9. 浅谈雷达信号处理技术及发展趋势 刘守丰
  10. python opencv 图像叠加_OpenCVPython:在图像上快速叠加蒙版