RuleOfCramer/threaded.attic

63 lines
1.7 KiB
Plaintext
Raw Permalink Normal View History

2016-08-07 12:24:41 +02:00
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