7 de agosto de 2012

Ejemplo de Fracciones Parciales

Automatización y Control de Sistemas Dinámicos
Agregado 1

El método de las fracciones parciales consiste en descomponer un cociente de polinomios en una suma de fracciones de polinomios de menor grado.

Es utilizado como procedimiento intermedio en la resolución de algunas integrales.

Fracciones Parciales

Yo cree el documento, tratando de explicar el procedimiento, tomando en cuenta que ya se tiene un conocimiento previo en la resolución de estos problemas.

Enlaces relacionados:
Integración de funciones racionales, por fracciones parciales

6 de agosto de 2012

¿Qué es la Verificación y Validación de Software?

Verificación y Validación de Software
Entrada 1

Es un conjunto de procesos de comprobación y análisis que aseguran que el software que se desarrolla está acorde a su especificación y cumple las necesidades de los clientes.


Los objetivos de las actividades de verificación y validación son valorar y mejorar la calidad de los productos del trabajo generados durante el desarrollo y modificación del software.

Los atributos de la calidad deben ser la corrección, la perfección, la consistencia, la confiabilidad, la utilidad, la eficacia, el apego a los estándares y la eficacia de los costos totales.

Hay dos tipos de verificación: formal y del ciclo de vida. Esta última consiste en el proceso de determinar el grado de los productos de trabajo de una fase dada del ciclo de desarrollo cumplen con las especificaciones establecidas durante las fases previas. La verificación formal es una rigurosa demostración matemática de la concordancia del código fuente con sus especificaciones.

La validación es la evaluación del software al final del proceso de desarrollo del software para determinar su conformidad con los requisitos IEEE.

La verificación y validación implican la valoración de los productos de trabajo para determinar el apego a las especificaciones, incluyen las especificaciones de requisitos, la documentación del diseño, diversos principios generales de estilo, estándares del lenguaje de instrumentación, estándares del proyecto, estándares organizacionales y expectativas del usuario, al igual que las meta especificaciones para los formatos y notaciones utilizadas en la especificación de productos diversos.

¿Qué es verificación?


La verificación se enfoca más al proceso de evaluación del sistema o componentes ya que permite determinar si los productos de una determinada fase del desarrollo satisfacen las condiciones impuestas en el inicio de la etapa.

¿Qué se debe tener en la verificación?
  • Consistencia: vigilar que la información sea coherente.
  • Precisión: corrección de la sintaxis.
  • Completitud: lagunas en capacidad deductiva.

Lo que se hace en la verificación:
  • Identifica desviaciones con estándares y requerimientos.
  • Recolecta datos para mejorar el proceso.
  • Verifica que el producto:
    - Cumpla con los requerimientos.
    - Cumpla con los atributos de calidad.
    - Se ajuste a las regulaciones, estándares y procedimientos definidos.

¿Qué es validación?


La validación también es una evaluación del sistema o de componentes, solo que es en el transcurso o al final del proceso del desarrollo, donde se determina si cumple con lo especificado.

Aspectos en la validación:
  • Construir el sistema correcto.
  • Evaluar la conformidad con la especificación de requisitos.

Métodos formales de verificación

Entre los métodos de verificación más utilizados, se encuentran:
  • Aserciones E/S: El programa, en lógica de Hoare, se especifica mediante aserciones que relacionan las entradas y salidas del programa. Se garantiza que si la entrada actual satisface las restricciones de entrada (precondiciones) la salida satisface las restricciones de salida (poscondiciones).
  • Precondición más débil: Consiste en dada una poscondición POST, encontrar, operando hacia atrás, un programa S tal que la precondición se satisfaga en un amplio conjunto de situaciones.
  • Inducción estructural: La inducción estructural es una técnica de verificación formal que se basa en el principio de inducción matemática.

Ejemplos de grandes pérdidas por errores de software


El desorbitado Mars Climate en 1998


Después de un viaje de 286 días desde la tierra, la nave "Mars Climate Orbiter" encendió sus motores para ponerse en órbita alrededor de Marte. Al llegar a Marte, la sonda debía modificar su trayectoria y reducir su velocidad, de forma que se mantuviera orbitando alrededor del planeta. Los motores arrancaron, pero el ingenio entró demasiado en la atmósfera del planeta, provocando que se estrellara en su superficie.

La causa fue que el software que controlaba los propulsores del Mars Orbiter usaban unidades imperiales (libras de fuerza) en lugar de unidades métricas (Newtons), como especificaba la NASA.

Pérdida: 125 millones de dólares.

Apagón de 2003 en Norteamérica

