Pagini recente » Cod sursa (job #1943667) | Cod sursa (job #1740598) | Cod sursa (job #1669496) | Cod sursa (job #600062) | Cod sursa (job #2658576)
fin = open("gauss.in", "r")
fout = open("gauss.out", "w")
sir = fin.readline()
s = list([int(x) for x in sir.split()])
n = s[0]
m = s[1]
A = list()
for i in range(n):
sir = fin.readline()
s = list([float(x) for x in sir.split()])
A.append(s)
fin.close()
i = j = 0
eps = 1e-9
while i < n and j <= m:
ok = False
k = i
while k < n and ok == False:
if A[k][j] < -eps or A[k][j] > eps:
ok = True
else:
k = k + 1
if ok == True:
if k > i:
for h in range(m + 1):
A[i][h], A[k][h] = A[k][h], A[i][h]
for h in range(j + 1, m + 1):
A[i][h] /= A[i][j]
A[i][j] = 1
for u in range(i + 1, n):
for l in range(j + 1, m + 1):
A[u][l] -= A[u][j] * A[i][l]
A[u][j] = 0
i = i + 1
j = j + 1
x = [0] * (m + 1)
inc = False
for i in range(n - 1, -1, -1):
for j in range(m + 1):
if A[i][j] > eps or A[i][j] < -eps:
if j == m: # singura valoare nenula de pe linia i este rezulatul, deci sistemul e incompatibil
fout.write("Imposibil!\n")
i = -1
inc = True
break
x[j] = A[i][m]
for k in range(j + 1, m + 1):
x[j] -= x[k] * A[i][k]
break
if inc == False:
for i in range(m):
fout.write(str(round(x[i], 8)) + " ")
fout.write("\n")
fout.close()