Autora: Zuria Bauer Hartwig ( CAChemE Lightning Talk)

18.02.2015 - Licenciado bajo Creative Commons (CC-BY)

Cálculos con Octave y Telegram en el móvil

TeleOctave es un proyecto de Eric Cervera que nos trae lo que promete por su nombre: la alternativa libre a MATLAB (GNU Octave) mediante un chat vía Telegram (una aplicación gratuita tipo Whatsapp que deberías probar).

¿Cómo lo han conseguido?

Se ha conseguido gracias a la API de Telegram que es open source y permite establecer puntos de entrada y salida de información diferentes a las aplicaciones oficiales. En este caso, chateamos con un ordenador con GNU Octave instalado (también Open Source), que hace realiza los cálculos que le pedimos y nos devuelve los resultados al móvil. Además, funciona con todas las aplicaciones de Telegram, es decir que puedes usarlo además desde el navegador y/o ordenador mientras chateas con tus contactos.

Cómo usarlo...

Buscando el perfil público de @TeleOctave en Telegram y añadiéndolo en tus contactos (¡muy fácil!).

Una vez hecho esto, si escribimos un script .m o serie de comandos y lo mandamos, recibiremos al instante una respuesta originada por el servidor con el resultado (o un mensaje de error si nos hemos equivocado).

Las posibles aplicaciones son varias. Aquí algunos de los ejemplos que más me han gustado:

Cálculo simbólico

syms x

int(x^2)

diff(sin(x)*cos(x)*x^2,x)

Representaciones Gráficas

x=linspace(0, 2*pi, 100);
y=sin(x);
plot(x,y)

x = 12.*sin(t) -4.*sin(3.*t) ;
y = 13.*cos(t) - 5.*cos(2.*t) - 2.*cos(3.*t) - cos(4.*t);
y = 13.*cos(t) - 5.*cos(2.*t) - 2.*cos(3.*t) - cos(4.*t);
plot(x, y)
fill(x, y, 'r')
title('CAChemE','FontSize',28)

[x, y, z] = peaks(30);
surfc(x, y, z)

x = linspace(0,500,10000);
plot(x,exp(-x/100).*sin(x));
title('Una funcion cualquiera')
xlabel('Tiempo')
ylabel('Amplitud')

x = linspace(-pi,pi,100);
polar(x, cos(2.*x));

x=[-2:0.1:2];
[xx,yy]=meshgrid(x,x);
z=sin(xx.^2 - yy.^2);
grid
mesh(x,x,z)

t = 0:0.1:10*pi;
r = linspace (0, 1, length(t));
z = linspace (0, 1, length(t));
plot3 (r.*sin(t), r.*cos(t), z, 'linewidth',2)

Hasta ayer, @TeleOctave no podía resolver ecuaciones diferenciales de forma directo ya que no disponía del paquete de ODEs necesario para ello.

Hasta ayer...

Empecemos con una ecuación diferencial fácil: $$\frac{dy}{dt} = -5y$$ $$y(0)=1.5$$

% Código para TeleOctave
function dy = ecdif (t,y)
dy = -5*y;
end

[t,y]=ode45(@ecdif,[0 2],1.5);
plot(t,y)
title("Resolviendo 'dy/dt = -5y' con TeleOctave")

¿Será capaz de resolver un sistema de EDOs para simular un reactor químico RFP?

Copia y pega el siguiente código y descúbrelo por ti mismo ;)

% Código para TeleOctave
function dy = ecdif(V,y);
Qvo = 10; %m3·min-1
Co = [1 1 0 0 0 0]; %mol/m3
No = Co*Qvo; %mol·s-1

% Matriz con coef.estequiométricos
% NH3 O2 NO H2O N2 NO2
alfa = [-4 -5 4 6 0 0;
-2 -3/2 0 3 1 0;
0 -1 -2 0 0 2;
-4 0 -6 6 5 0];


k = [5/4 1 10 5/6];

Qv = Qvo*sum(y)/sum(No);
C = y/Qv;

r(1) = k(1)*C(1)*(C(2))^2;
r(2) = k(2)*C(1)*C(2);
r(3) = k(3)*(C(3))^2*C(2);
r(4) = k(4)*C(3)*(C(1))^(2/3);

dy=r*alfa;
end


Vo = 0; %m3
Vf = 10; %m3
Qvo = 10; %m3·min-1
Co = [1 1 0 0 0 0]; %mol/m3
No = Co*Qvo; %mol·min-1
intervalo = [Vo Vf];
inicial = No;

[V,y] = ode45(@ecdif,intervalo,inicial);

figure(1)
plot(V,y(:,1),'k',V,y(:,2),'g',V,y(:,3),'r',V,y(:,4),'b',V,y(:,5),'y',V,y(:,6),'m');
xlabel('Volumen de reactor / m3');
ylabel('Concentración / mol/m3');
title('Evolución de la concentración de reactivos en RFP');
legend('NH3','O2','NO','H2O','N2','NO2');
grid();

¿Cuál es el futuro de @TeleOctave?

Los rumores apuntan a que Eric está trabajando en poder controlar un brazo robot a distancia y desde el móvil. Sin duda, una forma cool de dominar el mundo ;)

Puedes seguir el trabajo de su grupo de investigación de Eric desde su página web (Robotic Intelligence Laboratory - Universitat Jaume I, Castellón - Spain)

Todo esto es muy bonito pero... ¿de qué me sirve?

Sirve para ver todas las posibilidades que tenemos hoy en día, es decir, ya que Telegram y GNU Octave son código abierto se ha podido desarrollar TeleOctave. Esto muestra que TODOS podemos colaborar, un ejemplo de esto podría ser la iniciativa de Google para incluir IPython/Jupyter en su servicio de Google Docs.

Creado por Matthew Turk, y el equipo de desarrollo IPython / Jupyter, el programa CoLaboratory combinará los productos de código abierto con las tecnologías de Google, lo que permite que varias personas colaboren directamente a través del acceso y análisis de datos simultáneos.

La App de Chrome instala CoLaboratory, IPython, y un gran conjunto de bibliotecas. Por otra parte, debido a que usa Native Client Portable (PNaCl), Colaboratory funcionará de forma más rápida que nunca.

Además de la facilidad de instalación, CoLaboratory permite la colaboración entre personas con diferentes habilidades. Un ejemplo de esto sería la interacción entre los programadores que escriben lógica compleja en el código y no programadores que están más familiarizados con interfaces gráficas de usuario.

Ale... ¡a programar! ;)
Bibliografía en la que me he basado: