在Python中计算n阶行列式的值,包含逆序数和全排列算法

基于 python 的n阶行列式求值算法介绍

  • n阶行列式求值的数学计算公式
  • 依赖算法
    • 1.逆序数算法
    • 2.全排列算法(递归算法)
  • 行列式求值算法

n阶行列式求值的数学计算公式

在Python中计算n阶行列式的值,包含逆序数和全排列算法_第1张图片

依赖算法

1.逆序数算法

代码如下:

def count_inversion_number(number_list: list):
    inversion_number = 0  # 逆序数
    for index, number in enumerate(number_list):  # 遍历数组中每一个数
        later_number_list = number_list[index + 1:]  # 将每一个数后面的所有数生成为一个数组用来和这个数比较
        for later_number in later_number_list:
            if number > later_number:  # 如果这个数大于后面的其中数
                inversion_number += 1  # 逆序+1
    return inversion_number

2.全排列算法(递归算法)

代码如下:

def permute(item_list: list):
    if len(item_list) <= 1:  # 如果待递归列表中元素的个数小于或等于1个则返回这个元素,也就是递归最大的深度
        return [item_list] 
    p_list = []  # 所有排列的列表
    for index in range(len(item_list)):  # 从第一个元素开始遍历
        r_list = item_list[:index] + item_list[index + 1:]  # 待递归的元素列表包含此元素之前和之后的所有元素
        p = permute(r_list)  # 进行递归
        for items in p:  # 遍历所有子排列
            p_list.append(item_list[index:index + 1] + items)  # 将当前元素的子排列合并到一起,作为一次排列添加到所有排列的列表
    return p_list

行列式求值算法

代码如下:

def evaluate_det(det_list: list):
    value = 0  # 行列式的值
    order = len(det_list)  # 行列式的阶
    column_indexes_list = permute(list(range(order)))  # 算出行列式以行展开的所有列标的可能排列,并保存到一个列表
    for column_indexes in column_indexes_list:  # 遍历每一种列标组合
        general_formula_value = (-1) ** count_inversion_number(column_indexes)  # 这里判断一般式的系数,以列标排列的奇偶性决定
        for index in range(order):  # 因为行列式行和列都是相同的个数,所以可以一起遍历
            general_formula_value *= det_list[index][column_indexes[index]]  # 向一般式中乘以元素,是几阶行列式就乘以几个元素
        value += general_formula_value  # 将一般式的值加到行列式的值中
    return value

总结:以上就是行列式求值算法的代码和讲解,有疑惑的CV大神欢迎评论或留言。

你可能感兴趣的:(Python数学轮子,python,算法,开发语言)