63 lines
1.7 KiB
Plaintext
63 lines
1.7 KiB
Plaintext
![]() |
class DetCalcThread(threading.Thread):
|
||
|
def __init__(self, name, m):
|
||
|
threading.Thread.__init__(self, name = name)
|
||
|
self.m = m
|
||
|
self.setDaemon(True)
|
||
|
print("Thread %s created" % self.name)
|
||
|
|
||
|
def run(self):
|
||
|
print("Thread %s started" % self.name)
|
||
|
self.d = self.det(self.m)
|
||
|
print("Thread %s done" % self.name)
|
||
|
|
||
|
def getValue(self):
|
||
|
return self.d
|
||
|
|
||
|
def det(self, m):
|
||
|
print("Start building permutations for thread %s" % self.name)
|
||
|
indexListI = range(1, len(m)+1)
|
||
|
indexListJ = s_permutations(indexListI)
|
||
|
print("Permutations for thread %s ready" % self.name)
|
||
|
|
||
|
summ = 0
|
||
|
for indexJ in indexListJ:
|
||
|
sign = indexJ[1]
|
||
|
prod = sign
|
||
|
for indexI in indexListI:
|
||
|
prod *= m[indexI-1][indexJ[0][indexI-1]-1]
|
||
|
print("Thread %s stepped" % self.name)
|
||
|
summ += prod
|
||
|
|
||
|
return summ
|
||
|
|
||
|
|
||
|
|
||
|
def threadedSolve(g):
|
||
|
coeffMatrix = g[:-1]
|
||
|
coeffThread = DetCalcThread('coeff', coeffMatrix)
|
||
|
coeffThread.start()
|
||
|
|
||
|
order = len(g) - 1
|
||
|
varThreads = []
|
||
|
for i in range(order):
|
||
|
varMatrix = []
|
||
|
for j in range(order):
|
||
|
if (i == j):
|
||
|
varMatrix.append(g[order])
|
||
|
else:
|
||
|
varMatrix.append(g[j])
|
||
|
detCalcThread = DetCalcThread("%i" % i, varMatrix)
|
||
|
detCalcThread.start()
|
||
|
varThreads.append(detCalcThread)
|
||
|
|
||
|
coeffThread.join()
|
||
|
coeffDet = coeffThread.getValue()
|
||
|
|
||
|
unknowns = []
|
||
|
for varThread in varThreads:
|
||
|
varThread.join()
|
||
|
varDet = varThread.getValue()
|
||
|
var = varDet / coeffDet
|
||
|
unknowns.append(var)
|
||
|
|
||
|
return unknowns
|