IanHawke/NumericalMethods 项目解析:线性代数与数值计算基础教程
本文基于IanHawke/NumericalMethods项目中的第一个工作表内容,深入讲解线性代数和数值计算的基础知识,包括向量/矩阵范数、条件数计算以及二分法等核心数值方法。
向量范数计算与应用
向量范数是衡量向量"大小"的重要工具,在数值计算中有着广泛应用。常见的三种范数定义如下:
- 1-范数(曼哈顿范数):向量元素绝对值之和
- 2-范数(欧几里得范数):向量元素平方和的平方根
- ∞-范数(最大范数):向量元素绝对值的最大值
以向量v₁ = [1, 3, -1]为例:
- 1-范数:|1| + |3| + |-1| = 5
- 2-范数:√(1² + 3² + (-1)²) ≈ 3.3166
- ∞-范数:max(|1|, |3|, |-1|) = 3
在实际编程中,可以使用NumPy的linalg.norm
函数方便地计算各种范数:
import numpy as np
v = np.array([1.0, 3.0, -1.0])
print(np.linalg.norm(v, 1)) # 1-范数
print(np.linalg.norm(v, 2)) # 2-范数
print(np.linalg.norm(v, np.inf)) # ∞-范数
矩阵范数与条件数
矩阵范数是向量范数的推广,用于衡量矩阵的"大小"。特别地:
- 矩阵1-范数:列向量的1-范数最大值
- 矩阵∞-范数:行向量的1-范数最大值
以矩阵A₁ = [[1, 2], [3, 4]]为例:
- 1-范数:max(1+3, 2+4) = 6
- ∞-范数:max(1+2, 3+4) = 7
条件数是矩阵数值稳定性的重要指标,定义为矩阵范数与其逆矩阵范数的乘积:
K(A) = ||A||·||A⁻¹||
条件数越大,矩阵求逆或解线性方程组时对误差越敏感。在NumPy中可直接计算:
A = np.array([[1.0, 2.0], [3.0, 4.0]])
print(np.linalg.cond(A, 1)) # 1-范数条件数
print(np.linalg.cond(A, np.inf)) # ∞-范数条件数
直接法与迭代法对比
解线性方程组的方法可分为两大类:
直接法:通过有限步变换将矩阵化为易解形式(如LU分解、高斯消元)
- 优点:精确,适合中小规模稠密矩阵
- 缺点:存储需求大,不适合稀疏矩阵
迭代法:通过迭代逼近解(如Jacobi、Gauss-Seidel)
- 优点:内存效率高,适合大规模稀疏矩阵
- 缺点:可能需要很多迭代,收敛性不确定
二分法求根实践
二分法是求解非线性方程f(x)=0的可靠方法,基于连续函数的中值定理。以求解tan(x)-e⁻ˣ=0在[0,1]内的根为例:
def bisection(f, interval, tolerance=1e-10):
# 实现细节...
pass
def f(x):
return np.tan(x) - np.exp(-x)
root = bisection(f, [0, 1])
二分法保证收敛但速度较慢,每次迭代将区间减半,适合作为其他快速方法的初始估计。
数值计算实践建议
- 计算条件数应成为解线性方程组前的标准检查步骤
- 对于病态矩阵(条件数大),应考虑正则化或特殊算法
- 二分法虽然简单,但在工程应用中仍很有价值
- 理解不同范数的物理意义有助于选择合适的方法
通过掌握这些基础数值方法,可以为进一步学习更复杂的数值算法奠定坚实基础。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考