jueves, 23 de agosto de 2012

Ecuaciones Diferenciales en Octave (Laboratorio)

Octave cuenta con funciones integradas que resuelven ecuaciones diferenciales no lineales, para resolver este tipo de ecuaciones Octave utiliza la función lsode (the Livermore Solver for Ordinary Differential Equations, descrita en A. C. Hindmarsh, ODEPACK, a Systematized Collection of ODE Solvers, in: Scientific Computing, R. S. Stepleman et al. (Eds.), North-Holland, Amsterdam, 1983, pages 55–64). Dichas ecuaciones deben ser de la forma:


Cabe mencionar que la solución que proporciona Octave es puramente numérica, es una matriz x, con cada filacorrespondiente a un elemento del vector t. El primer elemento de t debe ser t_0 (t subíndice 0 o t inicial) y debe corresponder al estado inicial del sistema x_0, de modo que la primera fila de la salida es x_0 y utilizando dicha matriz puedes obtener con gnuplot una gráfica demostrativa de como se comporta la ecuación en un intervalo determinado. Así que no te esperes resultados con variables, diferenciales y/o constantes como te lo daría un método convencional de solución.

Hay 4 pasos para resolver una ecuación diferencial en octave:

  1. El primer paso es definir una función que represente a la ecuación diferencial.
  2. El segundo paso es definir un vector que represente los valores que va a tomar la variable independiente (x).
  3. El tercer paso es definir la condición inicial para la ecuación.
  4. El cuarto y ùltimo paso es usar el comando lsode para integrar y resolver la ecuación diferencial.

Ahora explicaré un ejemplo para demostrar el funcionamiento de lsode.
La ecuación diferencial no lineal de primer orden que utilizaré para este ejemplo es:

dx/dt = ((e^-t) / (x^2))  con x_0 = 1 y en un rango de [0,20]


Con la terminal abierta en octave

octave:1> function suprema = f(x,t)   "aquí declaramos la funcion con el 
                                                         nombre suprema y de la forma f(x,t)"
> suprema = e^-t / x^2;                    "igualamos la funcion suprema con
                                                          nuestra ecuacion diferencial"
> endfunction                                     "comando con el que indicamos que
                                                          terminamos de definir la ecuacion"
octave:2> x_0 = 1;                             "aquí declaramos el valor inicial de la 
                                                          x_0 yo le puse 1"
octave:3> t = linspace(0, 20);            "declaramos los valores de la variable
                                                          t con la funcion de linspace que crea
                                                         un vector utilizando como parámetros
                                                         los intervalos definidos para evaluar
                                                         la ecuación."
octave:4> y = lsode("f", x_0, t);  "aquí indicamos que lsode que toma como
                                                       parámetros primero la función que 
                                                       declaramos, después el valor que
                                                      le dimos de "x_0" y por ùltimo la 
                                                      variable "t" que contiene el vector
                                                      de los intervalos en que queremos 
                                                      resolver la ecuación. (Si queremos ver
                                                      los valores que calculó para "y" 
                                                      omitimos el ; del final, pero en este
                                                      ejemplo mostraré la gráfica de la
                                                    función para una mejor  representación). 
octave:5> plot (t, y)                      "aquí ya sólo con la función plot  
                                                     hacemos la referencia que queremos la
                                                     gráfica de "t" con respecto a "y"

NOTA: y = x(t)  

La gráfica que nos arroja es la siguiente:




Por ùltimo sólo para comprobar los resultados que obtuve con octave, decidí usar Wolfram|Alpha para resolver la misma ecuación y obtuve el siguiente resultado:


Si comparamos las gráficas podemos ver que quitando las dimensiones son casi idénticas por lo que concluyo podemos confiar en la función lsode de octave cuando necesitemos resolver y/o representar ecuaciones diferenciales no lineales.





