Sunteți pe pagina 1din 5

SIC-316 ARQUITECTURA DE COMPUTADORES

TTULO: Eliminacin gaussiana


INTEGRANTES: Alexander Coronel, Christian Carrera
FECHA: 15/06/17

Definicin:

Cdigo de la implementacin:

# -*- coding: utf-8 -*-


"""
Created on Sat May 06 09:34:07 2017
"""
import numpy as np
import Tkinter as t
import random as r
import math as m
import sys as s
n=0

def determinante(matriz):
ma = []
l = len(matriz[0])
for linea in matriz:

1
SIC-316 ARQUITECTURA DE COMPUTADORES

ma.append(linea[0:l-1])
return np.linalg.det(ma)

def evitarCeros(matriz,indice): #evito que los pivotes saen ceros


n = len(matriz)-1
l = False
while(l==False): #hasta que l sea verdadero, es decir que el elemento no es cero
rand = r.randint(0,n)
if(rand!=indice): #para evitar que se sume a si misma la fila
matriz[indice] = matriz[indice]+matriz[rand] #sumo dos filas para que el el elemento de
la diagonal no sea cero
if(matriz[indice][indice]!=0): #verifico si ya no es cero el elemento y termino o continuo
en el caso contrario
l=True
return matriz[indice]

def generarArchivo(n):

sis=open("matriz10.csv","w")
vector=""
i =0
for i in range(n):
j =0
for j in range (n+1):
if (j!=n):
vector+=str (r.random ()*100)+";"
else:
vector+=str (r.random ()*100)+"\n"
sis.write(str(vector))

vector=""
sis.close ()

def eliminacionGaussiana(matriz):
n = len(matriz)
k= 1
i=0

while(k<n):
if(matriz[i][i]==0): #verifico si el pivote es cero
matriz[i] = evitarCeros(matriz,i)#llamo al metodo anterior para que el pivote sea
diferente de cero

matriz[i] = (matriz[i]/float(matriz[i][i])) #que sea 1 el pivote


for j in range(k,n):

2
SIC-316 ARQUITECTURA DE COMPUTADORES

matriz[j] = matriz[j]-float((matriz[j][i]))*(matriz[i])#operaciones para hacer ceros los


elementos debajo del pivote
k=k+1
i=i+1
if(matriz[n-1][n-1]==0): #evito que el ultimo pivote sea cero
matriz[n-1] = evitarCeros(matriz,n-1)

matriz[n-1] = matriz[n-1]/matriz[n-1][n-1] #ultimo pivote sea 1

k=n-2
i=n-1
while(i>=0): #misma operacion anterior, solo que se hacen ceros los elementos que estan
arribas del pivote y se empieza desde el ultimo, es decir de manera ascendente
for j in range(k,-1,-1):
matriz[j]= matriz[j]-matriz[j][i]*matriz[i]
k-=1
i-=1

soluciones = []
soltxt = open("soluciones.txt","w") #guardo en un archivo
i=0
for i in range(n): #guardo los resultados en una lista
soluciones.append("x"+str(i+1)+" = "+str(matriz[i][n]))
soltxt.write("x"+str(i+1)+" = "+str(matriz[i][n])+"\n")

return matriz,soluciones

def leerArchivo(): #leo un archivo csv, esta implementacion solo funciona con elementos enteros
en la matriz
matriz = []

archivo = open("matriz10.csv","r")
for line in archivo:
n = len(line)
matriz.append(line[0:n-1].split(";"))

matriz = np.array(matriz,dtype=float)

return matriz

def verifSistema(matriz):#verifica que si es una matrz n*(n+1)

if(len(matriz)==len(matriz[0]-1)):
return True

3
SIC-316 ARQUITECTURA DE COMPUTADORES

else:
return False

if __name__=="__main__":

n = s.argv[1]

generarArchivo(int(n))
print "******************************Calculador de Sistema de
Ecuaciones******************************************************\n"
sistema = leerArchivo()
print sistema
print len(sistema[0])
print
"\n*****************************************************************************
****************************************\n"
print "-> Matriz Obtenida desde el archivo de extension .csv\n",sistema
if(determinante(sistema)!=0):
matriz,sol = eliminacionGaussiana(sistema)
print
"*******************************************RESULTADOS**********************
****************************************\n"
print "-> se ha guardado en un archivo \n"
ar = open("soluciones.txt","r")
print ar.read()

print
"\n*****************************************************************************
****************************************\n"
print "-> Matriz Gaussiana \n",matriz
print
"\n*****************************************************************************
****************************************\n"
print "-> Determinante De la Matriz\n",determinante(sistema)
print
"\n*****************************************************************************
****************************************\n"
else:
print
"\n*****************************************************************************
****************************************\n"
print "tiene infinitas soluciones o no tiene solucion"
print "\n*******************************************Guardando en Archivo la Matriz
Gaussiana***********************************\n"

4
SIC-316 ARQUITECTURA DE COMPUTADORES

S-ar putea să vă placă și