Privó de electricidad a un estimado de 50 millones de personas. El apagón se debió a un error en el software de monitoreo basado en Unix de General Electric, que impidió que los operadores se dieran cuenta de un corte local de energía. El efecto dominó de la falla afectó a ocho estados de Estados Unidos y a Ontario, en Canadá.

Problema del año 2000

El problema del año 2000, también conocido como efecto 2000 o por el numerónimo Y2K, es un bug o error de software causado por la costumbre que habían adoptado los programadores de omitir la centuria en el año para el almacenamiento de fechas, asumiendo que el software sólo funcionaría durante los años cuyos nombres comenzaran con 19. Lo anterior tendría como consecuencia que después del 31 de diciembre de 1999, sería el 1 de enero de 1900 en vez de 1 de enero de 2000.

Por ejemplo los programas que cuentan el número de años a través de la sustracción de las fechas, obtendrían una cantidad de años negativa. Si una persona nació en 1977, la edad de esta persona en 2000 sería: 00-77 = -77 años.

Y relacionado con este último ejemplo les dejo la primer parte del capítulo de Dilbert donde se enfrentan al problema del año 2000.


Fuentes consultadas:
Introducción a la verificación y validación
Métodos formales
Los errores informáticos más costosos
Problema del año 2000

5 de agosto de 2012

Aplicación de una Red Neuronal

Redes Neuronales
Reporte 1

Reconocimiento de personas mediante voz


"Un sistema de reconocimiento de voz es una herramienta computacional capaz de procesar la señal de voz emitida por el ser humano y reconocer la información contenida en ésta, convirtiéndola en texto o emitiendo órdenes que actúan sobre un proceso."


Los sistemas de reconocimiento de habla diseñados para dar órdenes a un computador se llaman control por comandos. Estos sistemas reconocen un vocabulario muy reducido, lo que incrementa su rendimiento.

La idea es crear un programa para reconocimiento de personas mediante la voz, la cual puede ser usado en varios panoramas, en mi caso la idea es usarlo específicamente en una casa inteligente, la cual el sistema pida que diga alguna frase a la persona que llegue a la casa y esta identifique cuál de los habitantes es el que ha llegado, y así crear acciones inmediatas que frecuentemente hace esta persona, como el encender las luces del cuarto o encender la computadora.

Una de las librerías que puede ser utilizada para el preprocesamiento de la voz es python-pocketsphinx.

Identificar texto en imágenes


"Proceso dirigido a la digitalización de textos, los cuales identifican automáticamente a partir de una imagen símbolos o caracteres que pertenecen a un determinado alfabeto, para luego almacenarlos en forma de datos, asi podremos interactuar con estos mediante un programa de edición de texto o similar."


Existen en el mercado de aplicaciones móviles varias opciones que nos permiten tomar fotografías a un póster o libro, y luego se busca en la imagen la incidencia de texto el cual puede ser traducido directamente en la imagen o procesado para copiarlo directo a un archivo de texto. Entonces la idea es hacer mediante una red neuronal el reconocimiento de caracteres para esta obtención de texto.

Podía ser algo redundante y de lo cual ya hay muchas aplicaciones que lo hacen o incluso librerías que facilitan este reconocimiento, pero lo importante es aprender a hacerlo.

Para esto existe una herramienta que podría ser de gran ayuda con el nombre de PyTesser.

Páginas consultadas:
PyTesser
Reconocimiento de voz
Reconocimiento de caracteres

17 de mayo de 2012

Proyecto Arduino: Alcoholímetro

Cómputo Integrado
Proyecto Arduino

Como última entrega de proyecto para la materia de Cómputo Integrado usando un Arduino, decidí hacer un alcoholímetro sencillo, esto para hacer uso del sensor de alcohol. Pudo haber sido cualquier otro sensor de gases, pero para fines prácticos y de demostración frente al grupo, el más adecuado fue el de alcohol, ya que existen otros que detectan, por ejemplo, el gas butano o metano.


Descripción


La idea es crear un alcoholímetro, que mediante el sensor, se reciba como dato el grado o nivel de alcohol de la persona que sopla frente al sensor. Según el nivel o grado de alcohol detectado por el sensor, se encenderán de 1 a 10 leds de diferentes colores, empezando con el verde, que indica un bajo nivel de alcohol, amarillo un nivel medio y rojo un nivel alto.

Además como muchos alcoholímetros portátiles o de mano ofrecen la opción de guardar el estado actual de alcohol, también agregue dos botones, uno es para guardar el estado marcado actualmente por el sensor, y el segundo es para ver los estados guardados, que son tres, aunque pudieron haber sido más. Al picar el botón para ver los estados guardados por primera vez, se muestra el estado recién guardado, al picar por segunda vez, se ve el penúltimo estado, y al picar por tercera vez se muestra el antepenúltimo, y para salir de vuelve a picar por cuarta vez, y volver a recibir información del sensor.