Referencias:
http://www.gnu.org/software/octave/doc/interpreter/Simple-Examples.html
http://www.youtube.com/watch?v=Rgu_ZkjIFFE
http://linuxandygt.blogspot.mx/2012/06/ecuaciones-diferenciales-no-lineales.html
http://homepages.math.uic.edu/~hanson/Octave/OctaveODE-EG.html
https://computation.llnl.gov/casc/nsde/pubs/u113855.pdf
http://softwarelibre.unsa.edu.ar/docs/descarga/2003/curso/htmls/octave/x24.html
ftp://ftp.inf.utfsm.cl/pub/Linux/Docs/LuCaS/Presentaciones/200304curso-glisa/octave/curso-glisa-octave-html/x853.html
http://webdelprofesor.ula.ve/ciencias/nunez/cursos/MetodosMatematicos2/2008B/S05_C13.pdf






lunes, 20 de agosto de 2012

Tarea 2 - Verificación y Validación de Software

Tautología

La tarea asignada para esta semana fue diseñar una tautología (fórmula bien formada de un sistema de lógica proposicional que resulta verdadera para cualquier interpretación; es decir, para cualquier asignación de valores de verdad que se haga a sus fórmulas atómicas, Wikipedia) utilizando el tanteo o en su debido caso realizar un programa que cree la tautología, y evidenciar la misma con su respectiva tabla de verdad además de un diagrama árbol.

Yo utilicé el "método del tanteo" para crear la fórmula por el simple hecho de repasar y practicar estos ejercicios que ya tenía tiempo de no ver. 

En un inicio inventé la siguiente fórmula: 
P= [ [(a ∧ ¬b) ∧ c] ∨ [(¬a ∨ b) ∧ ¬c] ∨ [¬ (b ∧ c) ∨ a] ], al realizar su tabla de verdad ésta evidenció que NO es una tautología.


Al ser al final sólo un cero el que privó a mi fórmula de ser una tautología, decidí reciclar parte de la base de la fórmula y sólo realizar algunas adecuaciones (teniendo en cuenta y respetando las restricciones que se estipularon para el ejercicio) realizando dichas adecuaciones mi nueva fórmula quedó:
P= [ [(a ∧ ¬b) ∧ c] ∨ [(¬a ∨ b) ∧ ¬c] ∨ [(¬a ∧ c) ∨ (¬b ∨ c)] ], al realizar su tabla de verdad ésta evidenció que SI es una tautología.

Evidencia:

Fuentes de Consulta:





martes, 7 de agosto de 2012

Automatización y Control de Sistemas Dinámicos

Libro: "Ingeniería de Control Moderna" de Katsuhijo Ogata, caurta edición.

Reporte 1 - Verificación y Validación de Software

Verificación y Validación 

La prueba del software se conoce también como verificación y validación (V&V). 
  • Verificación: conjunto de actividades que aseguran que el software implementa correctamente una función específica (¿estamos construyendo el producto correctamente?). 
  • Validación: son las actividades que buscan asegurar si el software construido se ajusta a los requisitos del cliente (¿estamos construyendo el producto correcto?).
Durante y después del proceso de implementación, el programa en desarrollo debe ser comprobado, para asegurar que satisface su especificación y entrega la funcionalidad esperada por el cliente. La verificación y la validación (V&V) es el nombre dado a estos procesos de análisis y pruebas. La verificación y la validación tienen lugar en cada etapa del proceso del software. V&V comienza con revisiones de los requerimientos y continúa con revisiones del diseño e inspecciones de código, hasta la prueba del producto.

Las pruebas del software implican ejecutar una implementación del software con datos de prueba. Se examinan las salidas del software y su entorno operacional para comprobar que funciona tal y como se requiere. Las pruebas son una técnica dinámica de verificación y validación .

Sólo puede probarse un sistema cuando está disponible un prototipo o una versión ejecutable del programa.


Es bien sabido que a lo largo de la historia de la tecnología se han desarrollado un sinfin de productos (software y hardware) que han logrado implementar exitosamente la tarea para que fueron diseñados. Sin embargo, ha habido casos en los que ya sea por la presión de sacar un producto nuevo o se pasó desapercibido o no fue analizado y probado debidamente han salido a su entorno operacional con fallas o errores que han derivado en pérdidas tanto para la industria que los crea como para los clientes que los usan.


