matlab - parse - "Función no definida ''nombre_función'' para argumentos de entrada de tipo ''doble''".
octave packages (3)
Una pregunta que aparece con bastante frecuencia en diferentes formas y tamaños es: ¿Por qué recibo el siguiente mensaje de error:
"Función no definida ''nombre_función'' para argumentos de entrada de tipo ''doble''."
Esta publicación intenta abordar todos los diferentes escenarios en los que puede aparecer este mensaje de error y proponer soluciones para resolverlo.
Otra forma de ver el problema:
los argumentos de entrada deben estar en un orden tal que la explicación de la función pueda leerlo.
Si te topas con este mensaje de error y no sabes lo que significa. Consuélate con esto: el 90% de nosotros hemos buscado en Google la misma frase.
"Función no definida ''int'' para argumentos de entrada de tipo ''doble''".
El mensaje de error se explica por sí mismo, pero aún puede causar confusión.
(Elegí
''int''
al azar, podría ser
''train'', ''table'', ''my_function''
o cualquier otra cosa).
Hay dos casos principales donde se produce este error:
- Estás intentando usar una función que no existe (todavía)
- Está intentando acceder a un elemento en una variable que no existe (todavía)
¿Qué haces si obtienes este error?
Primero es posible que desee probar
which
.
Esto le dirá si la función o variable que está tratando de usar está o no definida.
which int
''int'' not found.
Es bastante obvio, Matlab no puede encontrar ninguna función o variable llamada
int
.
Intentar usarlo es, por lo tanto, inútil.
Vamos a compararlo con
max
:
which max
built-in (C:/Program Files/MATLAB/R2014b/toolbox/matlab/datafun/@logical/max) % logical method
Pero, puede obtener lo siguiente, incluso si obtiene la "Función indefinida ''x'' ...". Si es así, vea el punto 3 a continuación.
which x
x is a variable.
1. ¡Pero la función "int" existe! ¡Incluso está documentado aquí !
Sí,
int
existe, pero solo si tiene la
Caja de herramientas simbólica
.
Dado que las cajas de herramientas son paquetes adicionales que deben comprarse por separado (y pueden ser bastante caros), es probable que no tenga ese paquete.
Si obtiene el error "Función indefinida", pero encuentra la función en la documentación, eche un vistazo en el menú a la izquierda o simplemente verifique la dirección. Las funciones estándar de Matlab tienen direcciones como:
mathworks.com/help/matlab/ref/max.html
^^^^^^
Observe la parte "matlab". Si ve esto, está utilizando una función que forma parte del núcleo de Matlab.
Sin embargo, si ve una dirección como la siguiente, entonces la función que está tratando de usar es parte de la Caja de herramientas simbólica:
mathworks.com/help/symbolic/int.html
^^^^^^^^
o tal vez sea parte de Neural Network Toolbox:
mathworks.com/help/nnet/ref/train.html
^^^^
Solución: encuentre otra función que no sea parte de una caja de herramientas que no tiene. Lo más probable es que encuentres lo que estás buscando si eres un experto en Google. Si no puede encontrarlo, solicite ayuda. ¡Explique lo que ha intentado y demuestre que ha hecho algún esfuerzo!
2. ¿Pero la función está documentada aquí , y es parte del núcleo de Matlab?
Aunque una función es parte de la instalación estándar de Matlab y está bien documentada, aún puede obtener este error. La causa más probable de este error es que está utilizando una versión anterior de Matlab. Si revisa la documentación, verá lo siguiente en la parte inferior de la página:
Introducido en R2013b
Entonces, si está usando R2012b, entonces no puede usar, por ejemplo, la
table
.
Solución:
compruebe si la función está definida en su versión de Matlab.
Si aún no está implementado, entonces necesita actualizar Matlab o buscar otra forma de hacerlo.
Una alternativa a la
table
puede ser, por ejemplo, usar celdas o estructuras.
3. ¡Pero existe la variable "my_variable"! ¡Lo creé en la línea de arriba!
No, no lo hiciste.
Es probable que haya creado la variable
myvariable
,
my_Variable
,
my_Variable
o algo similar en la línea anterior.
También es posible que lo haya creado, pero lo haya
cleared
accidentalmente.
Solución: revise el código. Busque errores tipográficos, lugares donde haya borrado accidentalmente la variable, etc. Dentro del editor de Matlab obtendrá la siguiente línea en la parte inferior si marca una variable: "3 usos de" x "encontrado" si ha definido y utilizado la función . También obtendrá una línea naranja debajo de las variables que no se utilizan.
4. Pero obtengo "y es una variable" cuando escribo
which y
.
Si obtiene el error anterior "Función no definida ''y'', pero
which
le dice que
y
existe, su mensaje de error contiene algunas líneas más:
my_function(x)
Undefined function or variable ''y''.
Error in my_function (line 2)
t = x*y;
>> which y
y is a variable.
Lo que esto le dice es que tiene una variable llamada
y
en su
Matlab Workspace
(también verifique
este enlace
).
El problema es que las funciones no pueden acceder a este espacio de trabajo:
Las funciones no usan el espacio de trabajo base. Cada función tiene su propio espacio de trabajo de funciones.
Si desea que una función vea y use una variable, debe pasarla como argument . De esta forma, la variable formará parte del espacio de trabajo local para esa función. Del mismo modo, si desea que las variables creadas dentro de la función sean accesibles fuera de la función, debe tenerla como salida de la función.
Solución: Pase las variables que desea usar como argumentos de entrada a la función que usa. Asegúrese de que los nombres dentro de las funciones sean internamente consistentes. Es decir, debe tener el mismo nombre en toda la función. Tenga en cuenta que no hay conexión entre los nombres de las variables fuera y dentro de la función.
5. ¿Pero paso la variable como entrada a la función, pero sigo recibiendo el mismo mensaje de error?
Sí, probablemente use la variable como entrada. Sin embargo, los nombres de las variables no son necesariamente los mismos en diferentes funciones (la mayoría de las veces no lo son).
Supongamos que tiene la función:
function output = my_function(x)
output = 2*y;
end
Obtendrá el mismo error que el anterior si lo llama desde el espacio de trabajo como en el código a continuación, aunque esté usando
y
como variable de entrada y use
y
dentro de la función.
y = 3;
res = my_function(y)
Esto se debe a que dentro de la función
my_function
, la variable que usa como entrada se llamará
x
, independientemente de cómo se llamara fuera de la función.
Solución: cambie el nombre de la variable de entrada en el encabezado de la función o cambie el nombre de la variable en toda la función.
6. ¿Pero he creado
x
como una variable global?
En primer lugar: ¡te recomiendo que no uses variables globales! Es mucho mejor pasar variables como argumentos.
No es suficiente declarar una variable como
global
en el espacio de trabajo de Matlab.
Debe declararse en cada función en la que lo use. Por lo tanto, si tiene una variable global
x
, debe hacer
global x
en cada función.
Solución:
reescriba su código y pase las variables como argumentos en lugar de usar variables globales.
Si esto no es una opción, agregue
global x
en todas las funciones donde lo esté utilizando.
Además de esta respuesta, puede consultar las preguntas frecuentes oficiales de Matlab .
Yo tambien tengo
Función no definida ''...'' para argumentos de entrada de tipo ''doble''.
error y probé las recomendaciones mencionadas anteriormente, pero no pudieron resolver mi problema. Entonces, me di cuenta de que hay un carácter especial (*) en mi directorio de trabajo actual, así que resuelvo el problema cuando cambié el nombre del directorio.
Por último, no olvide cambiar el directorio actual después de la operación de cambio utilizando el argumento
cd
.