1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
   | import numpy as np
 
def permutation(A,i,k):
    A[i], A[k] = A[k], A[i]
    return
 
def transvection(A,i,k,c):
    m = len(A[0])
    for j in range (0,m):
        A[k][j] -= c*A[i][j]
    return A
 
def recherche_pivot(A,i):
    n = len(A)
    maxi, pivot = abs(A[i][i]), i
    for k in range (i+1,n):
        elem = abs(A[k][i])
        if elem > maxi:
            maxi, pivot = elem, k
    return (pivot)
 
 
from copy import deepcopy   
def triangularisée(A):
    n, m = len(A), len(A[0])
    p = 0
    M = deepcopy(A)
    if n != m:
        Z = np.zeros((n,m))
        s = 0
        return (Z, s) 
    for i in range(n-1):
        k = recherche_pivot(M, i)
        if k != i:
            permutation(M,i,k)
            p += 1
        for k in range(i+1, n):
            transvection(M, i, k, M[k][i] / M[i][i])
    if type(p / 2) != int:
        s = -1
    else:
        s = 1
    return (M, s)
 
def determinant(A):
    Mat = deepcopy(A)
    Mat = triangularisée(Mat)
    n = len(Mat)
    det = 1
    for k in range(0,n-1):
        u = Mat[k][k]
        det *= u
    return (det) | 
Partager