布伦特方法(Brent‘s method)---结合二分法、割线法和逆二次插值法的求根方法

本文主要是介绍布伦特方法(Brent‘s method)---结合二分法、割线法和逆二次插值法的求根方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基础介绍:

给定给定区间\left [ a,b \right ],函数连续且f(a)\cdot f(b)<0,那么根据介值定理,函数必然在区间内有根。

  1. 二分法:将区间不断二分,使端点不断逼近零点。下一次迭代的区间为\left [ a,c \right ]\left [ c,b \right ],其中c=\frac{a+b}{2}
  2. 割线法(线性插值):基本思想是用弦的斜率近似代替目标函数的切线斜率,并用割线与横轴交点的横坐标作为方程式的根的近似。即给定两个点\left ( a,f(a) \right ),\left ( b,f(b) \right )。其割线方程为y=\frac{f(b)-f(a)}{b-a}\cdot (x-b)+f(b),那么令y=0,x的值即为下一次迭代的结果c=b-\frac{f(b)\cdot (b-a)}{f(b)-f(a)}
  3. 逆二次插值法:为割线法的进化版本。使用三个点确定一个二次函数,二次函数与横轴交错的点即为下次迭代的值。但是,其二次函数可能不会和横轴相交,因此做出一点改变,以y值作为自变量。给定三个点\left ( x_{i-2},f(x_{i-2}) \right ),(x_{i-1},f(x_{i-1})),(x_{i},f(x_{i})),则通过这三个点确定的二次函数为x=\frac{(y-f(x_{i-1}))(y-f(x_{i}))}{(f(x_{i-2})-f(x_{i-1}))(f(x_{i-2})-f(x_{i}))}\cdot x_{i-2}+\frac{(y-f(x_{i-2}))(y-f(x_{i-1}))}{(f({x_{i}})-f(x_{i-2}))(f(x_{i})-f(x_{i-1}))}\cdot x_{i}+\frac{(y-f(x_{i-2}))(y-f(x_{i}))}{(f(x_{i-1})-f(x_{i-2}))(f(x_{i-1})-f(x_{i}))}\cdot x_{i-1},令y=0,求得x_{i+1}=\frac{f(x_{i-1})f(x_{i})}{(f(x_{i-2})-f(x_{i-1}))(f(x_{i-2})-f(x_{i}))}\cdot x_{i-2}+\frac{f(x_{i-2})f(x_{i-1})}{(f({x_{i}})-f(x_{i-2}))(f(x_{i})-f(x_{i-1}))}\cdot x_{i}+\frac{f(x_{i-2})f(x_{i})}{(f(x_{i-1})-f(x_{i-2}))(f(x_{i-1})-f(x_{i}))}\cdot x_{i-1}

布伦特方法:

初始化区间(a_{0},b_{0})使得f(a_{0})\cdot f(b_{0})<0。其中b_{k}是上次迭代中的根估计值。如果\left | f(a_{0}) \right |<\left | f(b_{0}) \right |,那么赋值互换(我们认为对应函数值的绝对值较小的点更接近真正的根值)。

每次迭代包含四个点:

  1. b_{k}:为当前迭代的根估算值;
  2. a_{k}:对位点,即满足\left | f(a_{k}) \right |<\left | f(b_{k}) \right |f(a_{k})\cdot f(b_{k})<0的值。
  3. b_{k-1}:上一次迭代的根估算值,第一次迭代设置为b_{k-1}=a_{0}
  4. b_{k-2}:上上此迭代的根估算值(不用初始化,在首次迭代过程中,不会用到他来进行判断,结尾进行赋值)。

有以下四个不等式:

\left | \delta \right |<\left | b_{k}-b_{k-1} \right |  ①

\left | \delta \right |<\left | b_{k-1}-b_{k-2} \right |  ②

\left | s-b_{k} \right |<\frac{1}{2}\left | b_{k}-b_{k-1} \right |  ③

\left | s-b_{k} \right |<\frac{1}{2}\left | b_{k-1}-b_{k-2} \right | ④

上次迭代为二分法且①为假;上次迭代为二分法且③为假;上次迭代为插值法且②为假;上次迭代为插值法且④为假;以插值法计算的临时值不在\frac{3a_{k}+b{k}}{4}b_{k} 中间,以上五个条件满足一个,那么本次迭代的值采用二分法,否则采用插值法。

而插值法的选择如下:如果三点各不同,则用二次插值;否则用线性插值。

本次迭代的临时值s作为区间的一个端点,另一个端点在a_{k}b_{k}中选择,二者作为a_{k+1},b_{k+1},且满足f(a_{k+1})\cdot f(b_{k+1})<0,|f(a_{k+1})|>|f(b_{k+1})|

 

 

 

 

 

 

 

 

 

这篇关于布伦特方法(Brent‘s method)---结合二分法、割线法和逆二次插值法的求根方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/620269

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

python 线程池顺序执行的方法实现

《python线程池顺序执行的方法实现》在Python中,线程池默认是并发执行任务的,但若需要实现任务的顺序执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录方案一:强制单线程(伪顺序执行)方案二:按提交顺序获取结果方案三:任务间依赖控制方案四:队列顺序消

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定