martes, 1 de mayo de 2012

Accesibilidad en Dispositivos Móviles

Anteriormente las personas que usaban los dispositivos móviles eran, por lo general, de un mismo "tipo". Personas entre 14-50 años aproximadamente, que lo utilizaban para comunicarse mayoritariamente. Esos celulares no contaban con mucho margen para que personas con diversas discapacidades pudieran usarlos, principalmente debido a las tecnologías que existían anteriormente, ya que no había elementos como la lectura de pantalla que pudieran ayudar a una persona ciega a interpretar lo que el dispositivo mostrara. .

Hoy en día todo tipo de personas utiliza los dispositivos móviles. Personas de todas las edades, de todo tipo de países y en diferentes condiciones usan las aplicaciones que se desarrollan, y esto hace muy importante pensar en todas estas condiciones al momento de desarrollar una aplicación, debido a que no sabemos que persona pueda usarla, y por lo tanto  hay que prepararnos para todo.


¿Qué es la accesibilidad?

La accesibilidad es el grado en el que todas las personas pueden utilizar un objeto, visitar un lugar o acceder a un servicio, independientemente de sus capacidades técnicas, cognitivas o físicas. 

La accesibilidad incluye ayudas como las tipografías de alto contraste o gran tamaño, magnificadores de pantalla, lectores y revisores de pantalla, programas de reconocimiento de voz, teclados adaptados, y otros dispositivos apuntadores y de entrada de información.


Accesibildad en un dispositivo móvil


Una de las principales premisas de la accesibilidad en cualquier campo es que no se trata de un asunto de minorías o colectivos especiales, sino que la accesibilidad afecta a todos los usuarios de un determinado aparato o servicio. Aplicado a un campo tan importante e integrado en la sociedad como es los dispositivos móviles esto significa que cualquier dispositivo debe contar con una serie de recursos mínimos que faciliten su uso a cualquier persona, además de estar dotados de la capacidad de aumentar su accesibilidad para servir a los colectivos con dificultades específicas.


En otras palabras, un móvil accesible es aquel donde se pueden teclear los números, encender y apagar con facilidad, leer los mensajes en una pantalla lo suficientemente grande, interpretar las opciones del menú, identificar las llamadas, seleccionar los contactos y escuchar la voz del interlocutor con claridad y sin molestias. Además, por supuesto, el móvil debe ser fácil de manejar con una sola mano a la vez que se maneja.

Características de un dispositivo móvil accesible
  • Tener una pantalla legible: la pantalla debe ser lo bastante grande como para que en ella puedan no sólo verse las letras o los números; también deben poder visualizarse la mayoría de las opciones del menú, de modo que los usuarios sepan hacia dónde van cuando buscan una función. Pocos celulares cumplen estas funciones, y los que lo hacen  es más por permitir la visualización de vídeos que por motivos de accesibilidad. En cambio la mayoría de tablets cumple con esto, debido también a las funciones que están diseñados, que son más de lectura
  • Poder variar el cuerpo de la letra en todas las funciones: este requisito no todos los móviles lo tienen y es indispensable. Para las personas con la vista casada, por ejemplo, a partir de cierta hora de la tarde leer un mensaje del móvil o buscar un contacto se convierte en una tortura si no tienen la posibilidad de aumentar el cuerpo de letra en varios puntos. La opción de aumento del cuerpo debe ser además fácilmente reversible.
  • Posibilidad de sustituir las letras y los números por grafismos: un entorno gráfico rico y destacado puede ayudar mucho a personas con la visión disminuida, la vista cansada o con dificultades de comprensión. Los iconos del menú de funciones deben poder ampliarse o ser de por sí grandes y lo más gráficos posibles.
  • Poder asociar los contactos de la lista con imágenes y sonidos: sirve para que se sepa inmediatamente quién está llamando sin tener que forzar la vista. En lugar de ver letras o números se miran caras o se escuchan tonos específicos. Por lo tanto un móvil que pueda hacer fotografías de caras, y que permita asociar éstas con los diversos contactos, será más accesible. Lo mismo para con los sonidos y los tonos musicales: pueden ayudar a distinguir un contacto de otro.

  • Posibilidad de asociar los iconos con palabras: esto sirve para que los programas que traducen a voz el texto puedan leer cada icono y saber a que programa hace referencia.

  • Permitir la modulación del volumen de sonido: es fundamental que el sonido que sale por el altavoz del terminal sea ecualizable, algo que pocas veces ocurre. Aunque para la mayoría de las personas las molestias que cause un móvil mal ecualizado sean pocas, para usuarios con problemas auditivos puede llegar a ser un calvario atender el teléfono.