Herramientas usadas

  • Arduino IDE en Ubuntu 11.10
  • Cable para conexión USB
  • Arduino Uno

Material utilizado

  • 4 leds de 5mm, color verde difuso
  • 3 leds de 5mm, color amarillo difuso
  • 3 leds de 5mm, color rojo difuso
  • 1 led de 5mm, color amarillo
  • 11 resistencias de 330 ohms
  • 3 resistencias de 10K ohms
  • 2 micro switch, de push, con 4 terminales
  • 1 sensor de alcohol MQ-3
  • Arduino Uno
  • Cables de interconexión macho-macho de 6 pulgadas

Código


Este es el código completo de mi proyecto. Las partes que están en comentarios fueron utilizadas como prueba para la consola del monitor serial desde el Arduino IDE.

Nota: Si se usa "Serial" para imprimir contenido en el monitor, la salida digital A0 y A1, quedan automáticamente programadas para salida serial, como yo necesitaba una salida digital más, comente las líneas de salida serial, para tener dos salidas digitales extras.


Circuito creado en Fritzing


Dibuje el circuito desde Fritzing y lo hice en dos partes para no amontonar componentes y que estén bien visibles, por si en algún momento alguien sigue estos pasos para armar el suyo propio, no se pierda viendo solo imágenes.

Esta es la parte donde se conectan todas las salidas del Arduino al protoboard donde se encuentran incrustados los leds.


Y aquí esta por separado lo que conecta al sensor y los botones push.


Imágenes







Vídeo


Y por último les dejo un vídeo que tomé del alcoholímetro funcionando, para dejar evidencia del trabajo realizado. Cabe mencionar que en el vídeo no muestro el uso de los botones, aunque ya estaban funcionales, ya que no tenía quién me ayudará a grabar en ese momento.


Si esta publicación te ayudo en algo para crear tu proyecto, o haces uso del código que yo he creado, no te olvides de incluir el enlace a este blog en tu bibliografía.

Recursos consultados
Sensor Report
MQ-3 and Arduino

12 de mayo de 2012

Ecuaciones Diferenciales con Métodos Numéricos

Modelado y Simulación de Sistemas Dinámicos
Complemento
Los métodos numéricos son técnicas mediante las cuales es posible formular problemas de tal forma que sean resueltas con operaciones aritméticas, Aunque hay muchos tipos de métodos numéricos todos comparten una característica común, llevan cabo un buen número de cálculos aritméticos que se resuelven una y otra vez.

Pero haciendo uso de programas computacionales y estos métodos, llegar a una solución casi exacta a la real es muy fácil, ya que en realidad se trata de programas en los que se tiene una iteración en la cual siempre se repiten los mismos cálculos pero con cambio de valor en las variables, lo que hacerlo a "mano" resulta muy tedioso.

Pero para entender primero como hacerlo mediante un programa, tenemos que entender como se hace a "mano", o por lo menos yo creo que es la forma más fácil de entenderlo.

Cree este documento explicando paso por paso como resolver un ejemplo con el Método de Euler hacia delante y Runge Kutta 2do. Orden.

Ecuaciones Diferenciales Ordinarias

Ahora que ya vimos como se resuelve a mano, tenemos el siguiente ejemplo de código para resolver en específico una ecuación diferencial escrita con python.


Los datos obtenidos mediante este programa son pasados a un archivo llamado euler.dat que después grafique con gnuplot y se obtuvo lo siguiente.


Y ahora lo mismo pero el código ahora muestra como se resuelve la misma ecuación diferencial, pero ahora con el método de Runge Kutta.


Al igual que con el anterior los datos obtenidos son pasados a un archivo llamado rungekutta.dat y esos datos son graficados con gnuplot y obtenemos lo siguiente.


Y aquí una comparación de las dos gráficas en una sola imagen, el de color verde es el método de Runge Kutta 2do. Orden y con color rojo tenemos el método de Euler hacia delante.


Se recomienda primero probar con una ecuación diferencial sencilla la cual conozcamos su comportamiento como y' = y , la cual nos debería de arrojar una gráfica que se incrementa en Y con el paso de T en X.

En el siguiente enlace podan encontrar más información de estos métodos, y muestran una comparación de exactitud de los métodos, y para diferentes iteraciones se ve el cambio de precisión.

Enlace: Métodos Numéricos

11 de mayo de 2012

Week 16

Distributed and Parallel Systems
Contribution: Week 16
Para esta semana no se me ocurría que hacer, así que como nunca leí ni investigue nada sobre lo que era CUDA, y como nunca es tarde para hacerlo fue lo que hice para esta semana.

Enlace al wiki: About CUDA