I'm trying to make a function where I can give it a matrix and the constants and solving it using crammers rule. This will soon be used with complex numbers.
import numpy as np
import sympy as smp
def crammer(matrix, constants):
D = np.linalg.det(matrix)
dets = []
dets.append(D)
for i in range(0, len(constants[0]), 1):
Dv = matrix
Dv[:, i:i+1] = constants.T
print(Dv)
Dd = np.linalg.det(Dv)
dets.append(Dd)
return dets
Mat = np.array([[2, 1,-1],
[3, 2, 2],
[4,-2, 3]])
Con = np.array([[1,13,9]])
print(crammer(Mat, Con))
I get this as the result:
[33.000000000000014, 33.000000000000014, 0.0, 0.0]
The first two are right the Determinate is D:33 and Dx:33 but Dy and Dz should be Dy:66 and Dz: 99.
following Crammers Rule it should be:
[[ 1 1 -1]
[13 2 2]
[ 9 -2 3]]
[[ 2 1 -1]
[ 3 13 2]
[ 4 9 3]]
[[ 2 2 1]
[ 3 2 13]
[ 4 -2 9]]
when I print Dv at the beginning of the for loop I get the following:
[[ 1 1 -1]
[13 2 2]
[ 9 -2 3]]
[[ 1 1 -1]
[13 13 2]
[ 9 9 3]]
[[ 1 1 1]
[13 13 13]
[ 9 9 9]]
I tried printing the matrix at the top of the for loop as well and I get the same problem. As I can tell my for loop is is changing my original matrix and I don't understand why.