gauss more efficient
This commit is contained in:
@@ -44,48 +44,42 @@ def identity(matrix):
|
|||||||
|
|
||||||
return matrix
|
return matrix
|
||||||
|
|
||||||
def gauss(matrix):
|
def gauss(a):
|
||||||
|
|
||||||
i = 0
|
for i in range(a.shape[0]):
|
||||||
k = 0
|
|
||||||
|
|
||||||
while (i < matrix.shape[0]):
|
k = i + 1
|
||||||
|
|
||||||
if (matrix[i][i] == 0):
|
while (k<a.shape[0]):
|
||||||
|
|
||||||
n = i
|
l = 1
|
||||||
|
while (a[i][i] == 0 and l < a.shape[0]):
|
||||||
|
|
||||||
while (matrix[i][i] == 0) and (n < matrix.shape[0]):
|
temp = a[i].copy()
|
||||||
|
a[i] = a[i+l]
|
||||||
|
a[i+l] = temp
|
||||||
|
|
||||||
temp = matrix[i].copy()
|
l += 1
|
||||||
matrix[i] = matrix[n]
|
|
||||||
matrix[n] = temp
|
|
||||||
|
|
||||||
n += 1
|
|
||||||
|
|
||||||
while (k < matrix.shape[0]):
|
|
||||||
|
|
||||||
if (k == i) or (matrix[i][i] == 0):
|
|
||||||
|
|
||||||
|
while (a[k][i] == 0 and (k+1) < a.shape[0]):
|
||||||
k += 1
|
k += 1
|
||||||
|
|
||||||
else:
|
a[k] = a[k] - (a[k][i]/a[i][i])*a[i]
|
||||||
|
|
||||||
mult = matrix[k][i]/matrix[i][i]
|
k += 1
|
||||||
matrix[k] = matrix[k] - mult*matrix[i]
|
|
||||||
k += 1
|
|
||||||
|
|
||||||
i += 1
|
i += 1
|
||||||
k = 0
|
|
||||||
|
|
||||||
i = 0
|
x = np.zeros(a.shape[0])
|
||||||
|
|
||||||
while ((i) < matrix.shape[0]) and (matrix[i][i] != 0):
|
for j in reversed(range(x.shape[0])):
|
||||||
|
|
||||||
matrix[i] = matrix[i]/matrix[i][i]
|
suma = 0
|
||||||
i += 1
|
for k in range (j,a.shape[0]):
|
||||||
|
suma += a[j][k]*x[k]
|
||||||
|
x[j] = (a[j][a.shape[0]] - suma)/a[j][j]
|
||||||
|
|
||||||
return matrix[:,(matrix.shape[0]):]
|
return x
|
||||||
|
|
||||||
def inverse(matrix):
|
def inverse(matrix):
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user