4.1 行列式

import numpy as np
# 代码4-1
# 方法一:使用det函数求行列式
arr = np.array([[1, 1],[30, 20]])      # 创建分母的二维数组
arr1 = np.array([[80, 1],[2050, 20]])  # 创建分子的二维数组
arr2 = np.array([[1, 80],[30, 2050]])  # 创建分子的二维数组
# 求解行列式
D = np.linalg.det(arr)
D1 = np.linalg.det(arr1)
D2 = np.linalg.det(arr2)
print('方程组的解x1为:', D1 / D)
print('方程组的解x2为:', D2 / D)
方程组的解x1为: 44.99999999999996
方程组的解x2为: 35.000000000000014
# 方法二:使用solve函数解线性方程组
D = np.array([[1, 1],[30, 20]])  # 创建系数行列式
arr = np.array([80, 2050])
x = np.linalg.solve(D, arr)
print('方程组的解为:', x)
方程组的解为: [45. 35.]
# 代码4-2
arr = np.array([[4, 6, 8],[4, 6, 9],[5, 6, 8]])  # 创建三阶行列式
print('行列式的解为:', np.linalg.det(arr))
行列式的解为: 5.999999999999996
# 代码4-3
# 方法一:使用det函数求行列式
arr = np.array([[4, 6, 8],[4, 6, 9],[5, 6, 8]])          # 创建分母的三维数组
arr1 = np.array([[2.74, 6, 8],[2.76, 6, 9],[2.89, 6, 8]])  # 创建分子的三维数组
arr2 = np.array([[4, 2.74, 8],[4, 2.76, 9],[5, 2.89, 8]])  # 创建分子的三维数组
arr3 = np.array([[4, 6, 2.74],[4, 6, 2.76],[5, 6, 2.89]])  # 创建分子的三维数组
# 求解行列式
D = np.linalg.det(arr)
D1 = np.linalg.det(arr1)
D2 = np.linalg.det(arr2)
D3 = np.linalg.det(arr3)
print('方程组的解x1为:', D1 / D)
print('方程组的解x2为:', D2 / D)
print('方程组的解x3为:', D3 / D)
方程组的解x1为: 0.14999999999999994
方程组的解x2为: 0.33000000000000074
方程组的解x3为: 0.019999999999999574
# 方法二:使用solve函数解线性方程组
D = np.array([[4, 6, 8],[4, 6, 9],[5, 6, 8]])  # 创建系数行列式
arr = np.array([2.74, 2.76, 2.89])
x = np.linalg.solve(D, arr)
print('方程组的解为:', x)
方程组的解为: [0.15 0.33 0.02]
# 代码4-4
def amount(b):
# 计算b中大于b中元素的个数
    counts = [np.sum(b[:i] > bb) for i,bb in enumerate(b)] 
    return np.sum(counts)
"""
for i, bb in enumerate(b):
    counts = [np.sum(b[:i] > bb)]
"""
a = np.array([4,2,5,3,1])
print('逆序数为:', amount(a))
逆序数为: 7
# 代码4-5
D = np.array([[4, 6, 8],[4, 6, 9],[5, 6, 8]])  # 创建系数行列式
DT = D.T                           # 创建系数行列式的转置矩阵
print('行列式D的解为:', np.linalg.det(D))
print('行列式D的转置行列式的解为:', np.linalg.det(DT))
行列式D的解为: 5.999999999999996
行列式D的转置行列式的解为: 6.0
# 代码4-6
D = np.array([[4, 6, 8],[4, 6, 9],[5, 6, 8]]) 
D1 = np.array([[4, 6, 9],[4, 6, 8],[5, 6, 8]])
print('行列式D的解为:', np.linalg.det(D))
print('行列式D1的解为:', np.linalg.det(D1))
行列式D的解为: 5.999999999999996
行列式D1的解为: -5.999999999999996
# 代码4-7
D = np.array([[4, 6, 8],[4, 6, 8],[5, 6, 8]]) 
print('行列式D的解为:', np.linalg.det(D))
行列式D的解为: 0.0
# 代码4-8
D = np.array([[4, 6, 8],[4, 6, 9],[5, 6, 8]])  # 创建系数行列式
k = 2
D1 = np.array([[4*2, 6*2, 8*2],[4, 6, 9],[5, 6, 8]])
print('行列式D1的解为:', np.linalg.det(D1))
print('行列式D * k的解为:', np.linalg.det(D) * k)
行列式D1的解为: 11.999999999999995
行列式D * k的解为: 11.999999999999991
# 代码4-9
D = np.array([[2, 3, 4],[4, 6, 8],[5, 6, 8]])
print('行列式D的解为:', np.linalg.det(D))
行列式D的解为: 0.0
# 代码4-10
D1 = np.array([[4, 3, 8],[4, 3, 9],[5, 3, 8]]) 
D2 = np.array([[4, 3, 8],[4, 3, 9],[5, 3, 8]])  
D = np.array([[4, 6, 8],[4, 6, 9],[5, 6, 8]]) 
print('行列式D1的解为:', np.linalg.det(D1))
print('行列式D2的解为:', np.linalg.det(D2))
print('行列式D的解为:', np.linalg.det(D))
行列式D1的解为: 2.9999999999999982
行列式D2的解为: 2.9999999999999982
行列式D的解为: 5.999999999999996
# 代码4-11
D = np.array([[4, 6, 8],[4, 6, 9],[5, 6, 8]])
D1 = np.array([[4, 6, 8],[4, 6, 9],[7, 9, 12]])
print('行列式D的解为:', np.linalg.det(D))
print('行列式D1的解为:', np.linalg.det(D1))
行列式D的解为: 5.999999999999996
行列式D1的解为: 6.000000000000003
# 代码4-12
D = np.array([[4, 0, 0],[4, 6, 9],[5, 6, 8]])
A12 = np.array([[6, 9],[6, 8]])
print('行列式D的解为:', np.linalg.det(D))
print('行列式A12的解为:', np.linalg.det(A12))
行列式D的解为: -24.000000000000025
行列式A12的解为: -6.0
# 代码4-13
D = np.array([[4, 6, 8],[4, 6, 9],[5, 6, 8]])
# 求第1行的代数余子式
M11 = np.array([[6, 9],[6, 8]])
M12 = np.array([[4, 9],[5, 8]])
M13 = np.array([[4, 6],[5, 6]])
A11 = np.linalg.det(M11)
A12 = np.linalg.det(M12)
A13 = np.linalg.det(M13)
A12 = A12 * (-1)
print('第2行与第1行的代数余子式的乘积为:', D[1][0] * A11 + D[1][1] * A12 + D[1][2] * A13)
第2行与第1行的代数余子式的乘积为: 1.4210854715202004e-14

你可能感兴趣的:(大数据数学基础,算法,python,线性代数)