Discapacidades y su efecto en los dispositivos móviles

Existen muchas barreras para algunos perfiles de usuarios a los que les resultan incómodo, pero también necesario, la utilización de los dispositivos móviles. Cosas como la discapacidad visual y la discapacidad auditiva, afectan la experiencia del usuario en los dispositivos móviles, por lo cual veremos estas discapacidades, y algunos de los problemas que los afectan.


Discapacidad visual.

Su nivel es muy variable, yendo de la ceguera total, a una pérdida más o menos acusada de visión, que permite un aprovechamiento importante del resto visual existente.

En que afecta

El tamaño, cada vez más reducido, de los aparatos ha traído consigo desventajas a muchos usuarios por los teclados pequeños y pequeñas pantallas visuales, que a las personas con discapacidad visual les puede resultar poco accesible.

Los teclados pequeños y las pantallas pequeñas son incómodos para ciertos usuarios

Las personas con deficiencias visuales a menudo no son capaces de distinguir ciertas combinaciones de color en las pantallas de los teléfonos móviles y en los teclados numéricos.


Discapacidad auditiva.

Consiste en la incapacidad más o menos grave de captar sonidos. Puede ser muy diversa, desde problemas leves de audición, sordera parcial o sordera total. Los problemas leves de audición se corrigen mediante instrumentos amplificadores del sonido. Sin embargo, las personas con sordera total suelen utilizar el lenguaje de signos. La sordera aparece frecuentemente asociada a problemas con el habla. Afecta a la percepción y comprensión de la información sonora y muchas veces a la comprensión de la información escrita.

  • Sordos Pre-Locutivos: personas que han perdido la audición antes de aprender a hablar.
  • Sordos Post-Locutivos: personas que en el momento de perder la audición ya sabían hablar.

En que afecta

Algunos usuarios que utilizan ayudas técnicas para oír pueden experimentar alboroto o cierta alteración debido a la interferencia electromagnética que se emite desde los teléfonos móviles digitales. La rápida pulsación de señales de radio desde teléfonos digitales puede incrementar el efecto de zumbido o murmullo.




Audífono que puede terminar afectado por las interferencias electromagnéticas del móvil.



Los problemas de este colectivo se agravan en los casos de sordera prelocutiva, ya que es posible que manejen un vocabulario relativamente restringido, y pueden tener dificultades para entender textos o conceptos en los que abunden términos poco usuales, de sintaxis compleja o excesivamente largos. La información contenida en imágenes y diagramas es de gran utilidad para este tipo de usuarios, así como la posibilidad de incluir videos en Lengua de Signos en los contenidos o servicios presentados a través de los móviles.


Discapacidad del lenguaje.

Las deficiencias en el habla incluyen la dificultad para pronunciar de forma reconocible o con un nivel sonoro o una claridad suficiente, alteración de la palabra o trastornos en la voz. Para las personas que tienen problemas en el habla, la comunicación a través del teléfono móvil, en general, y el hablar claramente para activar funciones mediante comandos de voz no siempre es posible.

En que afecta

El uso de la vídeo llamada, como servicio para poder mantener comunicación con apoyo visual o lengua de signos, el uso de los mensajes, el acceso al correo electrónico y el poder ajustar el volumen de recepción y el timbre pueden ser unas de las soluciones para este tipo de perfil de usuarios.


Discapacidad física.

Abarca los problemas de coordinación o manipulación que dificultan o impiden la utilización de los objetos. Puede ir desde la carencia de algún miembro hasta problemas nerviosos que afecten a la funcionalidad de los mismos.
Incluyen debilidad, limitado control muscular (movimientos involuntarios, falta de coordinación, parálisis), falta de sensibilidad, problemas con las articulaciones, amputación. Algunas discapacidades pueden provocar dolor que impide el movimiento. Puede afectar a las manos y a los brazos, y a otras partes del cuerpo.

En que afecta

Con la llegada de teléfonos móviles más pequeños las personas que tienen discapacidades físicas pueden encontrar dificultades para coger y sujetar el teléfono y activar los botones del mismo.



