La respuesta corta: la función incorporada ARRAYFUN hace exactamente lo que hace su mapa de funciones para las matrices numéricas:
>> y = arrayfun(@(x) x^2,1:10)
y =
1 4 9 16 25 36 49 64 81 100
Hay otras dos funciones integradas que se comportan de manera similar: CELLFUN (que opera en elementos de matrices de celdas) y STRUCTFUN (que opera en cada campo de una estructura).
Sin embargo, estas funciones a menudo no son necesarios si se toma ventaja de vectorización, utilizando específicamente elemento a elemento arithmetic operators. Para el ejemplo que dio, una solución vectorizado sería:
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
Algunas operaciones funcionarán automáticamente a través de los elementos (como la adición de un valor escalar de un vector), mientras que otros operadores tienen una sintaxis especial para la operación de elemento a elemento (denotado por un "." antes del operador). Muchas funciones en MATLAB están diseñadas para operar en vectores y argumentos de matriz usando operaciones de elementos, y por lo tanto no requieren funciones de mapa.
Para resumir, he aquí algunas maneras diferentes para al cuadrado cada elemento de una matriz:
x = 1:10; %// Sample array
f = @(x) x.^2; %// Anonymous function that squares each element of its input
%// Option #1:
y = x.^2; %// Use the element-wise power operator
%// Option #2:
y = f(x); %// Pass a vector to f
%// Option #3:
y = arrayfun(f,x); %// Pass each element to f separately
Por supuesto, para una operación tan sencilla, la opción # 1 es la elección más sensata.
Lección # 1 pasando de otros idiomas a Matlab: No utilice los bucles, que son algunos órdenes de magnitud más lento que una solución vectorizado. – CookieOfFortune
¿Qué hay de la recursión? – Dario
Con la introducción del JIT, para los bucles no se aplica la penalización que alguna vez tuvieron. – MatlabDoug