[ SKILL_DOCUMENTATION ]
# SymPy 矩阵与线性代数
本文档涵盖了 SymPy 的矩阵运算、线性代数功能以及线性方程组的求解。
## 矩阵创建
### 基本矩阵构造
python
from sympy import Matrix, eye, zeros, ones, diag
# 从行列表创建
M = Matrix([[1, 2], [3, 4]])
M = Matrix([
[1, 2, 3],
[4, 5, 6]
])
# 列向量
v = Matrix([1, 2, 3])
# 行向量
v = Matrix([[1, 2, 3]])
### 特殊矩阵
python
# 单位矩阵
I = eye(3) # 3x3 单位矩阵
# [[1, 0, 0],
# [0, 1, 0],
# [0, 0, 1]]
# 零矩阵
Z = zeros(2, 3) # 2 行 3 列的零矩阵
# 全 1 矩阵
O = ones(3, 2) # 3 行 2 列的全 1 矩阵
# 对角矩阵
D = diag(1, 2, 3)
# [[1, 0, 0],
# [0, 2, 0],
# [0, 0, 3]]
# 分块对角矩阵
from sympy import BlockDiagMatrix
A = Matrix([[1, 2], [3, 4]])
B = Matrix([[5, 6], [7, 8]])
BD = BlockDiagMatrix(A, B)
## 矩阵属性与访问
### 形状与维度
python
M = Matrix([[1, 2, 3], [4, 5, 6]])
M.shape # (2, 3) - 返回元组 (行, 列)
M.rows # 2
M.cols # 3
### 访问元素
python
M = Matrix([[1, 2, 3], [4, 5, 6]])
# 单个元素
M[0, 0] # 1 (从 0 开始索引)
M[1, 2] # 6
# 行访问
M[0, :] # Matrix([[1, 2, 3]])
M.row(0) # 同上
# 列访问
M[:, 1] # Matrix([[2], [5]])
M.col(1) # 同上
# 切片
M[0:2, 0:2] # 左上角 2x2 子矩阵
### 修改
python
M = Matrix([[1, 2], [3, 4]])
# 插入行
M = M.row_insert(1, Matrix([[5, 6]]))
# [[1, 2],
# [5, 6],
# [3, 4]]
# 插入列
M = M.col_insert(1, Matrix([7, 8]))
# 删除行
M = M.row_del(0)
# 删除列
M = M.col_del(1)
## 基本矩阵运算
### 算术运算
python
from sympy import Matrix
A = Matrix([[1, 2], [3, 4]])
B = Matrix([[5, 6], [7, 8]])
# 加法
C = A + B
# 减法
C = A - B
# 标量乘法
C = 2 * A
# 矩阵乘法
C = A * B
# 逐元素乘法 (Hadamard 积)
C = A.multiply_elementwise(B)
# 幂运算
C = A**2 # 等同于 A * A
C = A**3 # A * A * A
### 转置与共轭
python
M = Matrix([[1, 2], [3, 4]])
# 转置
M.T
# [[1, 3],
# [2, 4]]
# 共轭 (用于复数矩阵)
M.conjugate()
# 共轭转置 (Hermitian 转置)
M.H # 等同于 M.conjugate().T
### 逆矩阵
python
M = Matrix([[1, 2], [3, 4]])
# 逆矩阵
M_inv = M**-1
M_inv = M.inv()
# 验证
M * M_inv # 返回单位矩阵
# 检查是否可逆
M.is_invert