A los usuarios con discapacidad motriz que tienen problemas de manipulación les resulta muy difícil realizar una acción como la ilustrada en la imagen (sujetar y manipular un móvil con la misma mano).


Discapacidad cognitiva/psíquica.

El grupo de personas con esta discapacidad es, sin duda alguna, el más numeroso. Está formado por personas que tienen dificultades para comprender y asimilar la información. Incluye múltiples discapacidades como la dislexia, la discalculia, desorden de la capacidad de prestar atención, disminución de la inteligencia, disminución de la memoria, alteraciones en la salud mental, la epilepsia, y otras.
Esta discapacidad puede ser transversal a otras dada su interrelación:

  • Sordera prelocutiva / Comprensión de textos.
  • Parálisis cerebral.
  • Edades avanzadas.

Las personas con dificultades cognitivas leves pueden tener problemas para interpretar adecuadamente el lenguaje simbólico (por ejemplo, los iconos). Un vocabulario sencillo y una sintaxis simple son elementos fundamentales para que estos usuarios comprendan adecuadamente los textos.

En que afecta

Las personas con deficiencias cognitivas o con dificultades en el aprendizaje pueden experimentar problemas con los complicados Sistemas Operativos de los teléfonos móviles actuales (gran número de opciones que se visualizan en un poco espacio).



Si el menú gráfico tiene muchas opciones y los iconos no son muy representativos, el móvil puede suponer un problema para una persona con discapacidad cognitiva.



Personas de edad avanzada.


La gente mayor suele encontrarse con un amplio rango de dificultades en los teléfonos móviles, con la mayoría de las mismas dificultades con las que se encuentran las discapacidades anteriores: desde una pantalla que es demasiado pequeña para ser vista hasta incompatibilidad con los audífonos u otros dispositivos para los oídos, además del gran número de funcionalidades complicadas en los terminales móviles actuales.



Discapacidades NO oficiales.

En algunos casos puede haber un desconocimiento de la tecnología, la que sufren las personas que no consiguen integrarse en el mundo de las nuevas tecnologías (mayores, del medio rural, profesiones poco relacionadas con las TIC, etc.)

Como consecuencia a este desconocimiento aparece la discapacidad tecnológica: la padecen aquellas personas que, por diversas razones, no cuentan con la tecnología adecuada. Según Microsoft, casi el 40% de las personas tiene problemas para acceder a los ordenadores y de ellos solo el 1% está declarado oficialmente como discapacitado.

Dentro de este último tipo de discapacidad, que aparece como consecuencia de las barreras que algunas personas encuentran por las propias características de las Tecnologías de la Información, están aquellos usuarios que encuentran también barreras por el propio diseño de los dispositivos móviles, así como por la manera de presentarse los contenidos y servicios a través de ellos.

Los usuarios de móviles se ven afectados por diversas limitaciones intrínsecas a la tecnología, impuestas por las características de los terminales móviles y los navegadores instalados en dichos dispositivos y por el contexto en el que los usuarios acceden a diferentes servicios y contenidos vía Web a través de los dispositivos móviles.

Herramientas

Se trata de diversos mecanismos o aplicaciones que permiten solventar ciertos problemas de uso o acceso a un dispositivo producidos por una discapacidad sensorial o física. A continuación se recogen diversos paquetes de software para mejorar la accesibilidad:

  • Magnificador de pantalla. Esta herramienta está diseñada para ayudar a aquellos usuarios que poseen una discapacidad visual parcial. Su funcionalidad consiste en realizar un aumento gradual de zonas de la pantalla. Algunos magnificadores implementan, además, la funcionalidad de cambiar el color o contraste de la pantalla para aquellos usuarios que tengan problemas para distinguir visualmente objetos por contraste de color.
  • Lector de pantalla. Esta herramienta está diseñada para aquellos usuarios que poseen una discapacidad visual total o muy grave que les impide ver la pantalla del terminal. La herramienta realiza un barrido del texto u objetos de la interfaz gráfica del terminal y realiza una interpretación para comunicar la información necesaria al usuario. Las vías de comunicación con el usuario son la síntesis de voz y el dispositivo de lectura braille, más conocido como línea braille.

  • Teclado virtual. Esta herramienta está diseñada para aquellos usuarios que no pueden utilizar el teclado proporcionado por el dispositivo, pero pueden realizar algunos movimientos con alguna parte de su anatomía. La herramienta presenta una matriz de caracteres en la pantalla y mediante un apuntador visual o físico permite la selección de los caracteres de forma individualizada.
  • Reconocedor de voz. Esta herramienta está diseñada para poder utilizar un terminal sin necesidad del teclado proporcionado con el dispositivo. El reconocedor de voz está dirigido a aquellos usuarios que poseen una discapacidad motriz grave que les impide utilizar el teclado del dispositivo. La herramienta utiliza el micrófono integrado en el terminal, o uno incorporado al mismo, para recoger y analizar la voz del usuario. Tras realizar algunos análisis de identificación y reconocimiento fonético, la herramienta trata de identificar qué ha verbalizado el usuario. La mayoría de herramientas de este tipo requieren un aprendizaje para una mayor exactitud en la identificación de la voz del usuario.

