数值计算
序言。
第一部分:一元方程根
| 介值定理与二分法 | 数值求解一般都是采用迭代的方式不断接近解,二分法就是其中一种常用的方法。它有一个重要的特性,就是一定收敛,但会比较慢。 [Bisection] |
| 中值定理与牛顿法 | 牛顿法的逻辑甚至比二分法更简单,只要一直调用迭代关系式就可以了。它不一定能收敛,但只要初值选的合适,收敛起来就很快。 [NewtonRaphson] |
|
巴拿赫不动点定理 (Banach Fixed-Point Theorem) |
对于一个求方程根 \(f(x) = 0\) 的问题,我们可以有无数种方案,将其转换成一个不动点 \(x = g(x)\) 的问题。 上一节中介绍的牛顿法,实际上就是这种不动点的迭代过程。 [NaiveFixedPoint] [AitkenSteffensen] |
| Brent求根方法 | Brent 方法在效率和可靠性之间做了完美的取舍,不需要求导数,各大主流科学计算平台和工程软件库都在使用它。本文我们从割线法开始,不断改进,直至 Brent 方法。 [SecantRoot] [FalsePosition] [DekkerRoot] [BrentRoot] |
第二部分:一元多项式
| 一元多项式 | 本节我们介绍计算多项式函数值的嵌套乘法,初步讨论利用收缩约化技术求解多项式方程所有根的方法,以及一元二次多项式方程的求根公式。 [Polynomial] |
| 多项式的四则运算 | 加法和减法互为逆运算,定义和实现也很简单。乘法与加法构成分配率,也比较直观。除法并不是乘法的逆运算,它对多项式并不是封闭的,概念相对复杂一些。 [加] [减] [乘] [长除] [综合除] |
| 多项式方程求根 | Müller 算法通过二次插值公式提供了求解复数根的方法,在复数域上每次只能求出一个根,但可以通过综合除法约简,逐个计算出所有根。 [实数域Müller] [复数域Müller] [复数域AllRoots] |
| 拉格朗日多项式 | 给定一组采样点,可以很容易构造出 Lagrange 插值多项式。它可以将复杂的函数转化为易于处理的插值多项式,是数值积分和微分的理论基础。 [LagrangeInterpolation] [LagrangePolynomial] [龙格现象] |
| 重心拉格朗日插值 | 本文对传统的拉格朗日多项式做了简单变形,得到了重心 Lagrange 插值公式。该公式不仅在数学上很优雅,在工程上它也是十分高效,并且极致稳定。 [BarycentricLagrange] |
| 牛顿差商多项式 | 和重心拉格朗日一样, 牛顿差商也需要 \(O(n^2)\) 的初始化,之后就可以在 \(O(n)\) 的时间里完成插值运算了。只是牛顿差商的初始化过程是在构造差商表,求值的时候是通过嵌套乘法完成的。 [NewtonDividedDifference] |
| Hermite插值多项式 | Hermite 插值多项式不仅要求在采样点上与原函数相同,还要求它们的一阶导数也相同,即所谓的 \(C^1\) 连续性。这样通过多个插值低次多项式拼接的时候再连接点处就会丝滑过渡。 [HermiteInterpolation] [HermiteDividedDifference] |
