Sistemi lineari (regola di Cramer)

import copy
from numpy.linalg import det as Det

def cramer(A, b):
    n = len(A)
    if(n != len(A[0])): return None
    if(n != len(b)   ): return None        

    dA = Det(A)
    if(dA == 0): return None

    x = n*[0.0]
    for c in range(n):
        cA = copy.deepcopy(A) # La copia di A con b nella colonna c
        for r in range(n):
            cA[r][c] = b[r]
        dcA  = Det(cA)
        x[c] = dcA / dA
    return x

A=[ [2,-1, 5, 1],
    [3, 2, 2,-6],
    [1, 3, 3,-1],
    [5,-2,-3, 3]  ]
B=[-3,-32,-47,49]

X = cramer(A, B)
for i, xi in enumerate(X):
    print("x%i = %f" %(i+1, xi))

Vedi: Rosetta Code: Cramer’s rule: Python

from numpy import linalg # det()

A=[ [2,-1, 5, 1],
    [3, 2, 2,-6],
    [1, 3, 3,-1],
    [5,-2,-3, 3]  ]
B=[-3,-32,-47,49]
C=[[2,-1,5,1],[3,2,2,-6],[1,3,3,-1],[5,-2,-3,3]] # copia di A

X=[]
n=len(B)
DET=linalg.det(A)

for i in range(0,n):
    for j in range(0,n):
        if(i > 0):
            C[j][i-1]=A[j][i-1]
        C[j][i]=B[j]
    x=linalg.det(C)/DET
    X.append(x)

for i in range(0,n):
    print("x%i = %f" %(i+1, X[i]))