第十一天 线性代数基础
线性代数是数学的一个分支,广泛应用于计算机科学、物理学、工程学等领域。Python 提供了一些强大的库来进行线性代数计算,其中最著名的是 NumPy 和 SciPy。下面是一些线性代数的基础概念和如何在 Python 中使用这些库的示例。
线性代数是数学的一个分支,主要处理线性关系问题。以下是线性代数的基础知识概览:
一、行列式
行列式是由n²个元素组成的n行n列矩阵A的一种代数运算规则或函数,行列式内的矩阵元素A是一个方阵,这样的行列式被称为n阶行列式,用det(A)或|A|表示。
-
特殊行列式的计算:对于对角行列式、上三角行列式、下三角行列式来说,其行列式运算结果等于其主对角线上元素的乘积。
-
行列式的性质:
- 行列式与其转置行列式的结果相等。
- 行列式交换任意两行(或列),行列式结果变号。
- 若行列式中有两行(或列)元素完全相同或对应成比例,则行列式结果为0。
- 在同一行列式中,第j行的元素与第i行元素的代数余子式的乘积之和为0(列同理)。
- 用数字k乘行列式某一行(或列)中所有元素,等于用k乘此行列式。
- 若行列式某行元素可以拆为两数之和,则行列式可以拆为两个行列式的和。
- 行列式某行元素加上另一行对应元素的k倍,行列式的值不变。
二、矩阵
由mxn个数按照一定的次序排成的m行n列的矩形数表称为mxn的矩阵。
-
特殊矩阵:
- 方阵:当矩阵的行数和列数相等时,称该矩阵为方阵。
- 零矩阵:当矩阵的元素全为0时,该矩阵被称为零矩阵。
- 对角矩阵:若一个方阵除了主对角线上的元素外,其余元素都等于零,则称之为对角阵(diag)。
- 单位矩阵:单位矩阵是个方阵,从左上角到右下角的对角线(主对角线)上的元素均为1,除此以外全都为0。
- 梯形阵:若非零行(即至少有一个非零元素的行)全在零行的上面,且各非零行中第一个(或最后一个)非零元素前(或后)面零元素的个数随着行数增大而增多(或减少),则称为上(或下)梯形矩阵,统称为梯形阵。
- 对称矩阵:对于n阶方阵A来说,若矩阵以主对角线(从左上至右下)为对称轴,各元素对应相等,即aij=aji,则该矩阵被称为对称矩阵。对称矩阵与其转置矩阵相等,对角矩阵、单位矩阵都是对称矩阵。
- 反对称矩阵:对于n阶方阵A来说,若矩阵以主对角线(从左上至右下,主对角线上元素全为0)为对称轴,各元素对应相反,即aij=-aji,则该矩阵被称为反对称矩阵。
-
矩阵的基础运算:
- 矩阵乘法。
- 方阵的幂运算。
- 矩阵的转置。
- 方阵的行列式。
- 矩阵的秩:矩阵中最大的非零子式的阶数称为矩阵的秩。
- 矩阵的迹:方阵主对角线上元素之和称为矩阵的迹。
-
伴随矩阵:矩阵的各个元素的代数余子式构成的矩阵的转置称为原矩阵的伴随矩阵。
-
矩阵初等变换:包括行变换和列变换,如行互换、行倍加、行倍乘、列互换、列倍加、列倍乘等。
-
逆矩阵:设A是n阶方阵,如果存在n阶方阵B,使得AB=BA=E(E是n阶单位矩阵),则称A是可逆的,并称B是A的逆矩阵。
三、向量空间
-
向量的概念:向量是具有大小和方向的量,可以用有向线段来表示。
-
向量组的线性相关性:如果向量组中的向量可以由其他向量线性表示,则称这些向量线性相关;否则,称它们线性无关。
-
向量空间:向量空间是一个定义了加法和数乘运算的向量集合,满足一定的运算规则和性质。
-
向量组的特性:
- 向量的内积/点乘/数量积:两个向量的内积等于它们的对应分量乘积的和。
- 正交性:如果两个向量的内积为0,则称这两个向量正交。
- 施密特正交规范化:是一种将向量组正交化的方法。
- 正交矩阵:如果矩阵A满足AT=A(-1),则称A为正交矩阵。
四、方程组求解
线性代数的一个重要应用是求解线性方程组,包括齐次线性方程组和非齐次线性方程组。
- 齐次线性方程组:方程组的所有项都是未知数的线性函数,且常数项全为0。
- 非齐次线性方程组:方程组的所有项都是未知数的线性函数,但常数项不全为0。
五、矩阵的分解
-
矩阵的相似:如果矩阵A和B满足P^(-1)AP=B(P为可逆矩阵),则称A和B相似。
-
特征值与特征向量:设A是n阶方阵,如果存在数λ和非零n维列向量x,使得Ax=λx,则称λ是A的特征值,x是A的对应于特征值λ的特征向量。
-
矩阵可相似对角化的条件:一个n阶方阵A可相似对角化的充分必要条件是A有n个线性无关的特征向量。
-
实对称矩阵的特性:实对称矩阵的特征值都是实数,且实对称矩阵的不同特征值对应的特征向量是正交的。
-
矩阵特征值分解EVD:对于可对角化的矩阵A,可以将其分解为A=PΛP^(-1)的形式,其中P是由A的特征向量构成的矩阵,Λ是由A的特征值构成的对角矩阵。
-
矩阵奇异值分解SVD:对于任意m×n矩阵A,可以将其分解为A=UΣVT的形式,其中U是m×m正交矩阵,Σ是m×n对角矩阵(对角线上的元素称为奇异值),VT是n×n正交矩阵的转置。
-
向量(Vectors)
向量是一个一维数组,可以表示成列向量或行向量。
使用 NumPy 创建向量
python
import numpy as np
列向量
vector_column = np.array([[1], [2], [3]])
print(“Column Vector:\n”, vector_column)
行向量
vector_row = np.array([1, 2, 3])
print(“Row Vector:\n”, vector_row)
2. 矩阵(Matrices)
矩阵是一个二维数组。
使用 NumPy 创建矩阵
python
2x3 矩阵
matrix = np.array([[1, 2, 3], [4, 5, 6]])
print(“Matrix:\n”, matrix)
3. 矩阵运算
矩阵加法
python
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = A + B
print(“Matrix Addition:\n”, C)
矩阵乘法
python
元素乘法(逐元素相乘)
elementwise_multiplication = A * B
print(“Elementwise Multiplication:\n”, elementwise_multiplication)
矩阵乘法(线性代数乘法)
matrix_multiplication = np.dot(A, B)
print(“Matrix Multiplication:\n”, matrix_multiplication)
矩阵转置
python
A_transpose = A.T
print(“Transpose of A:\n”, A_transpose)
4. 矩阵的逆和行列式
逆矩阵
python
必须是方阵且行列式不为0
A_inv = np.linalg.inv(A)
print(“Inverse of A:\n”, A_inv)
行列式
python
det_A = np.linalg.det(A)
print(“Determinant of A:\n”, det_A)
5. 解线性方程组
假设我们有一个线性方程组 Ax = b,我们可以使用 NumPy 的 linalg.solve 方法来求解。
python
A = np.array([[3, 1], [1, 2]])
b = np.array([9, 8])
x = np.linalg.solve(A, b)
print(“Solution to Ax = b:\n”, x)
6. 特征值和特征向量
python
特征值
eigenvalues = np.linalg.eigvals(A)
print(“Eigenvalues:\n”, eigenvalues)
特征向量和特征值
eigenvalues, eigenvectors = np.linalg.eig(A)
print(“Eigenvalues:\n”, eigenvalues)
print(“Eigenvectors:\n”, eigenvectors)
7. 向量范数和矩阵范数
向量范数
python
vector = np.array([1, -2, 2])
norm_vector = np.linalg.norm(vector)
print(“Norm of the vector:\n”, norm_vector)
矩阵范数
python
norm_matrix = np.linalg.norm(matrix, ord=‘fro’) # Frobenius norm
print(“Frobenius norm of the matrix:\n”, norm_matrix)
总结
这些是线性代数的一些基本概念,以及如何使用 NumPy 在 Python 中进行这些计算。NumPy 提供了非常高效和简洁的接口来处理这些线性代数运算。如果你需要更高级的功能,SciPy 也提供了许多线性代数相关的函数。