Referencias:

Seguridad en Dispositivos Móviles

La seguridad en los dispositivos móviles es un tema serio. Día a día muchas personas en todo el mundo compran nuevos dispositivos, ya sean tablets, PDAs, o celulares, y estos los llenan con su información personal y otra información importante, como teléfonos, cuentas bancarias, correos y demás. Los desarrolladores debemos de tener cuidado en como se almacena esta información, ya que cualquier malware que el usuario descargue podría tener acceso a toda la información que nuestra aplicación almacena sobre el usuario. Pensando en esto, en el post veremos algunos puntos de interés en la seguridad de los dispositvos móviles, en particular Android, que ha sido víctima de malware.

Seguridad en Android

Android es un sistema operativo de privilegios separados, en el cual en cada aplicación que corre en él, tiene una identidad de sistema distinta(ID de usuario de Linux e ID de usuario de grupo). Partes del sistema son también separadas en distintas identidades. Así, Linux aisla las aplicaciones unas de otras y del sistema operativo.


Medidas de seguridad adicionales son proporcionadas mediante permisos que refuerzan las restricciones de ciertas operaciones para que un cierto proceso pueda realizar.

Arquitectura de Seguridad


Un punto central de diseño de la arquitectura de seguridad de Android es que ninguna aplicación, por defecto, tiene permiso para realizar alguna operación que puede impactar otra aplicación, el sistema operativo, o el usuario. Esto incluye leer o escribir los datos privados del usuario(como contactos o correos), leer o escribir en los archivos de otra aplicación, realizar accesos a la red, mantener el dispositivo despierto, etc.


Debido a que Android separa las aplicaciones unas de otras, las aplicaciones deben compartir recursos y datos explícitamente. Esto lo hacen declarando permisos que son necesarios para capacidades adicionales que no son proporcionadas por defecto. Las aplicaciones declaran de manera estática los permisos que requieren, y el sistema operativo le pregunta al usuario el consentimiento para esto al momento de que la aplicación se instale. Android no tiene ningún mecanismo para dar permisos de forma dinámica(durante ejecución), debido a que complica la experiencia del usuario.

Firma de la Aplicación


Todas las aplicaciones de Android deben "firmarse" con un certificado, al cual el desarrollador contiene una llave privada. Este certificado identifica el autor de la aplicación. El certificado no necesita ser firmado por una autoridad certificada, es permitido y típico que las aplicaciones de Android usen certificados firmados por sí mismos. El propósito de los certificados en Android es distinguir los autores de aplicaciones. Esto permite al sistema dar o denegar a las aplicaciones acceso a permisos de nivel de firmas, y permitir o denegar a la aplicación una solicitud de recibir el mismo ID de Linux que otra aplicación.

ID de Usuario y Acceso a Archivos


Durante la instalación, Android le da a cada paquete un ID de usuario de Linux distinto. La identidad permanece constante durante la vida de ese paquete en el dispositivo. En un dispositivo diferente, el mismo paquete puede tener un diferente ID de usuario, pero lo único que importa es que cada paquete tenga un ID de usuario distinto en el dispositivo determinado.

Debido a que el refuerzo de seguridad pasa a nivel de proceso, el código de cualquiera de dos paquetes no puede correr normalmente en el mismo proceso, debido a que necesitan correr con ID de usuario de Linux diferentes. Es posible usar el atributo sharedUserId en la etiqueta de manifiesto  AndroidManifest.xml de cada paquete para tenerles asignado el mismo ID de usuario. Haciendo eso, para propósitos de seguridad los dos paquetes son tratados como la misma aplicación, con el mismo ID de usuario y permisos de archivo. Se debe dar note que para poder mantener la seguridad, solo a dos aplicaciones iniciadas con la misma firma ( y solicitando el mismo sharedUserId) se les dará el mismo ID de usuario.

