Dada la matriz Evo, de tres columnas, que contiene:
Instantes de tiempo t
Señal u
Señal y
Queremos saber el valor máximo de u (Umax) y el instante de tiempo en que se alcanzó (tUmax).
¿Cuál de las siguientes expresiones lo calcula correctamente?
[Umax,iUmax] = max( Evo )
tUmax = Evo( iUmax(2) )
[Umax,iUmax] = max( Evo(:,2) )
tUmax = Evo( iUmax,1 )
[Umax,iUmax] = max( Evo(:,2) )
tUmax = Evo( iUmax,: )
Umax = max( Evo(:,2) )
tUmax = Evo( Umax,1 )
Es casi correcta, el único inconveniente es que Umax será un vector de 3 elementos y no un escalar. Pero tUmax está bien obtenido.
Es correcta. La segunda columna corresponde a u, con lo que, en la primera expresión, iUmax nos dice la fila del máximo. Ese índice llevado a la primera columna nos da el instante de tiempo.
Es incorrecta, porque, aunque Umax e iUmax están bien calculados, en la segunda expresión se devuelve toda la fila del máximo pero nosotros solo queremos el tiempo (el primer elemento de esa fila).
Es incorrecta, ya que el valor en Umax es, efectivamente, el valor del máximo u, no lo podemos utilizar para indexar la fila de Evo (seguramente no será un entero) ya que contiene el valor, no la fila donde ocurrió ese máximo.
Queremos ahora conocer el valor de y (y63) cuando el valor de u está más próximo al 63% de se máximo (Umax)
Aunque a primera vista pueda parecer correcta, en general no funcionará y es, por ello, incorrecta . El problema es que en la comparación Evo(:,2)==u63 es entre números en punto flotante y sólo dará verdad (1) si son EXACTAMENTE iguales (cosa muy difícil en cálculo numérico). Además no se garantiza que el valor u63 esté entre los valores de u, por eso se pide el "más próximo".
Es incorrecto, ya que, aunque Evo(:,2)-u63 nos da la diferencia de cada uno de los valores de u al valor buscado u63, esta diferencia es CON signo. El mínimo nos devolverá el valor más pequeño, en este caso el más negativo, es decir, el valor de u más por debajo de u63 y no el más cercano.
Es correcto, ya que haciendo el valor absoluto (abs()) de la diferencia Evo(:,2)-u63 sabemos la distancia de cada uno de los valores de u al valor buscado u63. Con min() obtenemos el índice de la fila para el cual se da esa distancia es mínima. Indexando Evo, en la tercera columna, obtenemos el valor de y es ese instante.
Es incorrecto ya que la expresión abs( Evo(:,2)-u63 ) devolverá valores todos distintos de 0 (algunos muy pequeños pero ninguno EXECTAMENTE igual a 0). Por ello find() devolverá los índices de todas las filas y min() cogerá la primera (la número 1).