title: 如何搭建一篇博客2024版
date: 2024-08-30 19:44:14
categories:
- 环境搭建
tags: 环境
数值分析笔记
1. 误差分析
在数值计算中,误差是不可避免的,理解误差的来源、传播和影响非常重要。
1.1 误差的类型
绝对误差:
这是计算结果与实际结果的差异。设真实值为 $x_{\text{true}}$,计算结果为 $x_{\text{approx}}$,那么绝对误差为:$$
\text{绝对误差} = |x_{\text{true}} - x_{\text{approx}}|
$$举例:假设真实值 $x_{\text{true}} = 3.141592$,近似值 $x_{\text{approx}} = 3.14$,那么:
$$
\text{绝对误差} = |3.141592 - 3.14| = 0.001592
$$相对误差:
这是绝对误差相对于真实值的比例,表示为:$$
\text{相对误差} = \frac{\text{绝对误差}}{x_{\text{true}}}
$$举例:真实值 $x_{\text{true}} = 3.141592$,那么相对误差为:
$$
\text{相对误差} = \frac{0.001592}{3.141592} \approx 0.000507
$$
表示误差大约为真实值的 $0.05%$。
1.2 误差传播
误差在数值计算中会通过运算逐步放大。例如,如果你在连续使用一个近似值进行多次计算,每一步运算可能都会引入新的误差。
举例:
假设你用 $x = 3.14$ 来代替 $\pi$,并进行平方运算:
$$
x^2 = 3.14^2 = 9.8596
$$
而真实值 $\pi^2 \approx 9.8696$,可以看到随着运算的进行,误差进一步增大了。
2. 非线性方程求根
非线性方程求根指的是找到使得 $f(x) = 0$ 的 $x$ 值。常见的求根方法包括二分法、牛顿法和割线法。
2.1 二分法
二分法是一种稳定且简单的求根方法,适用于连续函数。其基本思想是利用函数在某个区间 $[a, b]$ 上的符号变化,逐步缩小区间,直到找到近似根。
算法步骤:
- 取一个初始区间 $[a, b]$,且 $f(a) \cdot f(b) < 0$,保证方程在 $[a, b]$ 之间有根。
- 计算中点 $m = \frac{a + b}{2}$,检查 $f(m)$ 的符号。
- 如果 $f(m) = 0$,则 $m$ 就是方程的根。
- 如果 $f(m) \cdot f(a) < 0$,则根在区间 $[a, m]$,令 $b = m$。
- 如果 $f(m) \cdot f(b) < 0$,则根在区间 $[m, b]$,令 $a = m$。
- 重复步骤2,直到区间长度足够小。
举例:求解方程 $f(x) = x^2 - 4 = 0$ 的根(真实解为 $x = 2$ 和 $x = -2$)。
- 初始区间取 $[1, 3]$,因为 $f(1) = -3$,$f(3) = 5$,满足 $f(1) \cdot f(3) < 0$。
- 计算中点 $m = \frac{1 + 3}{2} = 2$,此时 $f(2) = 0$,找到了根 $x = 2$。
2.2 牛顿法
牛顿法是一种快速收敛的求根方法,它利用函数在某一点的切线来迭代逼近根。牛顿法的迭代公式为:
$$
x_{n+1} = x_n - \frac{f(x_n)}{f’(x_n)}
$$
要求函数 $f(x)$ 的导数 $f’(x)$ 存在且容易计算。
举例:用牛顿法求解方程 $f(x) = x^2 - 4 = 0$。
- 设初始值 $x_0 = 3$。
- 计算 $f(3) = 5$,$f’(3) = 2 \times 3 = 6$,则迭代公式为:
$$
x_1 = 3 - \frac{5}{6} \approx 2.17
$$ - 继续迭代,$f(2.17) \approx 0.71$,$f’(2.17) = 4.34$,迭代得:
$$
x_2 = 2.17 - \frac{0.71}{4.34} \approx 2.01
$$ - 逐步逼近根 $x = 2$。
3. 解线性方程组的迭代方法
线性方程组的迭代法适用于大规模稀疏矩阵的求解。常见的迭代方法有雅可比迭代法和高斯-赛德尔迭代法。
3.1 雅可比迭代法
雅可比迭代法的基本思想是将每个变量逐次更新,基于旧的解进行新的迭代。方程组 $Ax = b$ 被拆分为形式:
$$
x_i^{(k+1)} = \frac{1}{a_{ii}} \left(b_i - \sum_{j \neq i} a_{ij} x_j^{(k)} \right)
$$
举例:解线性方程组
$$
\begin{aligned}
2x_1 + x_2 &= 5 \
x_1 + 3x_2 &= 6
\end{aligned}
$$
- 初始猜测 $x_1^{(0)} = x_2^{(0)} = 0$。
- 第一次迭代:
$$
x_1^{(1)} = \frac{1}{2} (5 - 0) = 2.5
$$
$$
x_2^{(1)} = \frac{1}{3} (6 - 0) = 2
$$ - 第二次迭代:
$$
x_1^{(2)} = \frac{1}{2} (5 - 2) = 1.5
$$
$$
x_2^{(2)} = \frac{1}{3} (6 - 1.5) = 1.5
$$
迭代继续进行,逐步逼近解 $x_1 = 1$,$x_2 = 1$。
3.2 高斯-赛德尔迭代法
高斯-赛德尔法是雅可比法的改进,每次迭代时,使用最新的解来更新当前变量。与雅可比法相比,收敛速度更快。
举例:使用高斯-赛德尔法解上面的方程组。
- 初始猜测 $x_1^{(0)} = x_2^{(0)} = 0$。
- 第一次迭代:
$$
x_1^{(1)} = \frac{1}{2} (5 - 0) = 2.5
$$
使用最新的 $x_1^{(1)} = 2.5$ 来更新 $x_2$:
$$
x_2^{(1)} = \frac{1}{3} (6 - 2.5) = 1.167
$$ - 第二次迭代:
$$
x_1^{(2)} = \frac{1}{2} (5 - 1.167) = 1.917
$$
$$
x_2^{(2)} = \frac{1}{3} (6 - 1.917) = 1.361
$$
继续迭代,逐步逼近解。
4. 不动点迭代法
不动点迭代法是一种通过 $x = g(x)$ 的迭代形式求解方程的方法,收敛性依赖于 $g(x)$ 的性质。
4.1 算法步骤
- 从一个初始猜测值 $x_0$ 开始。
- 根据公式 $x_{n+1} = g(x_n)$ 计算新值。
- 重复第 2 步,直到收敛到一个解。
4.2 收敛性条件
不动点迭代法的收敛性依赖于函数 $g(x)$ 的性质,尤其是它在不动点附近的导数。如果 $g(x)$ 在不动点附近满足以下条件,则该方法收敛:
- 存在 $c \in (0, 1)$,使得 $|g’(x)| \leq c$,那么迭代将收敛。
举例:
求解方程 $x^2 - 2 = 0$ 的根,可以转化为不动点形式 $x = \frac{2}{x}$。设初始值 $x_0 = 1$,通过迭代公式:
$$
x_{n+1} = \frac{2}{x_n}
$$
我们可以逐步逼近根 $x = \sqrt{2}$。
5. 全局收敛性
全局收敛性是指某种数值方法对任意初始点都能收敛到方程的解,而不仅仅是某个特定区间或条件下。
- 局部收敛性:如果算法只在某个初始点或特定区域内收敛到解,我们称其为局部收敛。
- 全局收敛性:算法不依赖于初始猜测值,在较大的区间或空间内都能收敛到解。
举例:
二分法具有全局收敛性,因为只要函数在初始区间 $[a, b]$ 上连续并且满足 $f(a) \cdot f(b) < 0$,无论初始猜测值如何,二分法都能收敛到根。而牛顿法通常是局部收敛的,它对初始值较为敏感。
6. 迭代收敛的加速方法
迭代方法在很多情况下会收敛较慢,因此引入一些加速技术来提高收敛速度是必要的。以下是几种常用的加速方法:
6.1 Aitken加速法
Aitken加速法是一种常用的迭代加速技术,特别适用于线性收敛的迭代方法。其目的是通过消除逐次迭代产生的误差来加速收敛。
- 加速公式:给定迭代序列 ${x_n}$,Aitken加速后的序列 ${x_n^{\ast}}$ 的计算公式为:
$$
x_n^{\ast} = x_n - \frac{(x_{n+1} - x_n)^2}{x_{n+2} - 2x_{n+1} + x_n}
$$ - 通过加速,迭代序列会收敛得更快。
举例:
假设我们有一组迭代值 $x_0 = 1$,$x_1 = 1.5$,$x_2 = 1.75$,我们可以应用Aitken加速法计算新的值 $x_0^{\ast}$:
$$
x_0^{\ast} = 1 - \frac{(1.5 - 1)^2}{1.75 - 2 \times 1.5 + 1} = 1.3333
$$
加速后,新序列更快接近真实值。
7. 向量范数与向量序列的极限
向量范数是用来衡量向量大小的工具,尤其是在处理迭代算法的收敛性分析时,向量范数有助于分析误差。
7.1 常用的向量范数
- 1-范数:向量 $x = (x_1, x_2, \dots, x_n)$ 的1-范数定义为:
$$
|x|_1 = |x_1| + |x_2| + \dots + |x_n|
$$ - 2-范数(欧几里得范数):向量的2-范数定义为:
$$
|x|_2 = \sqrt{x_1^2 + x_2^2 + \dots + x_n^2}
$$ - 无穷范数:向量的无穷范数定义为:
$$
|x|_{\infty} = \max(|x_1|, |x_2|, \dots, |x_n|)
$$
7.2 向量序列的极限
设有一个向量序列 ${x_k}$,如果当 $k \to \infty$ 时,向量序列逐渐接近某个向量 $x$,我们称 ${x_k}$ 收敛于 $x$。即:
$$
\lim_{k \to \infty} x_k = x
$$
利用向量范数可以衡量序列的收敛性。
8. 迭代过程的收敛性
迭代算法的收敛性指的是,随着迭代次数的增加,近似解是否逐步逼近真实解。
8.1 线性收敛与超线性收敛
线性收敛:如果存在一个常数 $0 < r < 1$,使得误差 $e_n$ 满足 $e_{n+1} \approx r e_n$,那么算法是线性收敛的。比如,二分法具有线性收敛性。
超线性收敛:如果误差 $e_{n+1}$ 满足 $e_{n+1} \ll e_n$,即收敛速度快于线性,那么我们称之为超线性收敛。牛顿法在接近根时具有二次收敛(即误差平方减小)。
8.2 判定收敛性的方法
为了判断一个迭代过程是否收敛,我们可以计算当前迭代结果与前几次迭代结果的差异。如果差异逐步减小到一个很小的阈值,那么可以认为迭代过程收敛。
小结:
- 不动点迭代法:是一种通过 $x = g(x)$ 的迭代形式求解方程的方法,收敛性依赖于 $g(x)$ 的性质。
- 全局收敛性:某种算法对所有初始点收敛的特性。
- 加速方法:如 Aitken加速法,用于加快线性收敛迭代的速度。
- 向量范数与向量序列的极限:范数用于衡量向量的大小,极限用于描述迭代序列的收敛性。
- 迭代过程的收敛性:评估迭代算法的效果,关键是确定算法是否线性或超线性收敛。