当前位置: 首页 > java >正文

数值分析——非线性方程与方程组的数值解法之二分法

非线性方程与方程组的数值解法——二分法

主要讨论非线性方程,也就是f(x)=0的情形,并且解都是实数,虚根和复根不属于讨论的范围。

f(x) = 0 ,其中x∈R,f(x)是连续函数,如果存在一个 x* 可以使得 f(x*) = 0 ,则我们就说x*是方程f(x)=0的根,从函数角度来说就是函数f(x)的零点。

进一步的,如果有: f(x) = (x - x*)m g(x) ,m∈N+(也就是m∈正整数),并且 g(x) ≠ 0 ,当 m = 1时,x* 就是这个方程的单根,或者也叫做函数 f(x) 的单零点,当 m ≥ 2 时,x* 就是方程的m重根,或者叫做函数 f(x) 的m重零点。
一般来讲,方程的最高次方其实就代表着有多少个解。

求根的步骤是先用图解法、解析法、定步长搜索法、近似方程法等方法搜索到根,再进一步将得到的根进行精确化。

或者也可以说第一步是对根进行隔离,得到隔离区间,第二步就是将近似值进行精确化。

二分法

逐步将含根的区间进行二等分,通过区间端点的函数值符号来进一步搜索含根区间,就这样反复进行区间分半后,最终使含根区间长度缩小到充分小,在这样一个足够小的区间内,方程有且仅有一个根,从而就可以求得满足给定精度要求的根的近似值。

图例说明:
f(x)=0,f(x) 是连续函数,假设 f(a) > 0,f(b) < 0, 那么 f(a) f(b) <0,此时选取a 与 b 的中点,假设a,b的中点为 a1,也就是a1 = (a+b)/2,先验证a1是否是零点,计算方程在a1处的值是否为0,
在这里插入图片描述
如果是零点就直接找到了方程的根,不是方程的零点时,就要看f(a1) 的正负号了,假设f(a1) >0,那么有 f(a1) f(b) <0,此时根的区间就重新选取为 [ a1,b],为了方便后面步骤的观察,重新令 b=b1,那么:

在这里插入图片描述
此时就有 f(a1) f(b1) <0,根在区间[ a1,b1]中,再取a1,b1的中点,假设为a2,也就是a2=(a1+b1)/2,再次判断a2这个点处是否是零点,(一般情况下没有那么简单,试一两次就直接试出来根的),不是根就再次判断a2处的函数值正负号,假设f(a2)>0,那么就有f(a2)f(b1)<0,根就在[a2,b1] 的区间中,令b1 = b2,那么:
在这里插入图片描述
得到一个新的根的隔离区间就是[a2,b2],以此类推,越分最后得到的区间就会越来越小,假设分了第 k 次后得到的根的隔离区间为[ak,bk]:
在这里插入图片描述
此时,确定x*在这个区间内,在二分的过程中,每一次区间长的变化就是:

b - a,(b-a)/ 2,(b-a)/ 22,(b-a)/ 23···(b-a)/ 2k,精确值x的近似取值就是:x = (aK + bk ) / 2,由于x,x*都是在[ak,bk] 区间内,

在这里插入图片描述
因此就有:
|x*- x| ≤ (bk - ak)/ 2
又因为一共分了k 次,所以[ak,bk]这个区间的长度就是(b - a)/ 2k,那么x与x 的区间长度关系就是:
|x
- x| ≤(b - a)/ 2k+1
又因为精确度是已知的(题目中都会具体给出要求):|x*- x| ≤ γ,这时就可以得到一个关系式:
(b - a)/ 2k+1 ≤ γ,里面一共就只有一个未知数k,计算出来即可。

以上是理论理解部分,接下来上个🌰(例子),实战一下…
eg:
用二分法求方程 f(x) = x3 - x - 1 = 0 在区间[1,2]内的实根,要求精确到10-2,求一共需要多少次二分,并求出具有三位有效数的近似根。

有时候题目中也会说:要得到三位有效数字,意思是一样的,因为是三位有效数字,根的区间是(1,2),所以根的形式就是1.xxxxx,故根的第一位肯定不是0,所以要往小数点后面再数两位,最后确定根的形式就是1.xx,所以就有γ≤10-2

解:
(1)首先,由于f(1)<0,f(2)>0,故在[1,2]内一定有一个根,又因为在区间[1,2]内f ’ (x)= 3x2-1>0,因此[1,2]区间内有且仅有一个实根。
根据公式:
(b - a)/ 2k+1 ≤ γ=10-2
此时,a=1,b=2,所以代入之后就可以得到:
1/ 2k+1 ≤ 10-2
解出k=6,因此就意味着需要6次二分法。
求解过程如下图
在这里插入图片描述

(2)按照二分的步骤,比较f(x)的正负号可以可到如下图所示的过程:

在这里插入图片描述

未完待更哦~~~
:)

http://www.xdnf.cn/news/19469.html

相关文章:

  • APB协议​​ 构建一个完整的 ​​UVM验证VIP Agent介绍类的要素
  • 壁纸、logo、短视频去水印
  • 前端常见安全问题 + 防御方法 + 面试回答
  • Qt QML连接数据库如何解决重复创建连接问题
  • 大话 IOT 技术(3) -- MQTT篇
  • Qt中使用 GStreamer 播放视频文件
  • HikariCP vs DBCP2 vs Tomcat JDBC:多场景数据库连接池方案对比与实践指南
  • 局域网中使用Nginx部署https前端和后端
  • Qt中解析XML文件
  • word中插入字符后会自动删除后面的字符
  • Visual Studio Code中launch.json的解析笔记
  • Prometheus之启用--web.enable-remote-write-receiver
  • 对于一个多层感知机,参数初始化的时候不是已经把权重的范围根据方差进行优化过了,为什么还要进行正则化惩罚过大权重
  • springboot整合minio实现上传下载搭建minio
  • Unity转抖音小游戏重点摘记
  • 学生请假就餐系统
  • 计算机网络---http(超文本传输协议)
  • XPlayer播放器APP:安卓平台上的全能视频播放器
  • LeetCode每日一题,2025-8-31
  • TFS-2002《Analysis and Efficient Implementation of a Linguistic Fuzzy C-Means》
  • 【量化回测】backtracker整体架构和使用示例
  • Rsync 数据同步工具及实时同步配置
  • SAP PP中的MRP
  • 【OpenGL】LearnOpenGL学习笔记18 - Uniform缓冲对象UBO
  • 模型系列(篇三)-Llama
  • vscode克隆远程代码步骤
  • 合约服务架构-OOP 方式
  • leetcode 371 两个整数之和
  • 微软开源TTS模型VibeVoice,可生成 90 分钟4人语音
  • TFS-1996《The Possibilistic C-Means Algorithm: Insights and Recommendations》