Site-T

SUP-project


  • Home
  • Archive
  • Tags
  •  

© 2019 Time Looper

Theme Typography by Makito

Proudly published with Hexo

sup-007 线性代数相关脚本

Posted at 2019-09-15 production 

线性代数相关脚本

前言注意事项

函数本身基本上是配合使用的,所以请注意这一点。

求矩阵行列式

def det_element(arr,now,posi,level,sym,n):
    #now:目前的值,posi:状压标号,level:层数,sym:当前逆序数的值
    if level== n :
        if sym : return -now
        else:return now
    res=0
    for i in range(n):
        if (1<<i)&posi:
            continue
        mid=posi>>i
        tmpsym=sym
        while mid:
            tmpsym+=1
            mid-=mid&(-mid)
        tmpsym%=2
        res+=det_element(arr,now*arr[level][i],posi|(1<<i),level+1,tmpsym,n)
    return res

def getdet(arr,n):#arr:矩阵,n矩阵阶数
    res=0
    for i in range(n):
        res+=det_element(arr,arr[0][i],1<<i,1,0,n)#递归求解
    return res

求伴随矩阵

def getAdjugate(arr,n):
    res=[[]for x in range(n)]
    for i in range(n):
        for j in range(n):
            tmparr=[[]for x in range(n-1)]
            flag=0
            for m in range(n):
                if m==i:
                    flag=1
                    continue
                for k in range(n):
                    if k==j:continue
                    tmparr[m-flag].append(arr[m][k])
            if (i+j)%2:
                res[j].append(-getdet(tmparr,n-1))
            else:
                res[j].append(getdet(tmparr,n-1))
    return res

求逆矩阵

def getrev(arr,n):
    Adjugate=getAdjugate(arr,n)
    det=getdet(arr,n)
    res=[[]for x in range(n)]
    for i in range(n):
        for j in range(n):
            res[i].append(Adjugate[i][j]/det)
    return res

Share 

 Previous post: sup-extra 二进制组周练题解汇总 Next post: sup-006 pwn常用知识索引 

© 2019 Time Looper

Theme Typography by Makito

Proudly published with Hexo