Enseguida listaré algunos ejemplos de proyectos (productos) que salieron a su específico campo de acción y, fallaron. En éstos se demuestra la  importancia de que los productos pasen forzosamente por algun filtro rigoroso a prueba de fallos en el que se aplique la verificación y la validación.


  • Therac-25 era una máquina empleada en terapia de radiación, producida por Atomic Energy of Canada Limited. Este acelerador de uso dual: podía emitir electrones de baja intensidad (partículas beta) o un haz de rayos X. Estos se conseguían mediante el impacto de electrones de alta energía en una placa metálica que se situaba entre el emisor y el paciente.
    El problema residía en que, a causa de un error de programación en la interfaz gráfica, se podía dar el caso de que se enviase la orden de disparar el haz de electrones de alta energía y la de situar la placa metálica simultáneamente, disparando las partículas antes de que la placa metálica estuviera en posición, exponiendo al paciente a una dosis letal de radiación, mas de diez mil rad.
    Resultado: al menos seis accidentes entre 1985 y 1987, y que le costó la vida al menos a cinco personas.




  • La explosión del Ariane 5 (1996). El cohete -de 8 mil millones de dólares-, que contenía 4 satélites valorados en 500 millones de dólares, explotó tras sufrir un fallo en su computador: el aparato saltó en pedazos a los 36,7 segundos de su lanzamiento, al tratar de convertir unos datos de formato 64 bits a formato 16 bits.



  • División en coma flotante del Intel Pentium. Bug clásico de 1994, que se tradujo en un pequeño varapalo económico y publicitario para Intel y sus primeros Pentium. Bajo ciertas circunstancias, dependiendo de los rangos de los divisores, los bits 13º y siguientes de la mantisa podían contener valores incorrectos en las operaciones de división en coma flotante, cálculo de tangente y resto, provocando un error de un máximo de 61 unidades por millón.



Conclusiones

Al haber realizado esta investigación concluyo en que tanto pequeñas como grandes empresas que desarrollen tecnología destinen fondos para contar o crear un departamento exclusivo que se encargue de la verificación y validación de los productos que creen y/o desarrollen esto con la finalidad de que la misma empresa se asegure que el producto final que están por lanzar al mercado es el mismo que en un principio diseñaron y es lo que el cliente o usuario final quiere y así tener más éxito tanto en ventas como en reputación que hoy en día al existir un mercado grande y competitivo es muy importante ser reconocido como una empresa que desarrolla tecnología usable y de calidad.


Fuentes de Consulta:
http://www.slideshare.net/jpbthames/verificacin-y-validacin-del-diseo

Idea Proyecto Redes Neuronales

Mi idea de proyecto a realizar en esta materia consistirá en que mediante un dispositivo se escaneen huellas digitales de personas que quieran aplicar para una cierta elección o votación y luego que la red neuronal se sumerja dentro de una base de datos e identifique a la persona para que así el sistema le notifique si es o no candidata para realizar su votación. (Esto iría fusionado con el proyecto de la materia de Proyecto Integrador.)

El fundamento de esta idea es debido a que un sistema de elecciones electorales necesitaría de diversas entradas para controlar las personas que son vigentes para votar, al principio pensé que el sistema recibiera la clave electoral única de la persona y realizara una búsqueda en la base de datos pero si nos ponemos a pensar existen muchos factores que harán de esto un proceso tardado ya sea porque haya gente que no sepa usar computadoras u otros que piensen que su privacidad se vea en riesgo, una simple lectura de huella digital acabaría con estas "preocupaciones".


Referencias:
http://us.123rf.com/400wm/400/400/yakobchuk/yakobchuk0802/yakobchuk080200023/2597177-escaneo-de-una-huella-dactilar-con-las-nuevas-tecnologias.jpg