Cualquier información guardada por una aplicación será asignada al ID de esa aplicación, y no será accesible(normalmente) a otros paquetes. Cuando se crea un nuevo archivo mediante getSharedPreferences(String, int), openFileOutput(String, int), openOrCreateDataBase(String, int, SQLiteDatabase.CursorFatory), se pueden usar las flags MODE_WORLD_READABLE o MODE_WORLD_WRITABLE para permitir que otros paquetes lean o escriban el archivo. Cuando se coloquen estas banderas, el archivo sigue siendo propiedad de la aplicación, pero los permisos de lectura y escritura global fueron colocados apropiadamente para que cualquier otra aplicación pueda verlo.


Seguridad en iOS



Despúes del lanzamiento inicial de iOS, Apple hizo avances significativos asegurando como el sistema operativo controla el acceso al código. Esas acciones han hecho más difícil ejecutar exploits en un dispositivo con iOS.





Sandbox

Un software sandbox es un mecanismo que restringe el acceso que el programa tiene. La tecnología sandbox de Apple esta basada en el proyecto TrustedBSD.

El sandbox es un conjunto de controles que limitan el acceso de una aplicación a archivos, preferencias, recursos de red, hardware y demás. Cada aplicación tiene acceso a los contenidos de su propio sandbox, pero no puede acceder el de las otras aplicaciones. Cuando una aplicación es instalada por primera vez en un dispositivo, el sistema crea el directorio principal de la aplicación, coloca unos subdirectorios clave, y establece los privilegios de seguridad para el sandbox.



Data Execution Protection


DEP es una técnica común para evitar que código maliciosa corra. Se ha usado desde Windows XP Service Pack 2, y ha existido en iOS desde la versión 2.0. 


La forma en que el DEP funciona es que permite al procesador diferenciar entre código(lo que se ejecuta) y los datos(cosas como fotos, palabras, etc. que no se supone que deberían ejecutarse). Esto lo hace difícil para el software malintencionado debido a que deberían primero inyectar algún código en una aplicación, disfrazado como datos, y después usar una vulnerabilidad para conseguir que ese código se ejecute.


No es una solución infalible, como se demostró en una competición, donde una persona atravesó el DEP en iOS 4.2.1, para luego hacer exploits en él. Sin embargo, hay que notar que dicho exploit hubiera fallado en contra de dispositivos con iOS 4.3, debido a que implementaban ASLR(Address Space Layout Randomization).



Address Space Layout Randomization


Las técnicas de exploit comunes sobrescriben direcciones retornadas por punteros  a códigos maliciosos. Con el ASLR la previsión de direcciones de memoria es reducida haciendo aleatorio el espacio de direcciones para cada instancia de un programa. Entonces el trabajo del ASLR es prevenir exploits moviendo los puntos de entrada de los procesos a localizaciones aleatorias, lo que disminuye la posibilidad de que un exploit individual tenga éxito. 


ASLR fue añadido en iOS 4.3 y ha incrementado la dificultad para tanto el jailbreak como los exploits al dispositivo. 










iOS vs Android


Una comparación muy interesante que encontré en internet, se puede mostrar en la siguiente infográfica(en inglés):

Android vs iOS infographic
Infographic by Veracode Application Security

Referencias:

Mobile Security - Android vs. iOS

Security and Permissions
Mobile phone security: What are the risks?
Security Showdown: Android Vs. iOS
Security Implications of iOS

miércoles, 25 de abril de 2012

Wiki Contributions - Week 12

For this week I went back into the ruby on rails web interface, so looking into the documentation and some other information I found a library called Net::SSH, used to interact between Ruby and SSH. This will be needed in order for the web interface to use ssh to send the tasks to the nodes, and to receive the output from each node, in order to keep track of the cluster performance.


Links to the wiki:

Nominations:

viernes, 20 de abril de 2012

Tarea 4 - Sistemas Caóticos - Mar

Sistema Caótico - ¿Qué es?

