Skip to content

Instantly share code, notes, and snippets.

@cesarvargas00
Last active October 6, 2018 01:47
Show Gist options
  • Save cesarvargas00/b51d0e22af8223298011c4b5d28e076f to your computer and use it in GitHub Desktop.
Save cesarvargas00/b51d0e22af8223298011c4b5d28e076f to your computer and use it in GitHub Desktop.
Implementação do método de Gauss em python
# ALUNO: Cesar Vargas
# TIA: 30908639
import copy
# Exercício 1
def triangular(entrada):
saida = [None for x in range(len(entrada))]
for i in reversed(range(0,len(entrada[0])-1)): #for (int i=sizeof(entrada)/sizeof(entrada[0]); i > 0; i--)
soma = 0
for j in reversed(range(i,len(entrada))):
if i != j: #se não for o elemento pivô
soma += saida[j]*entrada[i][j] #calcula e coloca tudo na variavel soma pra subtrair depois
else: # se não for elemento pivô, calcula o x( faz a regressão )
saida[i]=(entrada[i][len(entrada[0])-1]-soma)/entrada[i][i] #subtrai soma
break
return saida
#Exercício 2
def escalonamento(entrada):
n = len(entrada) # calculando o n (numero de variaveis e equacoes)
anterior = copy.deepcopy(entrada) # usando o deepcopy para fazer a cópia do vetor
proximo = copy.deepcopy(entrada)
for k in range(1,n): #k iterações de 2 em diante (1, por conta do índice começar com 0)
if proximo[k][k] == 0: #caso em que o pivô é nulo.
return None #implementar tratamento (troca de linha)
anterior = copy.deepcopy(proximo)
for i in range(n): # percorrendo linhas
for j in range(n+1): # e as colunas (n+1 por conta do `b` da matriz aumentada)
if i < k: # aplicando o algoritmo
proximo[i][j] = anterior[i][j]
elif i > k-1 and j < k:
proximo[i][j] = 0
else:
proximo[i][j] = anterior[i][j]-(anterior[i][k-1]/anterior[k-1][k-1]*anterior[k-1][j])
return proximo #pronto, transformou em matriz triangular superior equivalente à matriz aumentada do início
#Exercício 3
def gauss(entrada):
return triangular(escalonamento(entrada))
###########
###TESTE###
###########
#transforma em:
#[[2,0,0,0,3],[0,1.5,0,0,3],[0,0,0.5,0,-0.6],[0,0,0,1,3]]
# e depois dá a saída utilizando a função triangular.
entrada = [[2,0,0,0,3],[1,1.5,0,0,4.5],[0,-3,0.5,0,-6.6],[2,-2,1,1,0.8]]
print(gauss(entrada))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment