组合最优化——二次插值法
所谓二次插值法,是通过二次函数去模拟我们所得到的的单峰函数,用这个二次函数的极小点作为原来函数的极小点
如果这个极小点的横坐标已经满足了精度的要求,就停止运算
算法步骤如下:
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]
这个算法对原函数为二次函数有着极其可观的效果,但随着原函数的复杂性升高,级数增加,会越来越慢
组合最优化——二次插值法相关推荐
- DL之DNN:自定义MultiLayerNet【6*100+ReLU,SGD】对MNIST数据集训练进而比较【多个超参数组合最优化】性能
DL之DNN:自定义MultiLayerNet[6*100+ReLU,SGD]对MNIST数据集训练进而比较[多个超参数组合最优化]性能 目录 输出结果 设计思路 核心代码 输出结果 val_acc: ...
- 怎么用python编程实现二次差值多项式_二次插值法python实现
# -*- coding: utf-8 -*- ''' 二次插值法python实现 f(x)=x^4 - 4x^3 - 6x^2 -16x +4极值 区间[-1,6] e=0.05 ''' impor ...
- 漫步最优化二十七——二次插值法
陪着你,仿佛面朝阳光,\textbf{陪着你,仿佛面朝阳光,} 不管走到哪里都是晴天.\textbf{不管走到哪里都是晴天.} 在蝴蝶飞舞的百花丛中,\textbf{在蝴蝶飞舞的百花丛中,} 一朵一朵 ...
- matlab三点确定抛物线,[转]matlab编写的进退法,黄金分割法,抛物线法(二次插值法),wolfe不精确一维搜索...
这是我最优化方法课程的编程作业,贴来和大家分享,后续会继续发来一些最优化的程序.. 以下程序由matlab编写 程序简介 jintuifa.m 进退法,用于确定下单峰区间.根据最优化方法(天津大学出版 ...
- matlab用进退法写程序,matlab编写的进退法,黄金分割法,抛物线法(二次插值法),wolfe不精确一维搜索...
这是我最优化方法课程的编程作业,贴来和大家分享,后续会继续发来一些最优化的程序.. 以下程序由matlab编写 程序简介 jintuifa.m 进退法,用于确定下单峰区间.根据最优化方法(天津大学出版 ...
- 两点二次插值法求极值matlab,三点二次插值法
function [xo,fo] = Opt_Quadratic(f,x,TolX,TolFun,MaxIter) % 用三点二次插值法求f(x)最优解 %输出: xo为取最小值的点 fo为最小的函数 ...
- matlab 三点插值,三点二次插值法Matlab实现
三点二次插值法Matlab实现 实验目的: 1.通过本次实验了解线性搜索,加深对三点二次插值法的理解 2.根据三点二次插值法的算法步骤编写相应的Matlab程序,并利用matlab 程序计算求解最优化 ...
- 组合最优化——线性规划基本定理
要找线性规划的最优解只需在基可行解中选择就可以了,这样将选择的范围控制在有限个. 1.定理1 设x是标准型线性规划(LP)的可行解,x为(LP)的基可行解的充要条件是,x的正分量对应的系数列向量线性无 ...
- 分段二次插值的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 ...
最新文章
- 竞赛大杀器xgboost,波士顿房价预测
- c++学习笔记之类的应用
- Django运行SQL语句
- 程序员修炼之道:从小工到专家读后感02
- react-native-Cocoapods-Swift-Project
- Spark之 使用SparkSql操作mysql和DataFrame的Scala实现
- 读取mysql数据到select_MySQL数据库8(十三)高级数据操作之select指令
- 2018(上)C高级第0次作业
- 区块链 什么是DAPP
- python eval函数简单使用
- java epoll 模型_I/O多路复用技术详解之epoll模型
- netty源码解读六(内存池相关)
- 计算机应用技术专业课程视频,微视频技术在计算机专业课程教学中的应用研究...
- 腾讯云服务器手动建立WordPress个人站点Windows系统教程-Unirech腾讯云国际版代充
- 微信小程序文本输入<textarea/> 详解
- Skywalking+Nacos实现高可用集群和动态配置
- 2.2.1 数据通信系统的模型
- 系统学习Pytorch笔记八:Tensorboard可视化与Hook机制
- 什么才是最好的语言?
- 使用Java分离音频左右声道