Podría definirse un sistema caótico como un sistema dinámico muy sensible a las condiciones iniciales, es decir que ocurren cambios muy bruscos en la solución aunque alteres muy poquitito los valores con los que empiezas (o sea tus condiciones iniciales).


No se trata de encontrar soluciones exactas a las ecuaciones que definen dicho sistema dinámico (lo cual suele ser imposible), sino más bien el poder contestar preguntas como "¿A largo plazo, se estabilizará el sistema? ¿Y si lo hace, cuáles serán los estados posibles?" o "¿Variará el estado a largo plazo del sistema, si cambian las condiciones iniciales?"

Existen muchos ejemplos de sistemas caóticos, cosas como el clima, el crecimiento de las plantas, las tormentas, el latir del corazón(flujo de sangre), y otras más, tienen una naturaleza de este tipo.

En mi caso en particular, decidí estudiar el mar en lugares encerrados, y tratare de explicar por qué es caótico.


Características de un sistema caótico

Para conocer si un sistema es caótico, se suelen buscar las siguientes características:
  • Sensibilidad a las condiciones iniciales. Esta característica implica que cada punto en un sistema es arbitrariamente aproximado por otros puntos con trayectorias futuras significativamente diferentes. Entonces, una pequeña perturbación en la trayectoria actual puede llevar a un diferente comportamiento más adelante. 
  • Topologicamente mezclado. Esto significa que el sistema evolucionara con el tiempo, así que una región o conjunto abierto de su espacio eventualmente se sobrepondrá con otra región dada. 
  • Densidad de orbitas periódicas. La densidad de orbitas periódicas significa que cada punto del espacio es aproximado arbitrariamente de manera cercana por órbitas periódicas. Sistemas topologicamente mezclados que fallen esta condición, probablemente tampoco tengan sensibilidad a las condiciones iniciales, y por lo tanto pueden no ser caóticos.
En mi caso en particular, decidí estudiar el mar, y tratare de explicar por qué es caótico.

El mar

Como ya sabemos, Un mar es una masa de agua salada de tamaño inferior al océano, así como también el conjunto de la masa de agua salada que cubre la mayor parte de la superficie del planeta Tierra, incluyendo océanos y mares menores.

En las simulaciones posteriores se usará un tipo de mar específico, mar cerrado Los mares cerrados suelen ocupar extensas depresiones endorreicas . Corresponden a lagos muy grandes, de agua más o menos salada, entre los cuales destacan el mar Muerto, el mar Caspio y el mar de Aral.

¿Por qué es caótico?

El mar(pensandolo como un sistema), es caótico debido a que diversas partes de su "funcionamiento" afectan como se comporta. Por ejemplo, la temperatura, la presión del aire, las tormentas y también los efectos de la rotación de la Tierra afectan la dirección de las corrientes oceánicas y el comportamiento del mar, por lo tanto, es sensible a las condiciones iniciales




Un terremoto en algún lugar bajo el mar en un lugar alejado de la civilización, puede ocasionar enormes tsunamis que destruyen ciudades. Este tipo de eventos es lo que convierte el mar en un sistema caótico.


Como sistema caótico, también cumple con las características de ser topológicamente mezclado, y densidad de órbitas periódicas, pero es necesario observar las gráficas posteriores para ver estas características.


Aquí un video de la visualización de las corrientes oceánicas entre los años 2007-2010, realizada por la NASA :



Modelado mediante un Sistema de Ecuaciones

Investigando en internet, encontré un pdf interesante de un par de científcos que deseaban presentar un modelo de un mar caótico encerrado(bounded chaotic sea). El objetivo del pdf era dar una definición precisa de islas elípticas y mares caóticos. En dicho pdf, se proponen dos ecuaciones para modelar dicho már caótico encerrado:

Donde:
  • a >= 0, y b>= 0 son los parámetros de bifurcación
  • x, y son las variables
Entonces, utilizando a = 3.5 y b = 0.3,  con x0 = 0.123,  0.177 < y0 < 0.277 con pasos de 0.01; en el pdf se presentaba la siguiente gráfica de un mar caótico:


Mi objetivo fue entonces, modelar dichas ecuaciones en un programa en python, para poder inicialmente reproducir dicho mar caótico. Inicialmente no tuve éxito, ya que al modelarlo se producían líneas, puntos y otras gráficas no deseables, pero en un punto, se produjo el primer avance. Dado a que x inicial = 0.123, y inicial = 0.177, observe que utilizando solo esos valores, se dibujaba un cŕculo bastante pequeño. Alejando la vista a los rangos de la imágen anterior ( -0.1 : 0.4), pude observar que dicho círculo se visuallizaba como un punto en el centro de dichas coordenadas, como la imágen anterior.

