切换科目
重点科目
主要科目
次要科目
科数网
首页
刷题
学习
VIP会员
赞助
组卷
集合
教材
VIP
写作
游客,
登录
注册
在线学习
数值分析
第一篇 非线性方程的数值解法
二分法
最后
更新:
2026-06-15 06:12
查看:
13
次
纠错
评论(0)
课件
开VIP
二分法
第 2 章 非线性方程的数值解法 非线性科学是当今科学发展的一个重要研究方向,而非线性方程的求解是其中不可缺少的内容。然而,仅有极少数简单的非线性方程有显式解(即存在精确解的计算公式)。由于现实世界应用中大量非线性方程没有显式解或显式解难以计算,因此迫切需要发展计算非线性方程数值解(精确解的数值近似值)的方法。 本章我们主要研究求解如下单变量的非线性方程 $$ \begin{equation*} f(x)=0, \tag{2.1} \end{equation*} $$ 其中满足上述非线性方程的 $x^*$ 称为非线性方程的解、根或零点。 2.1 二 分 法 本节我们以最简单的二分法为例开始介绍求解非线性方程的数值方法. 在寻找非线性方程的数值解之前先研究非线性方程解的存在性.下面的零点存在定理回答了非线性方程解的存在性并给出了含解的区间。 定理2.1(零点存在定理)若函数 $f(x)$ 在区间 $[a, b]$ 上连续,且 $f(a)$ 与 $f(b)$ 异号,则至少存在一点 $x^*$ 属于 $(a, b)$ 使得 $f\left(x^*\right)=0$ ,即方程 $f(x)=0$ 在 $(a, b)$ 内至少有一个解。 已知含解区间,下一步是如何去寻找足够精度的数值解?二分法的思路是不断二分含解的区间,从而逐步逼近精确解。二分法的步骤简述如下(示意图如图 2.1所示)。 设 $[a, b]$ 为含解区间,且只有唯一解.记 $\left[a_0, b_0\right] \triangleq[a, b]$ ,计算含解区间 $\left[a_0, b_0\right]$ 的中点 $x_0=\frac{1}{2}\left(a_0+b_0\right)$ 并检验 $f\left(x_0\right)$ 的符号.若 $f\left(x_0\right)=0$ ,则 $x_0$ 是非线性方程的解;若 $f\left(a_0\right) f\left(x_0\right)<0$ ,则记新含解区间为 $\left[a_1, b_1\right] \triangleq\left[a_0, x_0\right]$ ;若 $f\left(x_0\right) f\left(b_0\right)<0$ ,则记新含解区间为 $\left[a_1, b_1\right] \triangleq\left[x_0, b_0\right]$ .经过一次二分,新含解区间长度为原含解区间长度的一半.不断二分含解区间产生含解区间序列 $\left\{\left[a_k, b_k\right]\right\}$ 和区间中点序列 $\left\{x_n\right\}$ ,含解区间序列满足 $$ \left[a_0, b_0\right] \supset\left[a_1, b_1\right] \supset \cdots \supset\left[a_k, b_k\right] \supset \cdots, $$ 其中区间 $\left[a_k, b_k\right]$ 长度为上一区间 $\left[a_{k-1}, b_{k-1}\right]$ 长度一半。区间中点序列 $\left\{x_k\right\}$ 为精确解 $x^*$ 的近似解序列。二分法示意图如图 2.1 所示.  对于 $k \geqslant 1$ ,不难归纳出 $$ b_k-a_k=\frac{1}{2^k}(b-a) . $$ 我们进一步有如下不等式刻画近似解与精确解的近似程度 $$ \begin{equation*} \left|x_k-x^*\right| \leqslant \frac{1}{2}\left(b_k-a_k\right)=\frac{1}{2^{k+1}}(b-a) . \tag{2.2} \end{equation*} $$ 上式从理论上保证了二分法的收敛性,即随着 $k$ 趋近无穷,$x_k$ 趋近 $x^*$ . 我们来看一个具体的例子。 例 2.1 二分法求非线性方程 $f(x)=x^3+x-1$ 在区间 $[0,1]$ 上的解. 解 由于函数 $f(x)$ 在区间 $[0,1]$ 上连续且 $f(0) f(1)=(-1) \times(1)=-1<0$ ,由零点存在定理知 $f(x)$ 在区间 $(0,1)$ 上至少存在一个解. 下面计算其数值解.记 $\left[a_0, b_0\right] \triangleq[0,1]$ ,计算含解区间 $[0,1]$ 的中点 $x_0=1 / 2$ 并检验函数在中点的符号 $f(1 / 2)<0$ .由于 $f(1 / 2) f(1)<0$ ,则新含解区间为 $\left[a_1, b_1\right] \triangleq[1 / 2,1]$ .继续计算含解区间 $[1 / 2,1]$ 的中点 $x_1=3 / 4$ 并检验函数在中点的符号 $f(3 / 4)>0$ 。由于 $f(1 / 2) f(3 / 4)<0$ ,则新含解区间为 $\left[a_2, b_2\right] \triangleq[1 / 2,3 / 4]$ .表 2.1 展示了二分法求解上述非线性方程的数值结果。我们将区间 $\left[a_9, b_9\right]$ 中点 $x_9=0.6826$ 作为精确解 $x^*$ 的近似解.如果需要更高精度,可以进行更多次的二分.   二分法虽然思想简单却蕴含了迭代法逐步逼近的思想,即不断二分缩小含解区间,则区间中点序列逐步逼近精确解。二分法的优点是简单易于实现(每步仅需校验函数值符号),但具有收敛速度慢和不能求复数解等不足。下一节我们将更加系统地研究求解非线性方程数值解的不动点迭代框架。 ## 二分法的通俗理解 二分法的核心逻辑可以通俗理解为 **“猜数字游戏的最优策略”**,它是一种在**有序区间**内,通过不断**对半缩小范围**来找到目标值的方法。 ### 生活中的例子:猜1~100的数字 假设我心里想一个1~100之间的整数,你要猜这个数,我只会告诉你“大了”或“小了”。 1. **第一步**:你先猜中间值 **50**。 - 我如果说“大了”,说明目标数在 **1~49** 之间; - 我如果说“小了”,说明目标数在 **51~100** 之间。 这一步直接把猜测范围缩小了一半。 2. **第二步**:在新的区间里再取中间值。 - 比如范围是1~49,中间值是25,再猜25; - 再根据“大了/小了”的反馈,继续把范围对半分。 3. **重复操作**:每次都猜当前区间的中间值,每次都排除一半的可能,直到猜中数字。 这个过程就是**二分法**,它的优势是效率极高——猜1~100的数字,最多只需要7次就能确定答案(因为 $2^7=128>100$)。 数学/编程中的二分法:找方程的根或有序数组的元素 在数学和编程里,二分法的应用需要满足一个**前提条件**: - 找方程根时:函数 $f(x)$ 在区间 $[a,b]$ 上连续,且 $f(a)\cdot f(b)<0$(区间两端点函数值一正一负,说明中间必有一个根)。 - 找数组元素时:数组必须是**有序**的(升序或降序)。 ### 以找方程 $f(x)=x^2-2=0$ 的正根(即 $\sqrt{2}\approx1.414$)为例 1. 确定初始区间:因为 $f(1)=-1<0$,$f(2)=2>0$,所以根在 $[1,2]$ 之间。 2. 取中间值 $x_0=\frac{1+2}{2}=1.5$,计算 $f(1.5)=2.25-2=0.25>0$。 因为 $f(1)\cdot f(1.5)<0$,所以根在 $[1,1.5]$ 之间。 3. 再取中间值 $x_1=\frac{1+1.5}{2}=1.25$,计算 $f(1.25)=1.5625-2=-0.4375<0$。 因为 $f(1.25)\cdot f(1.5)<0$,所以根在 $[1.25,1.5]$ 之间。 4. 重复上述步骤,区间会越来越小,当区间的长度小于我们设定的精度(比如0.001)时,就可以用区间内的任意值作为 $\sqrt{2}$ 的近似解。 ## 二分法数学原理 在求方程近似根的方法中最直观、最简单的方法是二分法.二分法以连续函数的介值定理为基础。考虑方程(2.1)。设函数 $f(x) \in C[a, b], f(a) f(b)<0$ ,且方程(2.1)在 $[a, b]$ 上存在唯一根 $x^*$ 。二分法的基本思想是用对分区间的方法,根据分点处函数 $f(x)$ 值的符号逐步将有根区间缩小,使在足够小的区间内方程有且仅有一根. 为叙述方便起见,记 $a_0=a, b_0=b$ 。用中点 $$ x_0=\frac{1}{2}\left(a_0+b_0\right) $$ 将区间 $\left[a_0, b_0\right]$ 分成两个小区间 $\left[a_0, x_0\right]$ 和 $\left[x_0, b_0\right]$ 。计算 $f\left(x_0\right)$ ,若 $f\left(x_0\right)=0$ ,则 $x_0$ 为 $f(x)=0$ 的根,求解结束;否则 $f\left(a_0\right) f\left(x_0\right)<0$ 和 $f\left(x_0\right) f\left(b_0\right)<0$ 两式中有且仪有一式成立。若 $f\left(a_0\right) f\left(x_0\right)<0$ ,令 $a_1=a_0, b_1=x_0$ ;若 $f\left(x_0\right) f\left(b_0\right)<0$ ,令 $a_1=x_0, b_1=b_0$ 。不论上面哪种情况均有 $f\left(a_1\right) f\left(b_1\right)<0$ ,于是 $\left[a_1, b_1\right]$ 成为新的有根区间,$\left[a_0, b_0\right] \supset\left[a_1, b_1\right]$ ,且 $\left[a_1, b_1\right]$ 的长度为 $\left[a_0, b_0\right]$ 长度的一半.对新的有根区间 $\left[a_1, b_1\right]$ 可施行同样的方法,于是得到一系列有根区间 $$ \left[a_0, b_0\right] \supset\left[a_1, b_1\right] \supset\left[a_2, b_2\right] \supset \cdots \supset\left[a_k, b_k\right], $$ 其中每一个区间的长度都是前一个区间长度的一半,最后一个区间的长度为 $$ b_k-a_k=\frac{1}{2^k}(b-a) . $$ 如果取最后一个区间 $\left[a_k, b_k\right]$ 的中点 $x_k=\frac{1}{2}\left(a_k+b_k\right)$ 作为 $f(x)=0$ 根的近似值,则有误左1中圢扎 $$ \left|x^*-x_k\right| \leqslant \frac{1}{2}\left(b_k-a_k\right) \leqslant \frac{1}{2^{k+1}}(b-a) . $$ 对于所给精度 $\varepsilon$ ,若取 $k$ 使得 $\frac{1}{2^{k+1}}(b-a) \leqslant \varepsilon$ ,则有 $\left|x^*-x_k\right| \leqslant \varepsilon$ .  `例` 用二分法求 方程 $f(x)=x^3+4 x^2-10=0$ 在区间 $[1,1.5]$ 上的根. (1)要得到具有 3 位有效数字的近似根,需做几次二分? (2)用二分法求出具有 3 位有效数字的近似根。 解 简单计算可得 $f(1)=-5, f(1.5)=2.375$ ,且当 $x \in[1,1.5]$ 时,由 $f^{\prime}(x)=3 x^2+8 x>0$ 知方程 $f(x)=0$ 在 $[1,1.5]$ 内有唯一根. (1)因为 $\varepsilon=\frac{1}{2} \times 10^{-2}, a=1, b=1.5$ ,由 $\frac{b-a}{2^{k+1}} \leqslant \varepsilon$ 解得 $$ k \geqslant \frac{2}{\lg 2}-1=5.64 $$ 所以取 $k=6$ ,即做 6 次二分,就可得到具有 3 位有效数字的近似根. (2)记 $a_0=1, b_0=1.5$ .令 $x_0=\frac{1}{2}\left(a_0+b_0\right)=1.25$ ,因为 所以取 $a_1=1.25, b_1=1.5$ .依法继续,并将所得计算结果列于表 2.1:  观察上表可知具有 3 位有效数字的近似根为 $x_6=1.36328125$ . 二分法虽然思想简单含了迭代法步逼近的思想,即不断二分小含解区 间,则区间中点序列步逼近精确解. 二分法的点是简单于实现(步仅需校验函数值符号),但具有收敛速度和不能求复数解等不足. 下一节我们将加系统地研究求解非线性方程数值解的不动点迭代. ## 核心代码实现 ``` import math # 定义要求解的非线性函数 f(x)=0 def f(x): return x**3 - x - 1 # 示例方程 # 初始化参数 a = 1 b = 2 eps = 1e-6 # 精度 max_iter = 100 iter_count = 0 # 核心二分循环 while b - a > eps and iter_count < max_iter: mid = (a + b)/2 if f(a)*f(mid) < 0: b = mid else: a = mid iter_count += 1 # 输出结果 root = (a+b)/2 print(f"近似根:{root:.8f},迭代次数:{iter_count}") ``` ## 二分法的优缺点(必知,面试/工程常用) 优点(优势突出) 1. **收敛性绝对保证**:只要满足「连续+端点异号」的前提,二分法**一定收敛**到根,不会发散; 2. **算法逻辑简单**:无复杂公式,易理解、易实现,无参数调优难度; 3. **稳定性极强**:对函数的光滑性无要求(哪怕函数不可导也能求解); 4. **计算量可控**:迭代次数可通过精度提前预估。 缺点(适用场景限制) 1. **只能求解一元方程**:这是最大限制,原生二分法无法直接求解多元非线性方程组; 2. **只能找区间内的一个根**:如果区间内有多个根,二分法只能找到其中一个; 3. **收敛速度中等**:是「线性收敛」,比牛顿法(平方收敛)慢,但比不动点迭代法快; 4. **无法求复根和重根**:只能求解实数域的单根。
科数题库(单机版)
会议室预约系统(book)
今日还可看
0
篇 未注册用户每天查看4篇,
注册
用户每天8篇,
开通VIP
会员无限制查看。
免费注册
《高等数学》难点解析
高数教程
泰勒公式
切线与法线
切平面与法平面
驻点·拐点·极值点·零点
间断点
渐进线
瑕积分
欧拉方程
伯努利方程
Abel 收敛定理
偏导数的几何意义
偏导数的几何意义
梯度
数量场与向量场
多元函数极值
拉格朗日算子
通量与散度
环流量与旋度
格林公式
高斯公式
斯托克斯公式
三大公式比较
傅里叶级数
极坐标微元
点法式方程
变上限定积分
X型计算面积
Y型计算面积
微分的意义
渐近线
间断点
y''+py'+qy=f(x)方程
高斯
黎曼
傅里叶变换(复数)
拉普拉斯变换(复数)
《线性代数》难点解析
线代教程
近世代数对数学的整体思考
线性的意义
矩阵乘法(列视角)
矩阵乘法(行视角)
矩阵左乘
矩阵右乘
逆矩阵求解方程组
阶梯形矩阵的求法
方程组解的判定
四阶行列式的计算
线性变换的意义
线性空间
向量组的等价
线性空间的几何意义
基础解系的求法
施密特正交化
特征值与特征向量的意义
矩阵相似的几何意义
矩阵可对角化的理解
秩的意义(向量版)
秩的意义(方程版)
二次型的意义
《概率论与数理统计》难点解析
概率教程
置信区间与上a分位数
概率中的“取”与“放”
贝叶斯公式
全概率公式
泊松分布
指数分布
伽玛分布
二维密度图的意义
卷积的意义
相关系数的意义
k阶矩是与矩母函数
卡方分布的作用
单正态区间估计理解
假设检验理解
切比雪夫不等式
中心极限定理
上一篇:
没有了
下一篇:
不动点迭代法
本文对您是否有用?
有用
(
0
)
无用
(
0
)
赞助:
知乎 Mathhub
启明星
商务合作
赞助本站
科数网
是专业的数学网站,为您提供题库与教程 版权所有 禁止镜像
部分内容采用AI辅助生成,请注意识别
如果页面无法显示请联系 18155261033 或 983506039@qq.com