lunes, 15 de noviembre de 2010

Proyecto Final

Eliminación de Gauss-Jordan para Sistemas de Ecuaciones
(synnick21.appspot.com)




Hola que tal, para proyecto final escogí, como el título dice, una aplicación web que resuelve sistemas de ecuaciones usando el método Gauss-Jordan. Como en el medio curso, este programa también realiza cosas con los datos ingresados por CGI, en el pasado manipulaba cadenas de caracteres para generar tu CURP, ahora quise probar algo con números para operaciones aritméticas.

Se que no es algo que mucha gente usaría o algo muy complicado, pero es lo que a mi me pareció interesante para aprender algo nuevo.

De nuevo escogí python como lenguaje para el proyecto ya que su sintaxis se me hizo cómoda y es muy versátil para esto de hacer páginas web dinámicas y aplicaciones, aunque si bien me gustaría aprender PHP después.

Explicación del código:

Bueno primero que nada intentare explicar el funcionamiento de las partes importantes de mi código.

Para empezar el app.yaml que describe los contenidos y el uso de archivos estáticos, como imágenes y estilos es el siguiente:

Simplemente use además de script normal en python, una carpeta con imágenes y otra con estilos para la plantilla html que usé.

Ahora el código en python utiliza varias librerías para su funcionamiento, como cgi y os, la primera para el uso de formularios y la segunda para definir el camino de las plantillas html que se ligaran al código .py.

El programa en si tiene dos clases, MainPage y Results. Mainpage simplemente declara lo que viene siendo las plantillas, valores que se usarán( en mi caso no use ninguno) y el path y nombre de la plantilla.


Results es la parte importante, donde se hace la mayoría de operaciones. Esta contiene una función llamada post desde donde se define una matriz y una lista de cadenas de caracteres para poder escanear todos los campos del cgi. Pero un punto MUY IMPORTANTE es que los valores leídos desde el cgi son strings (cadenas de caracteres) y ya que esta aplicación realiza  operaciones numéricas no es posible trabajar con ellas como están. Por esto utilizo float(), ya que los valores de las variables tienden a ser de punto flotante, y con esta función convierto los valores escaneados a punto flotante y los asigno a la matriz. 


Cabe destacar que en mi caso tuve problemas para declarar matrices (arreglos bidimensionales) en python y por esto lo declare de una forma quizás inusual como se puede ver:

Otra cosa es que en el momento la aplicación no permite recibir 0's en la diagonal principal ya que esto causaría divisiones entre cero y por lo tanto, errores en python.
Por ello agregue una validación en la cual si se encuentra algún cero en la diagonal principal, se reimprimirá la página con el mensaje: 'No se pueden tener ceros en la diagonal principal'. Si, se que se pueden cambiar filas para arreglar esto, pero por cuestiones de tiempo no puedo agregar eso aun y me limitaré a avisar al usuario el problema.


De otra forma si no se tienen ceros en la diagonal principal se puede realizar todo normalmente y se procede a el algoritmo principal del método Gauss-Jordan:




Ya obtenidos los valores, lo siguiente es imprimir la matriz resultante y los valores de X, Y y Z, y para esto imprimí todos estos resultados dentro de una tabla, verificando si el valor que se está imprimiendo de la matriz es cero, ya que por alguna razón no imprimía los ceros, así que si se encontraba un cero en la matriz resultante, se imprimía un cero con self.response.out.write().




Eso es lo básico de mi código en python para explicar su funcionamiento, ahora el html es simplemente una plantilla con tablas y obviamente formularios para poder pasar la información a python. Pero para no explicar tanto algo que ya saben simplemente pondré el index como lo muestra el explorador Mozilla Firefox.



Donde se puede observar en una tabla con 12 campos de texto para formularios y el botón Ingresar, por lo tanto se solucionan sistemas de ecuaciones de 3 variables (X, Y, Z).

Presentación:


Descargas:

Por si gustan ver el código del main.py o el css u index los links son los siguientes:
Bibliografía:
-http://code.google.com/intl/es-419/appengine/docs/python/gettingstarted/

Bueno es todo por el momento, si tienen alguna crítica, comentario o sugerencia no duden en comentar.
Saludos.


10 comentarios:

  1. Me gusto mucho la idea de que implementaras un metodo matematico, es algo muy util y muy bien implementado.
    Felicidades por tu esfuerzo

    ResponderEliminar
  2. Esta muy bien tu app, si algun dia no tenemos a la mano una calculadora, tenemos tu app ;)
    Estaria padre que agregaras una liga sobre como funciona el metodo para los que no saben, los enlaces.

    ResponderEliminar
  3. Excelente Emmanuel, el inge estaría orgulloso de ti =P
    muy buena app sobre todo para los que apenas van a cursar algebra Felicidades =D

    ResponderEliminar
  4. Este programa me hubiera gustado que lo hicieras los dos semestres anteriores, pero igual esta excelente felicidades, deberias compartirlo con gente de primero seguro les interesa ;)

    ResponderEliminar
  5. esta muy padre tu programita y el css se ve muy profesional :D

    ResponderEliminar
  6. Muy buena la combinacion, son pocas las aplicaciones como ésta en internet.
    Como sugerencia podrias combinar mas de un metodo de resolucion de sistemas de ecuaciones para lograr algo mas completo.
    Suerte

    ResponderEliminar
  7. Muy buena aplicación, que practico para cuando no sabemos como solucionar estas ecuaciones. Deberías agregar más metodos como montante o algo parecido como dice Juan Carlos, pero que buena aplicación! al menos yo no he visto una aplicación parecida. Saludos:)

    ResponderEliminar
  8. esta bien chida la aplicación genial para confirmar las operaciones :D

    ResponderEliminar
  9. Muchas gracias por los comentarios, si me da tiempo en el fin de semana agregaré Montante a la app.
    Saludos

    ResponderEliminar
  10. Muy bien. Aún mejor sería que primero te pida el número de filas y columnas para la matriz y luego genere la tabla de entradas. Y también hay diapositivas :) Te pongo los 40 puntos completos por tu proyecto final.

    ResponderEliminar