Gráfica inicial, se aprecia como un círculo               Gráfica ajustada, se aprecia como un punto

Ahí me di cuenta que después de encontrar dichos puntos para ese círculo, debía repetir el proceso, aumentando la y inicial con 0.01, para así ir expandiendo los círculos. Haciendo esto, logré la siguiente gráfica:

Utilizando a = 3.5 y b = 0.3,  con x0 = 0.123,  0.177 < y0 < 0.277 con pasos de 0.01;

Aquí es donde se podría definir la naturaleza caótica del sistema. Uno esperaría observando el comportamiento inicial del sistema, que la gráfica solamente fuera expandiendose en elipses, y elipses. Pero en algún punto, dependiendo de las condiciones iniciales, el sistema se convierte en una especie de triángulo, con las elipses en su interior. Esto puede visualizarse como un mar caótico cerrado.

Entonces podemos ver las tres características del sistema caótico:
  • Es sensible a las condiciones iniciales
  • Tiene una topología mezclada, ya que algunos puntos se sobreponen, y muestra diferentes formas.
  • Cada punto en el espacio son aproximados por órbitas periódicas.
Código:

#!/usr/bin/python

import math
dt=.01
a = 3.5
b = 0.3
pfile=open('sea.dat','w')
x=0.123
y=0.177
while y < 0.277:
 for i in range(1000):
  pfile.write("%f %f\n"%(x, y))
  x_n1 = -a*(math.pow(x, 2)) + y
  y_n1 = b - abs(x)
  y = y_n1
  x = x_n1
 y = y + dt
pfile.close()

Graficar con:

plot "sea.dat"; set xrange[-0.1:0.4]; set yrange[-0.1:0.4]; set title "Chaotic Sea"

Otros ejemplos:

Aquí hay algunos otros ejemplos modificando los paramétros de bifurcación, donde también se puede apreciar la naturaleza caótica:


Utilizando a = 4.8 y b = 0.3,  con x0 = 0.123,  0.177 < y0 < 0.277 con pasos de 0.01;


Utilizando a = 3.9, b = 0.3, x0 = 0.13, 0.16 < y0 < 0.277


Referencias:

jueves, 19 de abril de 2012

Extra - Aproximación a Ecuaciones Diferenciales

Para esta semana, se nos dio a la tarea de realizar una aproximación para resolver una ecuación diferencial, desde un simple programa, utilizando simples operacones matemáticas. Para esto, me base fuertemente en el código pasado del atractor de lorenz, que hacia algo similar para obtener los datos de las ecuaciones diferenciales de Lorenz.

En este caso, reemplace la ecuacion con una de ejemplo que encontré en una página web, y ajuste algunos datos para poder escribir los resultados en un archivo, y después graficarlos. La ecuación que utilicé, es la siguiente:


wpe6D.gif (1561 bytes)


El código es el siguiente:

#!/usr/bin/env python
import math
tstop=100
dt=.01
pfile=open('diferencial.dat','w')
efile=open('exact.dat', 'w')
t=0
y=1
while t<tstop:
 t=t+dt
 dydt= 3*math.exp(-4*t) - 2*y 
 y=y+dydt*dt
 exact = .5*math.exp(-4*t)*(5*math.exp(2*t)-3)
 pfile.write("%f %f\n" % (t, y))
 efile.write("%f %f\n" %(t, exact))
pfile.close()
efile.close()
print "Archivos escritos"

Es bastante sencillo, como explicado en clase definimos un dt pequeño(entre más pequeño, nuestra aproximación podrá ser más precisa, pero también tardará más en ejecutarse al generar muchas más datos). Usamos un archivo para escribir los datos de la aproximación, y otro para los datos exactos. 

Para obtener los datos exactos, es necesario resolver la ecuación diferencial de un modo matemático, para esto utilicé wolfram alpha, donde escribí la ecuación diferencial anterior, y me dió la solución, dando lo siguiente como resultado:


En la imágen podemos observar la parte donde dice 'Diferential equation solution', esa es la solución a nuestra ecuación diferencial. Entonces en el programa, utilizo esta fórmula resuelta totalmente lineal para generar directamente los datos exactos, y los escribo en un archivo distinto. 

