方程的数值解 (P3/Paper 3)
欢迎来到令人兴奋的数值方法世界!本章的重点在于求出那些过于复杂而无法使用标准代数技巧(例如一元二次方程求根公式或简单因式分解)解决的方程的解(根)。由于我们无法求得精确答案,我们将会使用各种方法来寻找极高精度的近似值。这在应用数学和科学领域中至关重要!
如果这听起来很复杂,别担心——我们只是在学习如何做出越来越准确的推测!
1. 定位根:起点
在开始进行根的近似之前,我们需要大致了解它的位置。我们有两种主要方法来确定根的位置:
1.1 变号规则(“跨越坐标轴”测试)
定位根最简单且最可靠的方法是测试根两侧的函数值。
假设你有一个方程 \(f(x) = 0\)。如果你能找到两个值,\(a\) 和 \(b\),使得:
• \(f(a)\) 是正数(例如 \(f(a) > 0\))
• \(f(b)\) 是负数(例如 \(f(b) < 0\))
• 函数 \(f(x)\) 在 \(a\) 和 \(b\) 之间是连续的(意味着没有断点或间隙)。
……那么,在 \(x=a\) 和 \(x=b\) 之间,\(f(x) = 0\) 必定至少存在一个根(解)。
比喻: 想象你正走过一个山谷。如果你从山上开始(高度为正),最后到达山谷的另一边低于海平面(高度为负),假设你没有跳过整个山谷,那么你在某个点上必定跨越了海平面(高度为零)!
重要前置检查: 你必须确保该函数是连续的。对于 9709 考纲中涉及的所有函数(多项式、指数、对数、三角函数),除非区间包含了垂直渐近线(例如 \(y = \tan x\) 或 \(y = 1/x\)),否则这通常是成立的。
1.2 使用图解法定位根
有时,直接观察图象来定位根会更容易,特别是在方程比较复杂的时候。
如果你有一个方程 \(f(x) = 0\),你通常可以将其改写为两个独立、较简单的函数:
\(y_1 = g(x)\) 和 \(y_2 = h(x)\)
原方程 \(f(x)=0\) 的根,就是这两个函数图象 \(y_1\) 和 \(y_2\) 交点的 \(x\) 坐标。
例子: 要找出 \(e^x - x^2 = 0\) 的根,我们可以改写为 \(e^x = x^2\)。接着绘制:
• \(y_1 = e^x\)(指数曲线)
• \(y_2 = x^2\)(抛物线)
通过绘图,你可以直观地估计有多少个根及其大致位置(例如:“一个根在 \(x=-0.7\) 附近,另一个在 \(x=1.3\) 附近”)。
快速回顾:根的定位
务必从以下开始:绘图(了解其大致位置)或检查变号(精确证明其位置)。
2. 迭代法:一步步逼近
当你知道根在 \(x_0\) 附近后,我们使用迭代法 (iteration) 来多次精炼该推测值,直到达到所需的精度。
2.1 迭代公式 \(x_{n+1} = F(x_n)\)
数值迭代的核心是将方程 \(f(x) = 0\) 改写为 \(x = F(x)\) 的形式。
这让我们能定义一连串的近似值:
\(x_{n+1} = F(x_n)\)
• 从初始推测值 \(x_0\) 开始。
• 计算下一个近似值:\(x_1 = F(x_0)\)。
• 接着:\(x_2 = F(x_1)\)。
• 依此类推:计算出 \(x_n\),即可得到 \(x_{n+1}\)。
如果这一串数值(\(x_0, x_1, x_2, \dots\))越来越接近某个单一固定值,我们就说该数列收敛 (converges) 到根 \(\alpha\)。由于当 \(n\) 很大时 \(x_{n+1} \approx x_n\),我们发现 \(\alpha = F(\alpha)\),这正是原方程的解。
2.2 将 \(f(x)=0\) 改写为 \(x = F(x)\)
对于任何一个方程 \(f(x)=0\),通常有许多种方法将其改写为 \(x = F(x)\) 的形式。
例子: 解 \(x^3 - 2x - 5 = 0\)
改写方式 A:
\(x^3 = 2x + 5\)
\(x = (2x + 5)^{1/3}\)
这给出了迭代公式:\(x_{n+1} = (2x_n + 5)^{1/3}\)
改写方式 B:
\(2x = x^3 - 5\)
\(x = \frac{x^3 - 5}{2}\)
这给出了迭代公式:\(x_{n+1} = \frac{x_n^3 - 5}{2}\)
你知道吗? 并非所有的改写方式都有效!如果你选择了错误的改写方式,迭代可能会发散 (diverge)(离根越来越远)。在考试中,通常题目会给定你应使用的特定改写方式,或者要求你找出一种看起来有效的改写方式。
3. 执行迭代与判断精度
3.1 逐步迭代(计算器技巧)
有效运用迭代公式是一项关键技能,通常使用计算器上的 ANS 键来完成。
程序清单:
1. 从 \(x_0\) 开始: 输入初始推测值(题目通常会给定,例如 \(x_0 = 1\))。按 [=]。
2. 输入 \(F(x)\): 输入迭代公式,用 ANS 取代 \(x_n\)。
例子(对于 \(x_{n+1} = (2x_n + 5)^{1/3}\)): 输入 \((2 \times \text{ANS} + 5)^{1/3}\)。
3. 迭代: 重复按 [=]。第一次按得到 \(x_1\),第二次得到 \(x_2\),依此类推。
4. 记录: 记下数值序列,直到它们稳定(即在所需的小数位数下不再改变)。
迭代例子: 若从 \(x_0 = 1\) 开始,数列可能为:
\(x_0 = 1.000000\)
\(x_1 = 1.709976\)
\(x_2 = 1.883395\)
\(x_3 = 1.918967\)
\(x_4 = 1.925893\)
\(x_5 = 1.927282\)
\(x_6 = 1.927558\)
\(x_7 = 1.927613\)
\(x_8 = 1.927624\)
此时,如果题目要求精确到小数点后 4 位 (4 d.p.),则答案为 \(1.9276\)。
3.2 证明根的精度(最终变号测试)
迭代过程会给你一个看似稳定的值。为了证明该值精确到特定位数(例如小数点后 3 位),你必须回到原始函数 \(f(x)\),并在一个微小的区间内使用变号规则。
假设题目要求证明根为 \(\alpha = 1.928\),精确到 3 位小数。
这意味着真正的根必须位于该近似值的下界和上界之间:
• 下界: \(1.9275\)
• 上界: \(1.9285\)
逐步证明:
1. 定义原始函数 \(f(x)\)。 (例如,如果我们解的是 \(x^3 - 2x - 5 = 0\),则 \(f(x) = x^3 - 2x - 5\))。
2. 计算 \(f(\text{下界})\):求出 \(f(1.9275)\)。
3. 计算 \(f(\text{上界})\):求出 \(f(1.9285)\)。
4. 检查符号: 如果符号相反,则真正的根位于该区间内,从而证实四舍五入至 3 位小数后,根确实为 \(1.928\)。
避免常见错误: 学生有时会尝试使用迭代函数 \(F(x)\) 来进行变号检查。你必须使用原始函数 \(f(x)\)。
记忆口诀:变号规则
使用 \(f(x)\)(原始函数)来 Find(寻找)初始区间。
再次使用 \(f(x)\) 来进行 Final(最终)的精度证明。
4. 迭代的图解法(收敛)
迭代数列 \(x_{n+1} = F(x_n)\) 的行为可以通过绘制 \(y = x\) 和 \(y = F(x)\) 的图象来可视化。
根 \(\alpha\) 即是交点,因为在交点处 \(x = F(x)\)。
4.1 可视化收敛与发散
为了可视化这个数列,我们绘制一条在直线 \(y=x\) 和曲线 \(y=F(x)\) 之间交替的路径:
1. 在 \(x\)-轴上从 \(x_0\) 开始。
2. 垂直移动到曲线 \(y = F(x)\)。此高度为 \(y_0 = F(x_0) = x_1\)。
3. 从曲线水平移动到直线 \(y = x\)。此处的 \(x\)-坐标现在为 \(x_1\)。
4. 从直线 \(y = x\) 垂直移动回曲线 \(y = F(x)\)。此高度为 \(y_1 = F(x_1) = x_2\)。
5. 重复步骤 2、3、4。
产生的形状可以显示出两种主要的成功迭代(收敛)或失败(发散)情况。
阶梯式收敛 (Staircase Convergence)
如果路径形成一系列阶梯状并导向根部,则迭代成功。
当曲线 \(y=F(x)\) 在根附近的斜率较小且为正时,就会发生这种情况。
蛛网式收敛 (Cobweb Convergence)
如果路径呈螺旋状向内旋转至根部(像蛛网一样),则迭代成功。
当曲线 \(y=F(x)\) 在根附近的斜率较小且为负时,就会发生这种情况。
发散 (Divergence)(失败)
如果路径远离交点,则迭代无法收敛。当曲线 \(y=F(x)\) 在根附近太陡时,就会发生这种情况。
给拓展学习的备注: 虽然你不需要了解收敛的正式数学条件(这涉及导数 \(|F'(x)|\) 的大小),但你需要明白迭代可能会无法收敛,而图解法有助于可视化为何某些改写方式比其他方式更好。
数值方法的核心要点
• 开始: 使用变号规则或绘图法来定位两值之间的根。
• 过程: 将 \(f(x)=0\) 改写为迭代形式 \(x_{n+1} = F(x_n)\)。
• 精度: 要确认根 \(\alpha\) 的特定精度(例如 3 位小数),你必须在所需精度的下界和上界(例如 \(1.9275\) 和 \(1.9285\))处,使用原始函数 \(f(x)\) 执行最后的变号测试。
• 收敛: 如果改写形式 \(F(x)\) 不合适,迭代可能会失败。