7.1方程求根与二分法
非线性方程求根开篇知识点深度讲解
各位同学,我从事数值分析与科学计算的教学与研究工作已有多年,今天我们逐字逐句、由浅入深地拆解非线性方程求根的核心基础内容。这部分是整个非线性科学计算的基石,无论是工程仿真、物理建模、金融定价,最终都会落到非线性方程的求解上,我们不仅要记住定义,更要吃透每一个定理的推导、每一个概念的本质。
一、非线性问题的核心地位与线性→非线性的本质跃迁
我们先理解开篇的背景论述,它不是一句空话,而是整个学科的出发点。
我们低年级学习的线性代数、线性微分方程,本质上都是对实际问题的线性近似:比如材料力学的胡克定律是弹性范围内的线性近似,电路的欧姆定律是线性元件的近似。但当我们处理大变形结构、非线性电路、湍流流体、量子多体问题时,线性模型完全失效,必须用非线性模型描述——这就是非线性科学成为21世纪科技支柱的核心原因:要解决更贴合实际的问题,就必须直面非线性。
而所有非线性模型,无论是无限维的偏微分方程(如流体Navier-Stokes方程),还是有限维的非线性系统,最终要在计算机上求解,都必须离散化,转化为单个非线性方程或非线性方程组的求解。这是数值计算的核心:计算机只能处理有限、离散的数值运算,无论多复杂的非线性问题,最终都会落到\(f(x)=0\)这个最基础的式子上。
这里必须强调:从线性到非线性,是质的飞跃,而非量的变化。
- 线性方程的核心是叠加原理:若\(x_1,x_2\)是线性方程的解,其线性组合也是解,解空间是线性空间,解的情况只有无解、唯一解、无穷多解(线性流形)三种;
- 非线性方程完全无叠加原理,解的结构极其复杂:可以无解、唯一解、有限多解、无穷多解,甚至解的分布是混沌的。正因为性质有本质区别,线性方程的求解方法完全不能照搬,必须专门研究非线性方程的数值解法。
二、单变量非线性方程与根(零点)的核心定义
本章的研究对象是单变量非线性方程,标准形式为:
我们先明确这个式子每一个符号的数学意义:
- 自变量:\(x \in \mathbb{R}\),即我们仅研究实数域上的根,复数根不在本章讨论范围内;
- 函数光滑性:\(f(x) \in C[a,b]\),表示\(f(x)\)在闭区间\([a,b]\)上连续。\([a,b]\)可以是有限区间(如\([0,1]\)),也可以是无穷区间(如\([0,+\infty)\)、\((-\infty,+\infty)\))。这里要求连续,是因为后续所有数值方法,都建立在连续函数的性质(如介值定理)之上;
- 根(零点)的定义:若存在实数\(x^*\)满足\(f(x^*)=0\),则称\(x^*\)是方程(7.1)的根,也叫函数\(f(x)\)的零点。
这里要讲透两个概念的本质:“方程的根”和“函数的零点”,是同一个数学对象的两种表述,仅视角不同:
- 代数视角:找让等式\(f(x)=0\)成立的未知数取值,叫根;
- 函数图像视角:找函数\(y=f(x)\)与x轴交点的横坐标,叫零点。
二者完全等价,后续会交替使用,无需混淆。
三、重根的定义、充要条件与严谨证明
这是本节的核心难点,也是后续数值方法收敛性分析的基础,我们必须把定义和定理证明完全吃透。
3.1 重根的代数定义
若函数\(f(x)\)可分解为如下形式:
其中:
- \(m\)为正整数(\(m=1,2,3,\dots\));
- \(g(x^*)\neq0\),即\(g(x)\)在\(x=x^*\)处不为0;
则称\(x^*\)是方程(7.1)的m重根,也叫\(f(x)\)的m重零点。
特别地,当\(m=1\)时,称\(x^*\)为单根(单零点)。
举直观例子:\(f(x)=x^3-3x^2+3x-1=(x-1)^3\),这里\(x^*=1\),\(m=3\),\(g(x)=1\),\(g(1)=1\neq0\),因此\(x=1\)是\(f(x)\)的3重根。
3.2 重根的充要条件与严谨证明
定理:若\(f(x)\)在\(x=x^*\)的邻域内充分光滑(即具有直到\(m\)阶的连续导数),则\(x^*\)是\(f(x)\)的\(m\)重零点的充要条件为:
即:函数在\(x^*\)处,0阶到\(m-1\)阶导数全为0,第\(m\)阶导数不为0。
这个定理是连接重根代数定义与微积分性质的桥梁,我们分必要性和充分性两部分严谨证明。
(1)必要性证明(已知是m重根→证明导数条件成立)
已知:\(f(x)=(x-x^*)^m g(x)\),\(g(x^*)\neq0\),\(f(x)\)充分光滑。
要证:\(f(x^*)=f'(x^*)=\dots=f^{(m-1)}(x^*)=0\),且\(f^{(m)}(x^*)\neq0\)。
证明过程:
我们使用莱布尼茨乘积求导公式:两个可导函数\(u(x)\)和\(v(x)\),乘积的\(n\)阶导数为:
其中\(C_n^k = \frac{n!}{k!(n-k)!}\)为组合数,\(u^{(0)}(x)=u(x)\),\(v^{(0)}(x)=v(x)\)。
令\(u(x)=(x-x^*)^m\),\(v(x)=g(x)\),则\(f(x)=u(x)\cdot v(x)\)。
先求\(u(x)=(x-x^*)^m\)的\(k\)阶导数:
- 当\(k \leq m\)时:\(u^{(k)}(x) = \frac{m!}{(m-k)!} \cdot (x-x^*)^{m-k}\)
- 当\(k > m\)时:\(u^{(k)}(x) = 0\)(多项式导数阶数超过次数后为0)
分两种情况讨论\(f^{(n)}(x^*)\):
① 当\(n < m\)时:
对于莱布尼茨公式中的每一项\(k\)(\(0\leq k\leq n\)),都有\(k \leq n < m\),因此\(m-k \geq m-n \geq 1\),代入\(x=x^*\)得:
即莱布尼茨公式的每一项都为0,因此\(f^{(n)}(x^*)=0\),也就证明了\(f(x^*)=f'(x^*)=\dots=f^{(m-1)}(x^*)=0\)。
② 当\(n = m\)时:
莱布尼茨公式中,仅当\(k=m\)时,\(u^{(m)}(x^*) = \frac{m!}{(m-m)!} \cdot (x^*-x^*)^{0} = m!\),其余所有\(k < m\)的项,\(u^{(k)}(x^*)=0\)。
因此\(f^{(m)}(x^*)\)的展开式仅剩\(k=m\)的一项:
根据重根定义,\(g(x^*)\neq0\),因此\(f^{(m)}(x^*)=m! \cdot g(x^*) \neq 0\)。
至此,必要性得证。
(2)充分性证明(已知导数条件成立→证明是m重根)
已知:\(f(x^*)=f'(x^*)=\dots=f^{(m-1)}(x^*)=0\),\(f^{(m)}(x^*)\neq0\),且\(f(x)\)充分光滑。
要证:\(x^*\)是\(f(x)\)的\(m\)重零点,即\(f(x)\)可分解为\((x-x^*)^m g(x)\),且\(g(x^*)\neq0\)。
证明过程:
因为\(f(x)\)在\(x^*\)的邻域内有直到\(m\)阶的连续导数,根据泰勒定理,可将\(f(x)\)在\(x=x^*\)处做\(m\)阶泰勒展开(带拉格朗日余项):
其中\(\xi\)介于\(x\)和\(x^*\)之间。
根据已知条件,所有\(k=0,1,\dots,m-1\)的\(f^{(k)}(x^*)=0\),因此泰勒展开的前\(m\)项全部为0,展开式简化为:
令\(g(x) = \frac{f^{(m)}(\xi)}{m!}\),注意\(\xi\)是\(x\)的函数,当\(x \to x^*\)时,\(\xi \to x^*\)。
因\(f^{(m)}(x)\)连续,因此:
根据已知条件\(f^{(m)}(x^*)\neq0\),因此\(\lim_{x \to x^*} g(x) \neq 0\),即在\(x^*\)的足够小邻域内,\(g(x^*) \neq 0\),完全满足重根定义的条件。
因此\(f(x)=(x-x^*)^m g(x)\),且\(g(x^*)\neq0\),\(x^*\)是\(f(x)\)的\(m\)重零点。
至此,充分性得证。
验证例子:\(f(x)=x^2-2x+1\),\(x^*=1\)。
- \(f(1)=0\),\(f'(x)=2x-2\),\(f'(1)=0\),\(f''(x)=2\),\(f''(1)=2\neq0\),符合\(m=2\)的充要条件,与代数分解\((x-1)^2\)完全一致。
四、代数方程与超越方程的分类与核心特性
我们根据\(f(x)\)的类型,将非线性方程分为代数方程(多项式方程)和超越方程两大类,二者特性有本质区别。
4.1 代数方程(多项式方程)
定义
若\(f(x)\)是\(n\)次多项式,即:
其中\(a_0 \neq 0\)(保证是\(n\)次多项式),\(a_i (i=0,1,\dots,n)\)均为实数,则方程\(f(x)=0\)称为n次代数方程。
核心定理与特性
- 代数基本定理:\(n\)次代数方程在复数域上有且仅有\(n\)个根(含重根,\(m\)重根算\(m\)个根),这是代数学的基础,说明代数方程的根的个数有限,最多不超过次数\(n\);
- 求根公式的局限性:
- \(n=1\)(一次方程):求根公式\(x=-\frac{a_1}{a_0}\),唯一解,手算即可;
- \(n=2\)(二次方程):求根公式\(x=\frac{-a_1\pm\sqrt{a_1^2-4a_0a_2}}{2a_0}\),应用广泛;
- \(n=3\)(三次方程)有卡尔丹公式,\(n=4\)(四次方程)有费拉里公式,但公式极其复杂,手算极易出错,完全不适合工程计算;
- \(n\geq5\):根据阿贝尔-鲁菲尼定理,5次及以上代数方程不存在通用求根公式,即无法用系数的有限次四则运算和开方运算表示根。
因此,\(n\geq3\)的代数方程,几乎都采用数值方法求根。
4.2 超越方程
定义
若\(f(x)\)中包含超越函数(非多项式函数),如指数函数\(e^x\)、对数函数\(\ln x\)、三角函数\(\sin x\)、反三角函数\(\arctan x\)等,则方程\(f(x)=0\)称为超越方程。
核心特性
- 解的个数可无穷多:如教材例子\(e^{-x/10}\sin10x=0\),因\(e^{-x/10}\)恒大于0,方程等价于\(\sin10x=0\),解为\(x=\frac{k\pi}{5}\)(\(k=0,\pm1,\pm2,\dots\)),实数域上有无穷多解;
- 无通用求根公式:超越方程没有统一求根公式,甚至解的存在性、个数都很难通过解析方法判断,必须结合函数的单调性、周期性、极限等性质分析;
- 必须限定求解区间:正因解的个数可能无穷多,讨论超越方程的求解,必须明确指定求解区间\([a,b]\),不同区间的解的个数、取值完全不同;
- 只能用数值方法求解:绝大多数超越方程无解析解,只能通过数值方法求满足精度要求的近似解。
五、非线性方程数值求解的核心逻辑与二分法的引入
前面我们已经明确:无论是高次代数方程,还是超越方程,绝大多数都没有解析解,没有直接求根公式,因此必须采用数值方法求解。
数值方法求解非线性方程的核心思路是迭代法:
- 先给出根\(x^*\)的一个初始近似值\(x_0\);
- 设计固定的迭代格式\(x_{k+1}=\varphi(x_k)\),不断更新近似值,得到序列\(\{x_k\}\);
- 当序列收敛到\(x^*\),且近似值的误差满足精度要求时,停止迭代,得到根的近似解。
但迭代法有一个核心难点:初始值的选取。若初始值\(x_0\)选得不好,离根\(x^*\)太远,迭代序列可能不收敛、收敛到其他根,甚至发散到无穷大。
解决这个问题的思路,就是分而治之:先确定根所在的区间(有根区间),再不断把区间缩小,直到区间长度小于精度要求,此时区间内的任意一点,都可以作为根的近似值。
这个思路,就是二分法的核心思想。二分法是最简单、最鲁棒的非线性方程求根方法,理论基础是闭区间上连续函数的介值定理,完全解决了迭代法初始值难选的问题,是工程上最常用的“保底”求根方法。
六、核心知识点归纳总结表
| 知识点分类 | 核心定义/定理 | 关键说明与补充 |
|---|---|---|
| 非线性问题的核心地位 | 实际问题大多为非线性,线性模型是非线性问题的近似;计算机求解需转化为非线性方程(组)的求解 | 线性→非线性是质的飞跃:非线性无叠加原理,解的结构复杂,求解方法与线性方程完全不同 |
| 单变量非线性方程标准形式 | \(f(x)=0\),\(x\in\mathbb{R}\),\(f(x)\in C[a,b]\)(\([a,b]\)可为无穷区间) | \(C[a,b]\)表示\(f(x)\)在\([a,b]\)上连续,是后续数值方法的理论前提 |
| 根(零点)的定义 | 若实数\(x^*\)满足\(f(x^*)=0\),则\(x^*\)是方程的根,也是函数\(f(x)\)的零点 | 方程的根(代数视角)与函数的零点(函数图像视角)完全等价 |
| 重根的代数定义 | 若\(f(x)=(x-x^*)^m g(x)\),\(m\)为正整数,\(g(x^*)\neq0\),则\(x^*\)是\(m\)重根;\(m=1\)时为单根 | \(g(x^*)\neq0\)是核心条件,保证\((x-x^*)\)的因子恰好有\(m\)个 |
| 重根的充要条件(微积分形式) | \(f(x)\)充分光滑时,\(x^*\)是\(m\)重零点\(\iff f(x^*)=f'(x^*)=\dots=f^{(m-1)}(x^*)=0\),且\(f^{(m)}(x^*)\neq0\) | 连接代数定义与微积分性质的核心定理,是后续收敛性分析的基础,需掌握充分性与必要性证明 |
| 代数方程(多项式方程) | \(f(x)\)为\(n\)次多项式:\(f(x)=a_0x^n+\dots+a_n\),\(a_0\neq0\) | 1. 代数基本定理:复数域上有且仅有\(n\)个根(含重根); 2. \(n\geq5\)无通用求根公式,\(n\geq3\)需用数值方法求解 |
| 超越方程 | \(f(x)\)包含指数、对数、三角等超越函数的方程 | 1. 解的个数可无穷多,必须限定求解区间\([a,b]\); 2. 无通用求根公式,只能用数值方法求解 |
| 非线性方程数值求解核心思路 | 迭代法:给定初始近似值,通过迭代格式更新近似值,直到满足精度要求 | 核心难点是初始值的选取,初始值不当会导致迭代不收敛 |
| 二分法的引入逻辑 | 分而治之:先确定有根区间,再不断缩小区间,直到区间长度小于精度要求 | 理论基础是连续函数的介值定理,鲁棒性强,无初始值选取难题,是最基础的求根方法 |
二分法知识点深度讲解(资深高级研究员版)
各位同学,我从事数值分析教学与科研工作六十余年,见过无数学生在复杂迭代法上栽跟头,根源就是没把二分法的底层逻辑吃透。二分法不仅是一个求根算法,更是理解非线性方程解的存在性、区间迭代思想的核心入口,是工程上所有非线性求根问题的“保底手段”。今天我们从底层定理出发,逐字逐句拆解原理、严谨推导证明、拆解算法步骤、分析实例与适用边界,把二分法讲深讲透。
一、二分法的理论基石:闭区间连续函数的零点存在定理
整个二分法的合法性与收敛性,完全建立在这个定理之上,必须先把核心前提讲死,不能有半点含糊。
1.1 零点存在定理(介值定理核心推论)
定理表述:若函数\(f(x)\)在闭区间\([a,b]\)上连续(即\(f(x)\in C[a,b]\)),且区间端点函数值满足\(f(a)\cdot f(b) < 0\),则在开区间\((a,b)\)内至少存在一点\(x^*\),使得\(f(x^*)=0\),即方程\(f(x)=0\)在\((a,b)\)内至少有一个,b)$内至少有一个实根。
定理的3个核心要点(缺一不可)
- 前提条件:\(f(x)\)在闭区间\([a,b]\)上连续。若函数不连续,定理直接失效,例如\(f(x)=1/x\)在\([-1,1]\)上\(f(-1)f(1)=-1<0\),但区间内无实根,因为\(x=0\)处函数间断。
- 符号条件:\(f(a)\cdot f(b)<0\),即端点函数值严格异号,说明函数从\(a\)到\(b\)必然穿过\(x\)轴。
- 结论边界:定理保证“至少一个实根”,而非“恰好一个”。若函数在区间内严格单调,则根唯一;若不单调,区间内可能存在多个根。
1.2 有根区间的定义与获取
基于零点存在定理,我们定义:满足\(f(a)f(b)<0\)的闭区间\([a,b]\),称为方程\(f(x)=0\)的有根区间。
工程上通常用逐次搜索法获取初始有根区间,结合例7.1讲解:
例7.1 求方程\(f(x)=x^3-11.1x^2+38.8x-41.77=0\)的有根区间。
我们以步长\(h=1\),从\(x=0\)开始逐点计算函数值符号:
| \(x\) | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|---|
| \(f(x)\)符号 | - | - | - | + | - | - | + |
函数值符号发生变化的区间为\([2,3]\)、\([3,4]\)、\([5,6]\),这三个区间均满足\(f(a)f(b)<0\),因此都是有根区间,说明该三次方程有3个实根。
逐次搜索法的局限性
步长是人为设定的:步长过大,会漏掉区间内的多个根(如区间内函数先负再正再负,端点同号,会被直接跳过);步长过小,计算量会急剧增大,不具备自动性。而二分法,就是解决这个问题的核心方法。
二、二分法的核心迭代原理与区间套构造
二分法的核心思想:对有根区间不断进行二等分,通过函数值符号判断,保留有根子区间、舍弃无根子区间,逐步将有根区间缩小,直到区间长度满足精度要求,此时区间中点即可作为根的近似值。
2.1 迭代过程的分步拆解
- 初始步:给定初始有根区间\([a_0,b_0]=[a,b]\),满足\(f(a_0)f(b_0)<0\),初始区间长度\(L_0 = b_0 - a_0 = b-a\)。
- 第1次二分:
- 取区间中点\(x_0 = \frac{a_0+b_0}{2}\),计算\(f(x_0)\);
- 符号判断与区间更新:
① 若\(f(x_0)=0\),则\(x_0\)就是方程的精确根,计算结束;
② 若\(f(x_0)\cdot f(a_0) > 0\),说明\(f(x_0)\)与\(f(a_0)\)同号,根不在左半区间\([a_0,x_0]\),而在右半区间\([x_0,b_0]\),令新的有根区间\([a_1,b_1]=[x_0,b_0]\);
③ 若\(f(x_0)\cdot f(a_0) < 0\),说明\(f(x_0)\)与\(f(a_0)\)异号,根在左半区间\([a_0,x_0]\),令新的有根区间\([a_1,b_1]=[a_0,x_0]\); - 新区间长度\(L_1 = b_1 - a_1 = \frac{b_0-a_0}{2} = \frac{L_0}{2}\),为初始区间的一半。
- 第k次二分:
对第\(k-1\)次得到的有根区间\([a_{k-1},b_{k-1}]\),重复上述步骤,得到新的有根区间\([a_k,b_k]\),满足:- \(f(a_k)\cdot f(b_k) < 0\),始终为有根区间;
- 区间长度\(L_k = b_k - a_k = \frac{b_{k-1}-a_{k-1}}{2} = \frac{b-a}{2^k}\)。
2.2 有根区间套的构造
反复二分后,我们会得到一个严格的闭区间套:
该区间套满足两个核心性质:
- 后一个区间完全包含在前一个区间内,所有区间都包含方程的根\(x^*\);
- 第\(k\)个区间的长度为初始区间的\(\frac{1}{2^k}\),当\(k\to\infty\)时,区间长度\(L_k \to 0\)。
这里必须联系数学分析中的区间套定理:若闭区间列\(\{[a_k,b_k]\}\)满足上述区间套条件,则存在唯一的点\(x^*\),属于所有的闭区间\([a_k,b_k]\),且\(\lim_{k\to\infty}a_k = \lim_{k\to\infty}b_k = x^*\)。而根据我们的构造,每个\([a_k,b_k]\)都是有根区间,因此这个唯一的\(x^*\),就是方程\(f(x)=0\)的根。这就是二分法收敛性的底层数学依据。
三、二分法的收敛性证明与误差估计公式严格推导
这是本节的核心重点,也是工程应用中最常用的部分,我们给出完全严谨的推导与证明,而非直接给出结论。
3.1 二分法的收敛性严格证明
定理:二分法产生的中点序列\(x_k = \frac{a_k + b_k}{2}\),必然收敛到方程\(f(x)=0\)的根\(x^*\),即\(\lim_{k\to\infty}x_k = x^*\)。
证明过程:
- 由区间套定理,存在唯一的\(x^*\),使得\(x^* \in [a_k,b_k]\)对所有\(k\geq0\)成立,且\(\lim_{k\to\infty}a_k = \lim_{k\to\infty}b_k = x^*\)。
- 中点\(x_k\)是区间\([a_k,b_k]\)的中点,因此满足不等式:\[a_k \leq x_k \leq b_k, \quad a_k \leq x^* \leq b_k \]
- 对\(x_k\)与\(x^*\)的绝对误差做放缩:\[|x_k - x^*| \leq b_k - a_k \](\(x_k\)和\(x^*\)都在长度为\(b_k-a_k\)的区间内,二者的距离不可能超过区间总长度)
- 已知\(b_k - a_k = \frac{b-a}{2^k}\),当\(k\to\infty\)时,\(\frac{b-a}{2^k} \to 0\),因此:\[\lim_{k\to\infty} |x_k - x^*| \leq \lim_{k\to\infty} \frac{b-a}{2^k} = 0 \]根据极限的定义,\(\lim_{k\to\infty}x_k = x^*\)。
证毕。该证明明确了:只要初始有根区间选对,二分法的中点序列必然收敛,这是它区别于其他迭代法的核心优势,不存在发散风险。
3.2 误差估计公式的严谨推导
教材中核心公式(7.2):
推导过程:
- 首先,\(x^* \in [a_k,b_k]\),\(x_k = \frac{a_k+b_k}{2}\)是区间中点,我们将\([a_k,b_k]\)以\(x_k\)为中点分为两半:左半区间\([a_k,x_k]\)、右半区间\([x_k,b_k]\),两半的长度均为\(\frac{b_k-a_k}{2}\)。
- 无论\(x^*\)落在左半区间还是右半区间,它到中点\(x_k\)的距离,最大不会超过区间长度的一半:
- 若\(x^* \in [a_k,x_k]\),则\(|x_k - x^*| = x_k - x^* \leq x_k - a_k = \frac{b_k-a_k}{2}\);
- 若\(x^* \in [x_k,b_k]\),则\(|x_k - x^*| = x^* - x_k \leq b_k - x_k = \frac{b_k-a_k}{2}\)。
- 因此,无论哪种情况,都有核心不等式:\[|x_k - x^*| \leq \frac{1}{2}(b_k - a_k) \]
- 将第\(k\)次二分的区间长度\(b_k - a_k = \frac{b-a}{2^k}\)代入上式,最终得到:\[|x_k - x^*| \leq \frac{1}{2} \cdot \frac{b-a}{2^k} = \frac{b-a}{2^{k+1}} \]
推导完毕。
3.3 先验误差估计的工程应用
该误差公式的核心价值是先验估计:在计算开始前,就可以根据预定的精度要求\(\varepsilon\),提前算出需要二分的次数\(k\),无需边算边判断,这是二分法独有的优势。
以例7.2为例,讲解如何根据精度求\(k\):
例7.2 求方程\(f(x)=x^3-x-1=0\)在\([1.0,1.5]\)内的实根,要求精确到小数点后第2位。
- 精度要求:精确到小数点后2位,即绝对误差限\(\varepsilon=0.005\)(四舍五入后小数点后2位准确);
- 初始区间长度\(b-a=1.5-1.0=0.5\);
- 代入误差公式,令\(\frac{b-a}{2^{k+1}} < \varepsilon\),即:\[\frac{0.5}{2^{k+1}} < 0.005 \]
- 解不等式得:\(2^{k+1} > 100\),因\(2^6=64\),\(2^7=128\),故\(k+1\geq7\),即\(k\geq6\)。
- 结论:仅需二分6次,即可满足精度要求,与教材例7.2的计算完全一致。
四、二分法的标准算法步骤与终止条件
我们将二分法标准化为可直接编程实现的步骤,明确每一步的目的与判断逻辑:
4.1 二分法标准计算步骤
输入:连续函数\(f(x)\)、初始有根区间\([a,b]\)、函数值精度\(\varepsilon_1\)、根的绝对误差精度\(\varepsilon_2\)
输出:方程\(f(x)=0\)的近似根\(x^*\)
- 准备验证:计算端点函数值\(f(a)\)、\(f(b)\),验证\(f(a)\cdot f(b) < 0\),确认是有根区间;若不满足,终止算法,提示区间无效。
- 二分计算:计算区间中点\(x_m = \frac{a+b}{2}\),计算中点函数值\(f(x_m)\)。
- 终止条件判断:
- 条件1:若\(|f(x_m)| < \varepsilon_1\),说明中点函数值已足够接近0,\(x_m\)为满足精度的近似根,输出\(x_m\),算法结束;
- 条件2:若区间长度\(b-a < \varepsilon_2\),说明区间已足够小,中点误差满足要求,输出\(x_m\),算法结束;
- 两个条件均不满足,进入下一步。
- 区间更新:
- 若\(f(x_m)\cdot f(a) < 0\),说明根在左半区间,令\(b = x_m\);
- 否则,说明根在右半区间,令\(a = x_m\)。
- 循环迭代:返回步骤2,重复二分、判断、更新,直到满足终止条件。
4.2 终止条件的说明
- 条件1(函数值判停):从函数值角度判断接近程度,但部分函数在远离根的位置函数值也很小,不可单独使用;
- 条件2(区间长度判停):从根的绝对误差角度判断,结合误差公式,只要区间长度小于\(\varepsilon_2\),中点误差必然小于\(\varepsilon_2/2\),是更可靠的判停条件。
五、二分法的优缺点与适用场景
结合六十余年的工程与教学经验,我给大家讲透二分法的适用边界,而非只记教材上的简单结论。
5.1 核心优点
- 算法极简,编程零门槛:仅需函数值计算、符号判断、区间更新,无复杂导数计算,新手也可快速实现;
- 无条件收敛,鲁棒性拉满:只要初始区间是有根区间、函数连续,二分法必然收敛,无发散风险,是工程上的“保底算法”;
- 先验误差估计,可精准控制计算量:提前根据精度算出迭代次数,无需边算边判断;
- 对函数要求极低:仅要求函数在有根区间连续,无需可导、无需光滑,适用范围极广。
5.2 核心缺点
- 收敛速度慢:二分法为线性收敛,收敛阶为1,每一次二分误差仅减半,要提高1位有效数字需3-4次二分,高精度需求下迭代次数极多,效率极低;
- 适用范围受限:仅能求单实根,无法求复根(复数无正负号),也无法求偶数重根(偶数重根处函数值不变号,无法形成有根区间);
- 无法同时求多根:一个初始区间只能找到一个根,若区间内有多个根,需先用逐次搜索法拆分有根区间,再分别求解;
- 对函数值计算精度敏感:若函数值计算存在误差,可能导致符号判断错误,进而选错有根区间。
5.3 核心适用场景
- 为牛顿法、割线法等快速迭代法提供高质量的初始迭代值;
- 求解低精度要求的非线性方程实根;
- 求解连续但不可导、光滑性差的非线性函数的实根;
- 工程上的根存在性验证,当其他迭代法发散时,用二分法定位根的大致区间。
六、二分法核心知识点归纳总结表
| 知识点分类 | 核心内容 | 关键说明与补充 |
|---|---|---|
| 理论基础 | 闭区间连续函数的零点存在定理 | 前提:\(f(x)\in C[a,b]\)且\(f(a)f(b)<0\);结论:\((a,b)\)内至少有一个实根,是二分法的合法性来源 |
| 有根区间定义 | 满足\(f(a)f(b)<0\)的闭区间\([a,b]\) | 是二分法的迭代起点,需通过逐次搜索法获取 |
| 核心迭代逻辑 | 对有根区间二等分,通过符号判断保留有根子区间,逐步缩小区间 | 每次迭代后区间长度减半,形成严格的闭区间套 |
| 收敛性定理 | 二分法产生的中点序列\(x_k=\frac{a_k+b_k}{2}\)必然收敛到根\(x^*\) | 底层依据是区间套定理,只要初始区间有效,必然收敛,无发散风险 |
| 误差估计公式 | $ | x_k - x^* |
| 标准算法步骤 | 准备验证→二分计算→终止判断→区间更新→循环迭代 | 两个终止条件需结合使用,区间长度判停更可靠 |
| 核心优点 | 算法简单、无条件收敛、先验误差估计、对函数光滑性要求低 | 工程上的保底求根算法,鲁棒性极强 |
| 核心缺点 | 收敛速度慢、仅能求单实根、无法求复根/偶数重根、无法同时求多根 | 不适合高精度求根,仅适合定位根的大致区间 |
| 收敛特性 | 线性收敛,收敛阶为1,收敛速度与公比1/2的等比数列一致 | 10次二分仅能提高3位有效数字,高精度场景效率极低 |
posted on 2026-02-27 21:18 Indian_Mysore 阅读(0) 评论(0) 收藏 举报
浙公网安备 33010602011771号