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]))