Guest User

Programa de Python Sistema Linear

a guest
Apr 8th, 2017
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.38 KB | None | 0 0
  1. import os
  2.  
  3. #criar uma função que apresente um menu
  4.  
  5. def menu():
  6.     os.system('clear')
  7.     print ('MENU')
  8.     print ('1. Ler Aquivo e Resolver Sistema')
  9.     print ('2. Sair do Programa')
  10.     op = input()
  11.     os.system('clear')
  12.     return op
  13.  
  14. #função que mostre na tela uma matriz
  15.  
  16. def mostraMatriz(mat):
  17.     for i in range(len(mat[i])):
  18.         for j in range(len(mat[i])):
  19.             if mat[i][j] >= 0:
  20.                 print ('%3.5f') % (mat[i][j]),
  21.             else:
  22.                 print ('3.5f') % (mat[i][j]),
  23.                 print('\n')
  24.  
  25. #função para ler a matriz
  26.  
  27. def le_matriz(arq):
  28.     return [[float(x) for x in line.split()] for i in arq]
  29.  
  30. #avaliando se a matriz pode ser resolvida
  31.  
  32. def avaliaMatriz(mat):
  33.     j = 0
  34.     av = 1
  35.     for i in range(len(mat)):
  36.  
  37.         while j < i:
  38.             if mat[i][j] != 0.0:
  39.                 av = 0
  40.                 j = j + 1
  41.             if av == 1:
  42.                 if mat[i][j] == 0.0:
  43.                     av = -1
  44.     return av
  45.  
  46. #função que resolve quando a matriz é triangular
  47.  
  48. def resolverTri(mat):
  49.     n = len(mat)
  50.     n = len(mat) - 1
  51.     res = []
  52.     for i in range (len(mat)):
  53.         j = len(mat) - 1
  54.         x = []
  55.         r = 0.0
  56.         while (mat[n][j] != 0):
  57.             x.append(mat[n][j])
  58.             j = j - 1
  59.             if j < 0:
  60.                 break
  61.             if len(x) == 1:
  62.                res.append(mat[n][-1]/ x[0])
  63.             else:
  64.                i = 0
  65.             for i in range(len(res)):
  66.                 r = x[i] * res[i] + r
  67.                 res.append((mat[-n][-1] - r) / x[-1])
  68.                 n = n - 1
  69.                 return res
  70.  
  71. #função que acha o maior número entre os valores da coluna passada
  72.  
  73. def achaMaior(mat, i, j):
  74.     maior = 0
  75.     maiorIndice = i
  76.     while i < len(mat):
  77.         if abs (mat[i][j]) > maior:
  78.             maior = mat[i][j]
  79.             maiorIndice = i
  80.         i += 1
  81.     return maiorIndice
  82.  
  83. #função que resolve a matriz pelo método de Gauss
  84.  
  85. def resolveGauss(mat):
  86.     for j in range(len(mat[0]) - 1):
  87.         i = j
  88.         maior = achaMaior(mat, i, j)
  89.         aux = mat[i]
  90.         mat[i] = mat[maior]
  91.         mat[maior] = aux
  92.         j1 = j
  93.         div = mat[i][j]
  94.         while j1 < len(mat[i]):
  95.             mat[i][j1] = mat[i][j1] / div
  96.             j1 += 1
  97.         i += 1
  98.         while i < len(mat):
  99.             mul = mat[i][j]
  100.             for j1 in range (len(mat[0])):
  101.                 mat[i][j1] -= mat[j][j1] * mul
  102.             i += 1
  103.  
  104.             print ('\nMatriz apos pivotacao\n')
  105.             mostraMat(mat)
  106.             r = resolveTri(mat)
  107.     return r
  108.  
  109. #resolvendo o sistema
  110.  
  111. def main():
  112.     """Le earquivos contendo matrizes de sistemas lineares e os resolve"""
  113.  
  114.     while True:
  115.         if menu():
  116.             nome_arq = raw_input(
  117.         'Entre com o nome do arquivo de dados\n=>')
  118.             arq = open(nome_arq, "r")
  119.             mat = le_matriz(arq.readlines())
  120.  
  121.             print('Matriz extendida do sistema\n')
  122.             mostraMat(mat)
  123.  
  124.             aval = avaliaMat(mat)
  125.             if aval == 1:
  126.                 print ('Sistema Indeterminado')
  127.                 raw_input()
  128.                 continue
  129.             else:
  130.                 r= resolveGauss(mat)
  131.             for i in range(len(r)):
  132.                 print ('x%d=%5.5f') % (i + 1, r[-(i + 1)])
  133.     exit()
  134.     raw_input()
  135.     main()
Advertisement
Add Comment
Please, Sign In to add comment