Prácticas de Espacial, a tope!

Espacial maig 13th, 2011

Hola amiguitas del house! (o del reguetón o de iurovishion o lo que sus guste). Después de el disgusto con las prácticas de espacial estaréis pensando… y a mí que más me da si la práctica fisiológica quiere ver lo que responde una neurona o si ha dicho que para la de psicofísica hay que calcular la sumación como una norma euclídea si yo lo que no sé es hacer un bucler! Jorl!

A ver empecemos por el principio y acabemos por el final (como se hace con los buclers). Imaginemos que queremos explorar el campo visual usando unas deltas de Dirac (no sé a qué práctica me suena…). Aunque a Maria Elena ya la tenemos un poco castigada y la vamos a enviar de contertulia a Qué Tiempo Tan Feliz, antes la remataremos un poco. El cloroformo le ha fastidiao las neuronas y su campo visual se ha encogido y ahora es una matriz de 10 x 10.

El experimento va a consistir en hacer una matriz de ceros 10 x 10

receptimetro = zeros(10)

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

E ir poniendo un uno en cada posición. Yo no pienso escribir 100 matrices a mano (y espero que Mariajosé y cía no escriban 4096). Más cómodo va a ser pedirle a Matlá que lo haga él.

En el post anterior os expliqué que los bucles for son útiles para repetir instrucciones que se van a producir un número determinado de veces. En este caso vamos a decirle que recorra toda la matriz y asigne un 1 a la posición que le digamos.

receptimetro(1,1) = 1

1 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

Para no hacerlo muy largo pensemos de forma más algebraica

a11 a12 a13

a21 a22 a23

a31 a32 a33

Cada elemento lo nombramos como aij

Como tenemos 10 filas necesitaremos un bucle con un contador para las filas. En cada fila hay 10 elementos, necesitaremos otro bucle que esté anidado en el primero para recorrer cada fila antes de pasar a la siguiente.

for i=1:10

for j=1:10

receptimetro(i,j)= 1

receptimetro = zeros(10); %Fijaos que como no quiero ir acumulando los unos en cada bucle, una vez terminadas las instrucciones le tengo que pedir que me vuelva a generar la matriz de ceros

end

end

Rayos y retruécanos Radiactivoman! En un plín Matlá ha hecho todas las matrices… pero ¿cómo trabajo con ellas? Eso es otro tema pero lo suyo será coger y meter todo el tochaco de instrucciones dentro del for, entre receptimetro(i,j)= 1 y receptimetro = zeros(10);

En cambio pensando en la práctica de Pilar y Ana la idea cambia un poco. Es cierto que Jesús ha dicho que hay que mapear una región de frecuencias, pero esa región no la podemos simplicar diciendo que es una matriz simple, en realidad es una matriz de pequeños vectores de dos elementos.

Aquí veo una matriz!

¿Pero qué dices alma de cántaro? Po si señoritas, yo ahí veo una matriz compuesta por elementos que en realidad son vectores. Recordad que en los script de prácticas definimos la frecuencia en x y en y, un par de frecuencias. Por supuesto que esto lo podemos trabajar como una matriz, pero en este caso nos hace falta que cada elemento de la matriz sean dos números diferentes. En C++ esto es muy fácil y cómodo de hacer, Matlá también lo sabe hacer pero de forma un poco más incómoda.

Jamemateeeeen! Ya veo que en cada elemento me interesan dos valores!

[1 1] [1 2] [1 3] …

[2 1] [2 2] [2 3] …

[3 1] [3 2] [3 3] …

Si alguien tiene curiosidad se hace con la instrucción struct (estructura). En otros lenguajes de programación cuando creamos una variable le debemos decir qué tipo de datos llevará, no es lo mismo escribir un natural, un entero, un decimal, un carácter, etc por cuestiones de memoria, desbordamientos, etc. Cuando le indicamos el tipo le podemos decir que la variable a es un vector de elementos de otro tipo concreto, pex: a es un vector de enteros y su longitud son dos elementos, y ahora puedo crear otra variable mediante la instrucción estructura y decirle que la estructura b es una matriz compuesta por variable a.

Que nadie se asuste a ver si le va a pasar como a Toni Genil en la isla… con dos bucles lo solucionamos! Lo que queremos son parejas de números y no vamos a recorrer ninguna matriz, nos imaginamos la matriz.

for i=min:max

for j = min:max

fx = i;

fy = j;

%Cálculos pertinentes

end

end

NOTA: en especial para Sarika y Paula, va por ustedes!

De la forma en la que hemos puesto el for, i tomará los siguientes valores: min, min+1, min+2

En vuestra práctica debéis trabajar con contrastes en valor decimal. Tenéis dos posibilidades:

  • Crear un vector con los contrastes

contrastes = 0:0.1:0.6

contrastes =

0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000

e ir diciéndole cógeme el elemento 1 del vector, después el 2…

    • Modificar el for para que el contador tome valores decimales. Se escribe igual que el vector contrastes:

for i=0.0:0.1:0.6

Ambas formas son iguales y a la vez diferentes. En la primera la variable i es un contador que nos va a servir para referirnos a los valores almacenados en un vector, de la segunda forma i es directamente el valor que queremos utilizar.

PD: quién lo lea que comente!!! 😉