• No results found

2.2 fMRI data – preprocessing and analysis

2.2.3 Standard fMRI analysis

La organizaci´on habitual de un curso de Programaci´on supone que se comience por los t´ıpicos programas de entrada y salida, el programa “Hola mundo”. Sin embargo, en este curso que ahora comienza nos hemos decidido por una estructura similar a la programaci´on funcional, comenzando por el concepto de funci´on y estudiando la entrada y salida ya con el curso muy avanzado. La ventaja de este enfoque es que los alumnos comienzan por los conceptos fundamentales: funciones, estructuras de control y vectores. Como el aprendizaje es contin- uo, a˜nadiendo sucesivamente nuevos conceptos y estructuras, conseguiremos que al final los alumnos est´en m´as familiarizados con las estructuras esenciales de la Programaci´on. Esto es posible porque MATLAB proporciona una interfaz est´andar para las funciones y desde la l´ınea de comandos es posible ejecutarlas directamente.

El entender las cosas desde la perspectiva funcional proporciona la posibilidad de asimilar des- de el principio conceptos claves en Programaci´on, como el de encapsulamiento de tareas, la divisi´on de tareas y su codificaci´on en funciones, crucial cuando se abordan problemas grandes y se trabaja en equipo. Tambi´en se trabajan ideas esenciales relativas a el dise˜no de funciones y a la reusabilidad de c´odigo ya escrito, visto ya como cajas negras que realizan determinadas tareas, y que servir´a de base para construir nuevas funciones, etc...

La que ahora presentamos es la funci´on m´as sencilla que veremos durante el curso. Tiene un argumento de entrada, x y un argumento de salida y. Lo ´unico que se hace es calcular una expresi´on matem´atica sencilla y asignar ese valor a y.

% Una funci´on sencilla % un argumento

function y=ud1_f1(x) y=xˆ2-log(x);

El s´ımbolo = en Programaci´on es una asignaci´on, no siendo por tanto sim´etrico; se asigna a lo que est´a a la izquierda del s´ımbolo igual lo que haya a la derecha del mismo, una vez realizadas las operaciones que est´en especificadas en esa parte derecha.

El nombre de la funci´on, para evitar confusiones, debe coincidir con el nombre del archivo .m donde esta funci´on se encuentra. Por tanto, como este primer ejemplo es la funci´on ud1_f1, debemos guardarla en el archivoud1_f1.m. La primera l´ınea comienza con la palabra reser- vada function lo cual es com´un a todas las funciones que veremos en el curso.

Lo m´as interesante es entender a partir de este ejemplo c´omo se pasan los argumentos desde la l´ınea de comandos hasta las funciones. Cuando invocamos esta funci´on desde la l´ınea de comandos podr´ıamos hacerlo del siguiente modo, obteniendo la siguiente respuesta:

>> ud1_f1(5) ans =

23.3906

Cuando se pulsa Enter , tecla de retorno de carro, se carga en memoria RAM la funci´on ud1_f1.m, y se crea espacio en memoria para la variable x. En ese espacio se coloca el valor 5. Se crea espacio tambi´en para y. Las variables x e y se llaman variables locales de la funci´on; el adjetivo locales procede de que viven en el espacio de memoria de la funci´on. Una vez hecho esto, el ordenador ejecuta las sentencias de la funci´on (en este caso una sola) de arriba abajo. Durante esta ejecuci´on se define la variable de salida y, en la cual al final de la misma est´a el resultado, 23.3906. Una vez terminada la ejecuci´on se devuelve el control a la l´ınea de comandos, se asigna en este caso el resultado a la variable por defecto ans y se borra de la memoria RAM la funci´on ud1 f11.

Podemos invocar a la funci´on ud1_f1.m ahora del siguiente modo:

>> t=5;

>> z=ud1_f1(t) z =

23.3906

En ese caso, tendremos 4 variables x, y, z y t. Las variables x e y son locales de la funci´on y las variables z y t viven en el espacio de memoria asignado a la ventana de comandos. Cuando se llama a la funci´on, x copia el valor de t y cuando se termina la ejecuci´on de la funci´on es z la que copia el valor de la calculada y antes de que esta desaparezca (ver figura 1.1).

La situaci´on no cambia sustancialmente si invocamos a la funci´on del siguiente modo:

>> x=5;

>> y=ud1_f1(x) y =

23.3906

Volvemos a tener 4 variables en memoria, x e y en el espacio de memoria de la ventana de comandos y x e y en el espacio de memoria de la funci´onud1_f1.mmientras ´esta se ejecuta.

UNIDAD DID´ACTICA 1. FUNCIONES Y CONDICIONALES

Figura 1.1: Ejemplo ud1 f1.m. Uso de la memoria RAM

De hecho, si cambiamos el valor de la x en el c´odigo de la funci´on, la variable t del p´arrafo anterior y la variable x del espacio de memoria de la ventana de comandos no se ven afectadas. O sea que si cambiamos la funci´on ud1_f1.m y la grabamos ahora como:

function y=ud1_f1(x) x=2;

y=xˆ2-log(x);

Si la invocamos desde la l´ınea de comandos del siguiente modo,

>> x=5; >> y=ud1_f1(x) y = 3.3069 >> x x = 5

el resultado no ser´a correcto, pero x tampoco habr´a cambiado su valor. Ello es as´ı porque la variable local x vive en la funci´on. Al principio de la misma, copia el valor de la variable x del espacio de comandos, y aunque cambiemos la variable local en la funci´on, la variable en el espacio de comandos no se ve afectada; est´an en mundos diferentes que s´olo se comunican a trav´es de la l´ınea de argumentos. Hagamos ahora algunos ejercicios para consolidar estas ideas:

Ejercicio 1.1

Vamos a preparar el espacio donde vas a trabajar, dentro de la unidad de red Z . Si no lo has hecho ya, crea una carpeta que se llame CXXY Y  donde XX  son las dos ´ultimas cifras del a˜no en que empieza el curso y Y Y  las dos ´ultimas cifras del a˜no en que termina. En el curso 2008-2009, la carpeta se llamar´ıa C 0809. Dentro de esa carpeta crea otra que se llame LP . Dentro de esta,crea una carpeta llamada ud1. Esta ser´a tu carpeta de trabajo para todo slos ejemplos y ejercicios de la unidad 1.

Ejercicio 1.2

Edita manualmente la funci´onud1 f1 creando un archivo nuevo con el editor on desde la ventana de comandos (conFile, New ), gu´ardala en tu carpeta de trabajo y ejecuta:

>> ud1_f1(2.3) >> ud1_f1(0.1) >> ud1_f1(0) >> ud1_f1(-2.2)

¿Son correctos los resultados? ¿Qu´e errores o problemas da? Ejercicio 1.3

Crea una funci´on que reciba el radio de un c´ırculo y devuelva su ´area. MATLAB conoce el valor de π, pide ayuda sobre pi para usarlo.

Ejercicio 1.4

Prueba la funci´on que has creado con un c´ırculo de radio la unidad. Deber´ıa devolver π. Pru´ebala con 2; deber´ıa devolver 4

π (puedes calcular ese valor con MATLAB).