Dada una función llamada funcion de 3 parámetros de entrada y 3 de salida ver indica cual de las siguientes invocaciones es correcta
funcion( 3 )
Correcto
Incorrecto
[ A; B ] = funcion( 3 ; 4 )
Correcto
Incorrecto
[ A, B] = funcion( [ 3 ; 4 ] )
Correcto
Incorrecto
A = funcion( 3 , 4 , 5 )
Correcto
Incorrecto
[ A, B ] = funcion( 1, 2, 3, 4, 5)
Correcto
Incorrecto
[ A, B, C, D ] = funcion( 1, 2, 3 )
Correcto
Incorrecto
[ A, 3, C ] = funcion( 1, 2 )
Correcto
Incorrecto
A = funcion( [], 2 )
Correcto
Incorrecto
funcion( 3 ) Es invocación correcta, aunque no se le pidan los parámetros de salida devolverá el valor correspondiente al primer parámetro de salida.
[ A; B ] = funcion( 3 ; 4 ) Es invocación incorrecta porque los parámetros, tanto de salida como de entrada, se deben separar por coma (,) y no por punto y coma (;).
[ A, B] = funcion( [ 3 ; 4 ] ) Es invocación correcta porque en este caso el punto y coma está dentro de la definición de la matriz [ 3 ; 4 ] para separa las filas. En esta invocación hay un único parámetro de entrada que es el vector columna [ 3 ; 4 ] que se ha definido explícitamente (directamente) en la invocación. Hay dos parámetros de salida A y B separados por coma.
A = funcion( 3 , 4 , 5 ) Es una invocación correcta aunque no se utiliza la estructura [ A ] = funcion(...) para indicar la lista de parámetros de salida. En este caso el Octave considera que estamos ante una asignación, en donde al lado derecho de la misma hay una expresión consistente en la invocación de una función de la cual se recogerá el primer parámetro de salida. El resultado de dicha expresión es el que se asigna a A. Es equivalente a, por ejemplo, la expresión A = funcion( 3 , 4 , 5 ) + 0
[ A, B ] = funcion( 1, 2, 3, 4, 5) es una invocación correcta (no producirá error) a pesar de que hay más parámetros de entrada de los que tiene definidos la función. Sencillamente los dos último (el 4 y el 5) serán ignorados. Es un fallo por parte del usuario hacer esa invocación, pero no es un error de sintaxis.
[ A, B, C, D ] = funcion( 1, 2, 3 ) es una invocación incorrecta (producirá un error) ya que, como hay más parámetros de salida de los que proporciona la función, el Octave no sabe que asignarle a la variable D.
[ A, 3, C ] = funcion( 1, 2 ) es una invocación incorrecta, ya que en la lista de parámetros de salida sólo pueden aparecer identificadores de variables a los que asignar el resultado, y 3 es una constante numérica.
A = funcion( [], 2 ) es una invocación correcta. En este caso lo que ocurre, sencillamente, es que el primer parámetro de entrada es la matriz vacía. Muchas funciones entienden, cuando se le pasa la matriz vacía en un parámetro, que el usuario no quiere fijar el valor y deja a la función que elija el más adecuado, pero este comportamiento debe estar implementado y documentado en cada función, no es algo que siempre esté disponible.
Reflexión
Recordamos que la función ones nos devuelve una matriz con todos sus elementos a 1 ¿cómo podemos saber que tamaños de matriz genera?
La forma más rápida es invocar el comando help ones, este nos muestra la documentación para la misma (eso sí, en perfecto inglés :-)