Python计算n阶行列式的值

本文将使用Python编写程序计算n阶行列式的值,不借助第三方库;

n阶行列式的定义

一个n阶行列式可以简单定义为:

Python求n阶行列式的值

其中 p1 p2 p3 ... pn 为自然数 1,2,...,n 的一个排列;t 为这个排列的逆序数;

计算n阶行列式

程序可计算1~n阶行列式:

def permute(nums):
    #生成n个元素的全排列
    length = len(nums)

    permutations = []

    def _permute(index=0):

        if index == length:
            permutations.append(nums[0:length])
        
        for i in range(index,length):
            nums[i],nums[index] = nums[index],nums[i]
            _permute(index+1)
            nums[i],nums[index] = nums[index],nums[i]
            
    _permute()

    return permutations


def inversion_number(nums):
    #计算排列的逆序数
    count = 0
    for i in range(len(nums)):

        for j in range(i):

            if nums[j] > nums[i]:

                count += 1

    return count

def calculate(det):
    #计算n阶行列式的值

    if not det:#没有元素
        return 0

    if len(det) == 1:#一阶行列式直接返回值
        return det[0]
    
    #生成 1,..., n的全排列
    permutations = permute([i for i in range(1,len(det)+1)])

    result = 0

    for p in permutations:
        #t为逆序数
        t = inversion_number(p)
        product = (-1)**t
        i = 0
        for pn in p:
            product *= det[i][pn-1] #连乘
            i+=1

        result += product #连加

    return result


A = []
A.append([1]) #1阶行列式
A.append(
    [
        [1,2],
        [3,4]
    ]) #2阶行列式

A.append(
    [
        [1,2,3],
        [4,5,6],
        [7,8,9]
    ]) #3阶行列式

for det in A:
    print("Input:")
    for i in det:
        print(i)
    print("value:",calculate(det),"\n")

运行效果

Input:
1
value: 1

Input:
[1, 2]
[3, 4]
value: -2

Input:
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
value: 0

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/the-nth-order-determinant-in-python.html

分类: 计算机技术
推荐阅读:
Wireshark常用过滤器 Wireshark是一款常用的网络协议分析工具,提供了很多过滤器用于筛选和分析数据包。以下是一些常用的Wireshark过滤器:
一定有你不知道的Python技巧 Python一直以代码简洁著称;想写出艺术般的代码,需要你掌握各种Python技巧,这些技巧有些是语言特性,有些则是广大程序员的经验心得;今天作者就给大家网罗了一些Python技巧,一起来看看吧。
requests实现更复杂的POST 通常,你想使用requests模拟HTML中的表单内容。你只需要将一个字典传递给 data 参数;requests会将你的数据字典自动编码为表单的形式。
pip和pip3有什么区别,用哪个? pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。
Golang实现冒泡排序算法(Bubble Sort) 本文将使用Go语言完成冒泡排序算法(Bubble Sort)的实现;
Python 获取网卡的MAC地址 获取网卡MAC地址可以使用Python标准库中的uuid模块;uuid模块提供了getnode()函数,用于获取机器的MAC地址。这个函数返回一个整数值,表示机器的48位MAC地址,其中高16位可能包含厂商信息。