Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- #criar uma função que apresente um menu
- def menu():
- os.system('clear')
- print ('MENU')
- print ('1. Ler Aquivo e Resolver Sistema')
- print ('2. Sair do Programa')
- op = input()
- os.system('clear')
- return op
- #função que mostre na tela uma matriz
- def mostraMatriz(mat):
- for i in range(len(mat[i])):
- for j in range(len(mat[i])):
- if mat[i][j] >= 0:
- print ('%3.5f') % (mat[i][j]),
- else:
- print ('3.5f') % (mat[i][j]),
- print '\n'
- #função para ler a matriz
- def le_matriz(arq):
- return [[float(x) for x in line.split()] for in arq]
- #avaliando se a matriz pode ser resolvida
- def avaliaMatriz(mat):
- j = 0
- av = 1
- for i in range(len(mat)):
- while j < i:
- if mat[i][j] != 0.0:
- av = 0
- j = j + 1
- if av == 1:
- if mat´[i][j] == 0.0:
- av = -1
- return av
- #função que resolve quando a matriz é triangular
- def resolverTri(mat):
- n = len(mat):
- n = len(mat) - 1
- res = []
- for i in range (len(mat)):
- j = len(mat) - 1
- x = []
- r = 0.0
- while (mat[n][j] != 0):
- x.append(mat[n][j])
- j = j - 1
- if j < 0:
- break
- if len(x) == 1:
- res.append(mat[n][-1]/ x[0])
- else:
- i = 0
- for i in range(len(res)):
- r = x[i] * res[i] + r
- res.append((mat[-n][-1] - r) / x[-1])
- n = n - 1
- return res
- #função que acha o maior número entre os valores da coluna passada
- def achaMaior(mat, i, j):
- maior = 0
- maiorIndice = i
- while i < len(mat):
- if abs (mat[i][j]) > maior:
- maior = mat[i][j]
- maiorIndice = i
- i += 1
- return maiorIndice
- #função que resolve a matriz pelo método de Gauss
- def resolveGauss(mat):
- for j in range(len(mat[0]) - 1):
- i = j
- maior = achaMaior(mat, i, j)
- aux = mat[i]
- mat[i] = mat[maior]
- mat[maior] = aux
- j1 = j
- div = mat[i][j]
- while j1 < len(mat[i]):
- mat[i][j1] = mat[i][j1] / div
- j1 += 1
- i += 1
- while i < len(mat):
- mul = mat[i][j]
- for j1 in range (len(mat[0])):
- mat[i][j1] -= mat[j][j1] * mul
- i += 1
- print ('\nMatriz apos pivotacao\n')
- mostraMat(mat)
- r = resolveTri(mat)
- return r
- #resolvendo o sistema
- def main():
- """Le earquivos contendo matrizes de sistemas lineares e os resolve"""
- while True:
- if menu():
- nome_arq = raw_input(
- 'Entre com o nome do arquivo de dados\n=>')
- arq = open(nome_arq, "r")
- mat = le_matriz(arq.readlines())
- print 'Matriz extendida do sistema\n'
- mostraMat(mat)
- aval = avaliaMat(mat)
- if aval == 1:
- print ('Sistema Indeterminado')
- raw_input()
- continue
- else:
- r= resolveGauss(mat)
- for i in range(len(r)):
- print ('x%d=%5.5f') % (i + 1, r[-(i + 1)])
- else:
- exit()
- raw_input()
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement