这是《玩转线性代数》的学习笔记。
示例请查看原文
设线性方程组
{ a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + ⋯ + a 2 n x n = b 2 − − − − − − − − − − − − − − a 31 x 1 + a n 2 x 2 + ⋯ + a n n x n = b n \left\{ \begin{aligned} a_{11}x_1+a_{12}x_2+\cdots+a_{1n}x_n = b_1\\ a_{21}x_1+a_{22}x_2+\cdots+a_{2n}x_n = b_2\\ --------------\\ a_{31}x_1+a_{n2}x_2+\cdots+a_{nn}x_n = b_n\\ \end{aligned} \right. \quad ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2−−−−−−−−−−−−−−a31x1+an2x2+⋯+annxn=bn
其系数行列式 D = ∣ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋮ a n 1 a n 2 ⋯ a n n ∣ D=\begin{vmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots &a_{2n} \\ \vdots & \vdots & & \vdots \\ a_{n1} & a_{n2} & \cdots & a_{nn} \end{vmatrix} D=∣∣∣∣∣∣∣∣∣a11a21⋮an1a12a22⋮an2⋯⋯⋯a1na2n⋮ann∣∣∣∣∣∣∣∣∣,用常数向量 β = ( b 1 b 2 ⋮ b n ) \beta=\begin{pmatrix} b_1 \\ b_2 \\ \vdots \\ b_n \\ \end{pmatrix} β=⎝⎜⎜⎜⎛b1b2⋮bn⎠⎟⎟⎟⎞替换 D D D的第j列所得的n阶行列式记叙 D j D_j Dj,即
D = ∣ a 11 ⋯ a 1 , j − 1 b 1 a 1 , j − 1 ⋯ a 1 n a 21 ⋯ a 2 , j − 1 b 2 a 2 , j − 1 ⋯ a 2 n ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ a n 1 ⋯ a n , j − 1 b n a n , j − 1 ⋯ a n n ∣ , ( j = 1 , 2 , ⋯ , n ) 。 D=\begin{vmatrix} a_{11} &\cdots& a_{1,j-1} & b_1 & a_{1,j-1}& \cdots & a_{1n} \\ a_{21} &\cdots& a_{2,j-1} & b_2 & a_{2,j-1}& \cdots & a_{2n} \\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ a_{n1} &\cdots& a_{n,j-1} & b_n & a_{n,j-1}& \cdots & a_{nn} \\ \end{vmatrix},(j=1,2,\cdots,n)。 D=∣∣∣∣∣∣∣∣∣a11a21⋮an1⋯⋯⋮⋯a1,j−1a2,j−1⋮an,j−1b1b2⋮bna1,j−1a2,j−1⋮an,j−1⋯⋯⋮⋯a1na2n⋮ann∣∣∣∣∣∣∣∣∣,(j=1,2,⋯,n)。
若 D ≠ 0 D\neq0 D=0,则线性方程组存在唯一解:
x 1 = D 1 D , x 2 = D 2 D , ⋯ , x n = D n D x_1=\frac{D_1}{D},x_2=\frac{D_2}{D},\cdots,x_n=\frac{D_n}{D} x1=DD1,x2=DD2,⋯,xn=DDn
文章中提到用Matlab计算行列式,作为python程序员,当然是抄家伙搞numpy了:
import numpy as np
matrix = [[1,2,3], [4,5,6], [7,8,9]]
# 二维列表转为numpy数组
m = np.array(matrix)
# linalg线性代数包,det计算行列式
det = np.linalg.det(m)