最优化方法Python计算:一元函数搜索算法——牛顿法

news2024/11/24 16:54:13

设函数 f ( x ) f(x) f(x),在 [ a , b ] [a,b] [a,b]上二阶连续可微且有唯一的最小值点 x 0 x_0 x0。由于 f ( x ) f(x) f(x) [ a , b ] [a,b] [a,b]上的单峰函数,故 f ′ ′ ( x ) > 0 f''(x)>0 f′′(x)>0 x ∈ ( a , b ) x\in(a,b) x(a,b)。对给定 x k ∈ [ a , b ] x_k\in[a,b] xk[a,b],函数 f ( x ) f(x) f(x) x k x_k xk的近旁近似为
q k ( x ) = f ( x k ) + f ′ ( x k ) ( x − x k ) + 1 2 f " ( x k ) ( x − x k ) 2 . q_k(x)=f(x_k)+f'(x_k)(x-x_k)+\frac{1}{2}f"(x_k)(x-x_k)^2. qk(x)=f(xk)+f(xk)(xxk)+21f"(xk)(xxk)2.
由于 q k ′ ( x k ) = f ′ ( x k ) q'_k(x_k)=f'(x_k) qk(xk)=f(xk) q k ′ ′ ( x k ) = f ′ ′ ( x k ) > 0 q''_k(x_k)=f''(x_k)>0 qk′′(xk)=f′′(xk)>0,故 x k − f ′ ( x k ) f ′ ′ ( x k ) x_k-\frac{f'(x_k)}{f''(x_k)} xkf′′(xk)f(xk) q k ( x ) q_k(x) qk(x)的驻点,也是唯一的极小值点。
在这里插入图片描述
我们用以下策略计算 f ( x ) f(x) f(x)的最优解 x 0 x_0 x0的搜索序列:取 x 1 ∈ [ a , b ] x_1\in[a,b] x1[a,b]充分接近 x 0 x_0 x0,从 k = 1 k=1 k=1开始作迭代,若 f ′ ( x k ) = 0 f'(x_k)=0 f(xk)=0,由 f ( x ) f(x) f(x) [ a , b ] [a,b] [a,b]上的可微性及单峰性知,找到最优解 x 0 = x k x_0=x_k x0=xk,如上图(a)所示。否则,我们用 q k ( x ) q_k(x) qk(x)的唯一极小值点 x k − f ′ ( x k ) f ′ ′ ( x k ) x_k-\frac{f'(x_k)}{f''(x_k)} xkf′′(xk)f(xk)作为第 k + 1 k+1 k+1个迭代点 x k + 1 x_{k+1} xk+1,即
x k + 1 = x k − f ′ ( x k ) f ′ ′ ( x k ) . x_{k+1}=x_k-\frac{f'(x_k)}{f''(x_k)}. xk+1=xkf′′(xk)f(xk).
无论 x k x_k xk是处于 f ( x ) f(x) f(x)的上升区间如上图(b)或处于 f ( x ) f(x) f(x)的下降区间如上图(c)所示, x k + 1 x_{k+1} xk+1都有望比 x k x_k xk更接近 f ( x ) f(x) f(x)的最小值点 x 0 x_0 x0。循环往复,直至遇到 f ′ ( x k ) = 0 f'(x_k)=0 f(xk)=0
按此策略的搜索算法称为牛顿方法,代码实现牛顿算法。

from scipy.optimize import OptimizeResult
def newton(fun, x1, gtol, **options):
    xk=x1
    f1,f2=der_scalar(fun,xk)
    k=1
    while abs(f1)>=gtol:
        k+=1
        xk-=f1/f2
        f1,f2=der_scalar(fun,xk)
    bestx=xk
    besty=fun(bestx)
    return OptimizeResult(fun=besty, x=bestx, nit=k)

程序的第2~12行定义实现牛顿算法的函数newton。参数fun表示函数 f ( x ) f(x) f(x),x1表示初始点 x 1 x_1 x1,gtol表示容错误差 ε \varepsilon ε,options用来使minimize_scalar将x1和gtol等实际参数传递给newton。第3行将迭代点xk初始化为x1。第4行调用导数计算函数der_scalar详见博文《一元函数导数的数值计算》)计算 f ( x ) f(x) f(x)的一、二阶导数置于f1和f2。第5行将迭代次数置为1。第6~9行的while循环执行迭代计算:第7行迭代次数k自增1,第8行计算迭代点 x k − f ′ ( x k ) f ′ ′ ( x k ) x_k-\frac{f'(x_k)}{f''(x_k)} xkf′′(xk)f(xk)更新xk。第9行再次调用der_scalar计算更新后迭代点处的一、二阶导数。循环往复,直至 ∣ f ′ ( x k ) ∣ < ε |f'(x_k)|<\varepsilon f(xk)<ε。第10、11行分别计算最优解近似值bestx及最优解处函数近似besty。值12行返回用计算结果besty(最优解处函数值 f ( x 0 ) f(x_0) f(x0)的近似值)、bestx(最优解 x 0 x_0 x0的近似值)和k(迭代次数)构建OptimizeResult类型对象作为返回值。
例1 用上列程序定义的newton函数,计算函数 f ( x ) = x 2 + 4 cos ⁡ x f(x)=x^2+4\cos{x} f(x)=x2+4cosx x 1 = 1.5 x_1=1.5 x1=1.5近旁的极小值点。
:下列代码完成计算。

import numpy as np                                                  #导入numpy
from scipy.optimize import minimize_scalar                          #导入minimize_scalar
f=lambda x:x**2+4*np.cos(x)                                         #设置目标函数
minimize_scalar(f,method=newton,options={'x1':1.5,'eps':1.48e-8})   #计算最优解

利用代码中的注释信息不难理解本程序。运行程序,输出

 fun: 2.316808419788213
 nit: 7
   x: -1.8954942647118507

读者可将此运行结果与博文《一元函数搜索算法——二分法》中例1对同一函数使用二分法计算的结果相比。在相同的容错误差水平下,牛顿法的效率(仅用7次迭代)显然高于二分法(用27次迭代)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/559939.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实时频谱-2.2数字信号处理

数字信号处理&#xff08;DSP&#xff09;概念 数字信号处理(digital signal processing)&#xff0c;是以数字运算方法实现信号变换、滤波、检测、估值、调制解调以及快速算法等处理的一门学科。数字信号处理具有高精度、高可靠性、可程序控制、可时分复用、便于集成化等优点…

【Spring篇】AOP事务管理

&#x1f353;系列专栏:Spring系列专栏 &#x1f349;个人主页:个人主页 一、AOP事务管理 1.Spring事务简介 1.相关概念介绍 事务作用&#xff1a;在数据层保障一系列的数据库操作同成功同失败Spring事务作用&#xff1a;在数据层或 业务层 保障一系列的数据库操作同成功同失…

代码随想录 字符串 Java

文章目录 &#xff08;简单&#xff09;344. 反转字符串&#xff08;简单&#xff09;541. 反转字符串||&#xff08;简单&#xff09;剑指Offer 05. 替换空格&#xff08;中等&#xff09;151. 反转字符串中的单词&#xff08;简单&#xff09;剑指 Offer 58 - II. 左旋转字符…

word怎么转excel?一键转换并不难

在职场中&#xff0c;常常需要将 Word 文档转换为 Excel 表格&#xff0c;以便更好地管理和数据分析。本文将介绍两种 Word 转 Excel 的方法&#xff0c;以及如何在 Excel 中处理转换后的数据。 方法一&#xff1a;使用文本转换向导 使用Word的文本转换向导&#xff0c;将Word文…

第二篇、基于Arduino uno,用oled0.96寸屏幕显示数字和字符——结果导向

0、结果 说明&#xff1a;先来看看实际的结果&#xff0c;如果是你想要的&#xff0c;可以接着往下看。 1、外观 说明&#xff1a;本次使用的oled是0.96寸的&#xff0c;别的规格的屏幕不一定适用本教程&#xff0c;一般而言有显示白色、蓝色和蓝黄一起显示的。 2、连线 说…

SQL执行过程

1. select 语句执行过程 一条 select 语句的执行过程如上图所示 1、建立连接 连接器会校验你输入的用户名和密码是否正确&#xff0c;如果错误会返回提示&#xff0c;如果正确&#xff0c;连接器会查询当前用户对于的权限。连接器的作用就是校验用户权限 2、查询缓存 MySQL…

VPX通信基础理论

新型VPX(VITA 46)标准是自从VME引入后的25年来&#xff0c;对于VME总线架构的最重大也是最重要的改进。它将增加背板带宽&#xff0c;集成更多的I/O&#xff0c;扩展了格式布局。 目前&#xff0c;VME64x已经不能满足国防和航空领域越来越高的性能要求和更为恶劣环境下的应用。…

老杨说运维 | 农商行数字化转型的误区与破局之道

为推动农村中小银行更好地满足人民银行《金融科技发展规划&#xff08;2022—2025年&#xff09;》及银保监会《关于银行业保险业数字化转型的指导意见》对银行数字化转型的相关要求&#xff0c;加快推进农村基层数字化治理&#xff0c;助力乡村振兴&#xff0c;农信银资金清算…

低成本副业:开发小程序商城攻略

随着互联网的普及和电子商务的兴起&#xff0c;越来越多的人选择做点副业&#xff0c;其中开发小程序商城是一个不错的选择。相比传统的实体店&#xff0c;小程序商城的成本更低&#xff0c;而且门槛更低&#xff0c;可以让更多的人参与到副业中来。那么&#xff0c;如何开发自…

SOLIDWORKS 认证考试简介

1、SOLIDWORKS 认证助理工程师-机械设计 (CSWA–Mechanical Design) 证书简介&#xff1a;通过CSWA 认证证明了您在 SOLIDWORKS 上的专长&#xff0c;即表示您已成功展示了使用 SOLIDWORKS 机械设计工具的能力&#xff0c;了解 SOLIDWORKS 中可帮助设计机械零部件的工具集。 考…

大模型时代的BERT 详解

最近在学习BERT。 简单说几句。 BERTBidirectional Encoder Representation from Transformer 作者是谷歌的团队 主要亮点是使用transformer和pre-trainning未标注的数据&#xff0c;训练出来一个通用的语言模型。 0&#xff1a;背景 视觉算法因为有ImageNet的存在&#…

Matlab --- 如何用matlab在三维坐标系中画一个三维向量

用MATLAB画三维向量 前两天&#xff0c;我在写Gram-Schmidt正交化的文章时&#xff0c;想到最好用matlab把还没有经过正交化计算的原始向量&#xff0c;和已经经过正交化处理后的正交基&#xff0c;在三维坐标系中&#xff0c;用图像的方式表示出来。这样可以更加直观的看到向量…

vue3实现动态菜单和动态路由和刷新后白屏处理

前言&#xff1a; 项目中&#xff0c;当每一个角色得到的界面不一致的时候&#xff0c;我们就不能使用静态菜单了&#xff0c;而是要从后端得到动态的菜单数据&#xff0c;然后动态的将菜单数据展示在界面上。 除了在界面展示&#xff0c;也还要将界面的路由动态添加&#xf…

档案管理流程,文件上传,文件解析流程

文件上传 先简单说下文件上传的步骤吧 控制层简单左下转发 PostMapping("uploadAndParsing") public ResponseResult uploadAndParsing(RequestParam("file") MultipartFile file){try {String accessToken Header.getAuthorization(request.getHeader(…

2022年度互联网平均薪资出炉~

近期&#xff0c;国家统计局发布2022年平均工资数据&#xff0c;互联网行业薪资再次成为大家关注的焦点。 在2022年分行业门类分岗位就业人员年平均工资中&#xff0c;信息传输、软件和信息技术服务业的薪资遥遥领先其他行业&#xff0c;为全国平均薪资水平的 1.78 倍&#xf…

H-buildX项目(学习笔记1.0)

记录一下自己的学习过程。 首先&#xff0c;下载H-buildX软件&#xff0c;直接度娘下载即可。 以前一直用的是vscode&#xff0c;这次做网上的项目用到了这个。 打开 就是这样的界面&#xff0c;首先介绍几个常用的功能 右上角的预览&#xff0c;也就是运行你的Vue项目的界面效…

2023华为OD机试(A卷+B卷)(Java C++ Python JS)真题目录 + 考点 + 通过率

文章目录 &#x1f680;前言华为OD刷题列表&#xff0c;每天十题&#xff0c;刷出算法新高度&#xff0c;刷出人生新际遇&#x1f530;刷题列表&#xff1a;华为OD机试真题&#xff08;Java C Python JS&#xff09; &#x1f680;其他华为OD机试题清单 &#x1f4dd;最后作者&…

【最新整理】一起看看86 个 ChatGPT 插件

今天我们来看看这86个插件都是做什么的&#xff1f; Shimmer&#xff1a;跟踪膳食并获得更健康生活方式的见解 World News&#xff1a;总结新闻头条 Bohita&#xff1a;用您能描述的任何图像制作服装 Portfolio Pilot&#xff1a;您的 AI 投资指南&#xff1a;投资组合评估…

跟着我学 AI丨五分钟了解人工智能的发展史

随着 ChatGPT 火出圈&#xff0c;又接二连三出现了文心一言、Midjourney、FireFly 等创新性的 AI 产品&#xff0c;互联网掀起的 AI 风暴已经席卷了全球各个角落。AI 究竟为什么这么强大&#xff1f;从什么时候开始冒出来的呢&#xff1f;今天我就带大家认识一下 AI 的发展史。…

软件设计师考试——面向对象设计模式分类

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、面向对象设计——设计模式的分类一、创建型模式二、结构型模式三、行为型模式 二、历年真题——面向对象设计模式分类2009上半年2009下半年2010上半年2010下半年…