Lo que he aprendido: funciones anónimas en Matlab

¡Hoy he descubierto la existencia de funciones anónimas en Matlab! Son una historia muy típica de los lenguajes funcionales generalmente conocidas como funciones lambda. Son funciones pequeñas (en general de una única línea) que no hace falta guardar en un archivo aparte como pasa con las funciones normales de Matlab. Que sean pequeñas no quiere decir que no sean muy útiles sino que te obligan a pensar de una manera totalmente diferente (¡no pueden ponerse ifs ni fors dentro de ellas!)

Como primera aproximación las he utilizado en una función que extrae las coordenadas de los nodos de las piezas de un archivo inp de Abaqus. Si no tenéis ni idea de qué hablo pensad que tengo un archivo de texto con un montón de información y solo quiero sacar unos datos concretos.

El código quedaría algo así (como veis soy la persona que más comenta del mundo):


function C = coordenadasInp(archivoLectura)

% Extraer coordenadas de un archivo inp de Abaqus (sin part y assembly)
% Devuelve un cell cuyos elementos son las coordenadas de cada pieza 
% en el sistema global

texto = fileread(archivoLectura); % Leer inp

% Parte el texto en numero de piezas + 1 trozos. 
% El primer trozo es el heading
C = strsplit(texto,'*Node'); 
C = C(2:end); % Quitar el heading

% Coger el trozo entre *Node y *Element
C = cellfun(@(x) strsplit(x,'*Element'), C, 'UniformOutput', 0); 

% Hay que quedarse con el primer trozo de cada celda excepto 
% de la primera
C = cellfun(@(x) x{1}, C, 'UniformOutput', 0); 

% Convertir el string a número
C = cellfun(@str2num, C, 'UniformOutput', 0); 

En este programilla las funciones anónimas son el primer argumento de la función cellfun, que aplica una función a todos los elementos de un cell array. Su estructura es:


@(x,y) f(x,y)

Es decir, se definen las variables de entrada, x e y en este caso y lo que queramos hacer con esas variables, f(x,y). Por ejemplo, esta función:


@(x) strsplit(x,'*Element')

Coge un texto x y lo parte por donde ponga *Element.

Hasta aquí lo que he aprendido sobre las funciones anónimas hoy, como veis son una herramienta interesante pero que nos obliga a ver el problema desde otro punto de vista.

NOTA: estas cosillas las subo a Github así que podéis hurgar si queréis aquí

Anuncios

2 pensamientos en “Lo que he aprendido: funciones anónimas en Matlab

  1. Pingback: Lo que he aprendido: leer datos de archivos de texto en Matlab | Onda Hostil

  2. Pingback: Lo que he aprendido: pintar matrices de MAC en Matlab | Onda Hostil

¡Opina sin miedo! (Puedes usar Markdown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s