Ya para terminar, grafiqué los datos para comparar mi aproximación y la solucón exacta, y a la vista, son prácticamente iguales, es necesario ver los valores de los datos para poder apreciar la diferencia.

Gráfica:




Algunos datos:

AproximaciónExacto

0.010000 1.008824
0.020000 1.016341
0.030000 1.022621
0.040000 1.027733
0.050000 1.031741
0.060000 1.034705
0.070000 1.036684
0.080000 1.037735
0.090000 1.037910
0.100000 1.037262
0.110000 1.035838
0.120000 1.033684
0.130000 1.030846
0.140000 1.027366
0.150000 1.023283
0.160000 1.018636


0.010000 1.009313
0.020000 1.017299
0.030000 1.024031
0.040000 1.029575
0.050000 1.033997
0.060000 1.037359
0.070000 1.039720
0.080000 1.041136
0.090000 1.041661
0.100000 1.041347
0.110000 1.040242
0.120000 1.038395
0.130000 1.035848
0.140000 1.032646
0.150000 1.028828
0.160000 1.024434

Referencias:

Extra - Atractor de Lorenz

Atractor de Lorenz


El sistema de Lorenz es un sistema de ecuacones diferenciales ordinarias (Ecuaciones de Lorenz) estudiadas por Edward Lorenz. Es notable para obtener soluciones caóticas para ciertos valores de parámetros y condiciones iniciales. En particular, el atractor de Lorenz es un conjunto de soluciones del sistema de Lorenz en el cual, cuando se grafica, asemeja a una mariposa, o un número 8 dependiendo el ángulo de vista.


Descripción


Edward Lorenz desarrolló un modelo matemático simplificado para convección atmosférica. EL modelo es un sistema de tres ecuaciones diferenciales ordinarias, que se conocen como ecuaciones de Lorenz:
\frac{dx}{dt} = \sigma (y - x)
\frac{dy}{dt} = x (\rho - z) - y
\frac{dz}{dt} = xy - \beta z
Aquí, "x", "y", y "z" hacen el estado del sistema, "t" es el tiempo, y  \sigma\rho\beta, son los parámetros del sistema. 


Python (http://mensch.org/vplot/lorenz/lorenz.py):


#!/usr/bin/python
#Valores usados por las formulas
tstop=100
dt=.02
a=5.
b=15.
c=1.
#Abrimos un archivo para escribir los valores
pfile=open('lorenz.dat','w')
pfile.write("#Lorenz attractor written by lorenz.py \n")
pfile.write("#a=%6.2f  b=%6.2f   c=%6.2f \n" % (a,b,c))
t=0
x=1
y=0
z=0
while t<tstop:
 t=t+dt
 #Ecuaciones de Lorenz
 dxdt=a*y-a*x
 dydt=b*x-y-z*x
 dzdt=x*y-c*z
 x=x+dxdt*dt
 y=y+dydt*dt
 z=z+dzdt*dt
 pfile.write("%f %f %f %f\n" % (t,x,y,z))
pfile.close()
print "file lorenz.dat was written"

Octave - (http://en.wikipedia.org/wiki/Lorenz_system)



# Prevent Octave from thinking that this is a function file:
1;
% Lorenz equations solved by ODE Solve
%% x' = sigma*(y-x)
%% y' = x*(rho - z) - y
%% z' = x*y - beta*z
function dx = lorenzatt(X)
    rho = 28; sigma = 10; beta = 8/3;
    dx = zeros(3,1);
    dx(1) = sigma*(X(2) - X(1));
    dx(2) = X(1)*(rho - X(3)) - X(2);
    dx(3) = X(1)*X(2) - beta*X(3);
    return
end
 
% Using LSODE to solve the ODE system.
lsode_options("absolute tolerance",1e-3)
lsode_options("relative tolerance",1e-4)
t = linspace(0,25,1e3); X0 = [0,1,1.05];
[X,T,MSG]=lsode(@lorenzatt,X0,t);
T
MSG
plot3(X(:,1),X(:,2),X(:,3))
view(45,45)
Gráficas

Utilizando el código de python: \sigma = 5 \rho = 15 \beta = 1
Utlizando el código de Octave \sigma = 10, \rho = 28, \beta = 8/3
Referencias: