예제 #1
0
 def mostrarAyuda(self):
     AYUDA = "Para una función conocida introduza la expresión utilizando x para denotar la variable." + \
     "\nSe aceptan las operaciones básicas (+,-,*,/,^), PI, E, log, sin, cos, tan, asin, acos, atan y exp." + \
     "\nPara integrar una función desconocida es necesario que ponga los valores conocidos en un" + \
     "\narchivo de texto con dos columnas. En la primera van los puntos y en la segunda las evaluaciones." + \
     "\nLos puntos deben estar a la misma distancia uno del otro, de lo contrario no se podrá integrar."
     mostrarAviso(AYUDA)
예제 #2
0
def gestionVerificacionDeterminante (archivo, tolerancia, area_texto):
    area_texto.delete('1.0', 'end')

    #El bloque se encarga de cerrar automáticamente el archivo pase lo que pase.
    try:
        with open(archivo, 'r') as archivo_matriz:
            numero_ecuaciones = int(archivo_matriz.readline())

            if numero_ecuaciones >= 1:
                matriz = [list(map(float,line.split(' '))) for line in archivo_matriz if line.strip() != ""]

                area_texto.insert('end', "Sistema con ", str(numero_ecuaciones), " ecuaciones.\nMatriz capturada.\n")
                imprimirMatriz(matriz, area_texto)
                area_texto.insert('end', '\n')

                escalarMatriz(matriz)

                area_texto.insert('end', "\nMatriz escalada.\n")
                imprimirMatriz(matriz, area_texto)
                area_texto.insert('end', '\n')

                tolerancia_determinante = (float)(tolerancia)

                """
                1. Devuelve la matriz triangular superior.
                2. Devuelve el numero de intercambios de renglon.
                """
                matriz_ts = eliminacionGaussianaPivoteoParcial(matriz)

                area_texto.insert('end', "\nMatriz triangular superior luego de ser aplicada eliminación gaussiana con pivoteo parcial.\n")
                imprimirMatriz(matriz_ts[0], area_texto)
                area_texto.insert('end', '\n')

                determinante = calcularDeterminanteTriangular(matriz_ts[0], matriz_ts[1])

                area_texto.insert('end', "\nEl determinante de la matriz triangular superior es: " + str(determinante) + "\n")

                if abs(determinante) < tolerancia_determinante:
                    mostrarAviso("El sistema está mal condicionado. Si de todos modos quiere continuar con el proceso, oprima el botón Calcular.")

                return matriz_ts[0]
            else:
                area_texto.insert('end', "El número de ecuaciones capturado es menor a 1, por favor revise su archivo de texto.")
    except IOError:
        area_texto.insert('end', "Ha ocurrido un error al manejar el archivo de texto. Puede ser que el archivo no exista o haya faltado la extensión .txt. ")
        area_texto.insert('end', "Por favor revise el campo de texto.")
    except ValueError:
        area_texto.insert('end', "Ha ocurrido un error al leer alguna de las entradas de la matriz o alguno de los datos de los campos. Se detectó un valor no numérico. ")
        area_texto.insert('end', "Por favor revise el archivo de texto.")
    except NoHaySolucionUnicaExcepcion as exc:
        area_texto.insert('end', exc.mensaje)
    except Exception as exc2:
        area_texto.insert('end', "Ha ocurrido un error: " + exc2.message)
예제 #3
0
def gestionVerificacionDominanciaDiagonal (archivo, area_texto):
    area_texto.delete('1.0', 'end')

    #El bloque se encarga de cerrar automáticamente el archivo pase lo que pase.
    try:
        with open(archivo, 'r') as archivo_matriz:
            numero_ecuaciones = int(archivo_matriz.readline())

            if numero_ecuaciones >= 1:
                matriz = [list(map(float,line.split(' '))) for line in archivo_matriz if line.strip() != ""]

                area_texto.insert('end', "Sistema con ", str(numero_ecuaciones), " ecuaciones.")
                area_texto.insert('end', "Matriz capturada.")
                area_texto.insert('end', '\n')
                imprimirMatriz(matriz, area_texto)
                area_texto.insert('end', '\n')

                #Separa la matriz aumentada en la matriz asociada al SEL y el vector b de términos independientes.
                vector_b = [[matriz[i][numero_ecuaciones]] for i in range(0, numero_ecuaciones)]
                for i in range(0, len(matriz)):
                    del matriz[i][numero_ecuaciones]

                if verificarDominanciaDiagonal(matriz, vector_b):
                    area_texto.insert('end', "La matriz está bien condicionada.\n")
                    area_texto.insert('end', "Matriz luego de la verificación:\n")
                    imprimirMatriz(matriz, area_texto)
                else:
                    mostrarAviso("La matriz no es diagonalmente dominante.\nSi quiere continuar, introduzca el máximo de iteraciones y oprima el botón.")

                return matriz, vector_b
            else:
                area_texto.insert('end', "El número de ecuaciones capturado es menor a 1, por favor revise su archivo de texto.")
    except IOError:
        area_texto.insert('end', "Ha ocurrido un error al manejar el archivo de texto. Puede ser que el archivo no exista o haya faltado la extensión .txt. ")
        area_texto.insert('end', "Por favor revise el campo de texto.")
    except ValueError:
        area_texto.insert('end', "Ha ocurrido un error al leer alguna de las entradas de la matriz o alguno de los datos de los campos. Se detectó un valor no numérico. ")
        area_texto.insert('end', "Por favor revise el archivo de texto.")
    except Exception as exc4:
        area_texto.insert('end', "Ha ocurrido un error: " + exc4.message)
