行缩减
找到 nxn 矩阵的行列式的最简单方法(实际上也不错)是通过行归约。通过记住一些关于行列式的简单规则,我们可以解决以下形式:
det(A) = α * det(R),其中R是原矩阵的行梯形A,α是某个系数。
找到行梯形矩阵的行列式真的很容易;您只需找到对角线的乘积。求解原始矩阵 A 的行列式然后归结为计算 α,因为您找到行梯形形式 R。
你需要知道的
什么是行梯形?
有关简单定义,请参阅此 [链接](http://stattrek.com/matrix-algebra/echelon-form.aspx)
**注意:** 并非所有定义都要求前导条目为 1,此算法不需要。
您可以使用基本行操作找到 R
交换行,添加另一行的倍数等。
您从行列式的行操作的属性中推导出 α
-
如果B是A的一行乘以某个非零常数ß得到的矩阵,那么
det(B) = ß * det(A)
- 换句话说,您基本上可以从行中“分解”出一个常数,只需将其拉到行列式前面即可。
-
如果B是交换两行A得到的矩阵,那么
det(B) = -det(A)
-
如果B是A中某一行的倍数与另一行相加得到的矩阵,则
det(B) = det(A)
请注意,在大多数情况下,您可以仅使用规则 3 找到行列式(我相信当 A 的对角线没有零时),并且在所有情况下仅使用规则 2 和 3。规则 1 对人类有帮助在纸上做数学,尽量避免分数。
示例
(我做了一些不必要的步骤来更清楚地展示每条规则)
| 2 3 3 1 |
A=| 0 4 3 -3 |
| 2 -1 -1 -3 |
| 0 -4 -3 2 |
R
2 R
3, -α -> α (规则 2)
| 2 3 3 1 |
-| 2 -1 -1 -3 |
| 0 4 3 -3 |
| 0 -4 -3 2 |
R
2 - R
1 -> R
2(规则 3)
| 2 3 3 1 |
-| 0 -4 -4 -4 |
| 0 4 3 -3 |
| 0 -4 -3 2 |
R
2/(-4) -> R
2, -4α -> α(规则 1)
| 2 3 3 1 |
4| 0 1 1 1 |
| 0 4 3 -3 |
| 0 -4 -3 2 |
R
3 - 4R
2 -> R
3, R
4 + 4R
2 -> R
4(规则 3,应用两次)
| 2 3 3 1 |
4| 0 1 1 1 |
| 0 0 -1 -7 |
| 0 0 1 6 |
R
4 + R
3 -> R
3
| 2 3 3 1 |
4| 0 1 1 1 | = 4 ( 2 * 1 * -1 * -1 ) = 8
| 0 0 -1 -7 |
| 0 0 0 -1 |
def echelon_form(A, size):
for i in range(size - 1):
for j in range(size - 1, i, -1):
if A[j][i] == 0:
continue
else:
try:
req_ratio = A[j][i] / A[j - 1][i]
# A[j] = A[j] - req_ratio*A[j-1]
except ZeroDivisionError:
# A[j], A[j-1] = A[j-1], A[j]
for x in range(size):
temp = A[j][x]
A[j][x] = A[j-1][x]
A[j-1][x] = temp
continue
for k in range(size):
A[j][k] = A[j][k] - req_ratio * A[j - 1][k]
return A