예제 #4
0
 def mostrarAyuda(self):
     AYUDA = "Para generar el polinomio sólo se requiere que ponga los puntos y evaluaciones conocidas" + \
     "\nen un archivo de texto en dos columnas. La primera con los puntos y la segunda con las evaluaciones." + \
     "\nCada dato debe ser separado con un espacio y cada renglón del archivo será tomado como una fila."
     mostrarAviso(AYUDA)
예제 #5
0
def gestionVerificacionIdentidad (archivo, cifras, tolerancia, area_texto):
    area_texto.delete('1.0', 'end')

    #El bloque se encarga de cerrar automáticamente el archivo pase lo que pase.
    try:
        with open(archivo, 'r') as archivo_matriz:
            numero_ecuaciones = int(archivo_matriz.readline())

            if numero_ecuaciones >= 1:
                matriz = [list(map(float,line.split(' '))) for line in archivo_matriz if line.strip() != ""]

                cifras_redondeo = (int)(cifras)

                redondearEntradasMatriz(matriz, cifras_redondeo)

                area_texto.insert('end', "Sistema con ", str(numero_ecuaciones), " ecuaciones.")
                area_texto.insert('end', "Matriz capturada con redondeo aplicado a cada entrada.")
                area_texto.insert('end', '\n')
                imprimirMatriz(matriz, area_texto)
                area_texto.insert('end', '\n')

                escalarMatrizRedondeo(matriz, cifras_redondeo)

                area_texto.insert('end', "Matriz escalada.")
                area_texto.insert('end', '\n')
                imprimirMatriz(matriz, area_texto)
                area_texto.insert('end', '\n')

                #Separa la matriz aumentada en la matriz asociada al SEL y el vector b de términos independientes.
                vector_b = [[matriz[i][numero_ecuaciones]] for i in range(0, numero_ecuaciones)]
                for i in range(0, len(matriz)):
                    del matriz[i][numero_ecuaciones]

                matriz_inversa = invertirMatrizRedondeo(matriz, cifras_redondeo)

                area_texto.insert('end', "Matriz inversa.")
                area_texto.insert('end', '\n')
                imprimirMatriz(matriz_inversa, area_texto)
                area_texto.insert('end', '\n')

                tolerancia_acondicionamiento = (float)(tolerancia)

                identidad = multiplicarMatricesRedondeo(matriz_inversa, matriz, cifras_redondeo)

                area_texto.insert('end', "Matriz identidad.")
                area_texto.insert('end', '\n')
                imprimirMatriz(identidad, area_texto)
                area_texto.insert('end', '\n')

                if verificarErrorIdentidad(identidad, tolerancia_acondicionamiento, cifras_redondeo):
                    area_texto.insert('end', "La matriz está bien condicionada.\n")
                else:
                    mostrarAviso("La matriz está mal condicionada.\nSi quiere continuar, introduzca el máximo de iteraciones y la tolerancia del error en las soluciones,  y oprima el botón Calcular.")

                return matriz, matriz_inversa, vector_b
            else:
                area_texto.insert('end', "El número de ecuaciones capturado es menor a 1, por favor revise su archivo de texto.")
    except IOError:
        area_texto.insert('end', "Ha ocurrido un error al manejar el archivo de texto. Puede ser que el archivo no exista o haya faltado la extensión .txt. ")
        area_texto.insert('end', "Por favor revise el campo de texto.")
    except ValueError:
        area_texto.insert('end', "Ha ocurrido un error al leer alguna de las entradas de la matriz o alguno de los datos de los campos. Se detectó un valor no numérico. ")
        area_texto.insert('end', "Por favor revise el archivo de texto.")
    except NumeroCifrasRedondeoExcepcion as exc:
        area_texto.insert('end', exc.mensaje)
    except NoHaySolucionUnicaExcepcion as exc2:
        area_texto.insert('end', exc2.mensaje)
    except Exception as exc4:
        area_texto.insert('end', "Ha ocurrido un error: " + exc4.message)
예제 #6
0
 def mostrarAyuda(self):
     AYUDA = "Introduza la expresión de la función utilizando x para denotar la variable." + \
     "\nSe aceptan las operaciones básicas (+,-,*,/,^), PI, E, log, sin, cos, tan, asin, acos, atan y exp."
     mostrarAviso(AYUDA)
예제 #7
0
    def mostrarAcerca(self):
        INTRODUCCION = "Este programa es una recopilación de cada método numérico visto en Análisis Numérico I.\nPara usar cada método use los botones que se presentan en cada menú, siempre podrá regresar\na la ventana anterior con los botones de 'Regresar'.\nGracias por usar este programa.\nHecho por Iván Alejandro Moreno Soto."

        mostrarAviso(INTRODUCCION)
예제 #8
0
 def mostrarAyuda (self):
     AYUDA = "El sistema de ecuaciones lineales es pasado a través de un archivo de texto que debe contener en la primera línea el número de ecuaciones." + \
     "\nDe la segunda línea en adelante debe contener los coeficientes de las incógnitas y los términos independientes separados por un espacio." + \
     "\nCada línea del archivo se tomará como una ecuación. Este método aplica el algoritmo para reducir errores de redondeo."
     mostrarAviso(AYUDA)
예제 #9
0
 def mostrarAyuda (self):
     AYUDA = "El sistema de ecuaciones lineales es pasado a través de un archivo de texto que debe contener en la primera línea el número de ecuaciones." + \
     "\nDe la segunda línea en adelante debe contener los coeficientes de las incógnitas y los términos independientes separados por un espacio." + \
     "\nCada línea del archivo se tomará como una ecuación. Este método verifica que la matriz sea diagonalmente dominante."
     mostrarAviso(AYUDA)