function - texto - Error MATLAB: función no definida o método X para argumentos de entrada de tipo ''doble''
texto argumentativo ejemplo (7)
Esta pregunta ya tiene una respuesta aquí:
Soy un nuevo usuario de Matlab, ¿pueden ayudarme por favor?
Tengo el siguiente código en un archivo .M:
function f = divrat(w, C)
S=sqrt(diag(diag(C)));
s=diag(S);
f=sqrt(w''*C*w)/(w''*s);
He almacenado este archivo (divrat.M) en la ruta normal de Matlab, y por lo tanto estoy asumiendo que Matlab leerá la función cuando está comenzando y que esta función, por lo tanto, debería estar disponible para su uso.
Sin embargo, cuando escribo
>> divrat(w, C)
Obtuve el siguiente error
??? Función no definida o método ''divrat'' para argumentos de entrada de tipo ''doble''.
¿Cuál es el mensaje de error que me dice que haga, no puedo ver ningún error en el código o la llamada a la función?
La función en sí es un código matlab válido. El problema debe ser algo más.
Intente llamar a la función desde el directorio en el que se encuentra o agregue ese directorio a su addpath(''pathname'')
búsqueda utilizando addpath(''pathname'')
.
La causa más común de este problema es que Matlab no puede encontrar el archivo en su ruta de búsqueda. Básicamente, Matlab busca archivos en:
- El directorio actual (
pwd
); - Directamente en un directorio en la ruta (para ver la ruta, escriba la
path
en la línea de comando) - En un directorio llamado
@(whatever the class of the first argument is)
que está en cualquier directorio anterior.Como sugirió otra persona, puede usar el comando
which
, aunque a menudo no es útil en este caso, le dice que Matlab no puede encontrar el archivo, que ya sabía.
Entonces, lo primero que debe hacer es asegurarse de que el archivo sea localizable en la ruta.Lo siguiente que hay que hacer es asegurarse de que el archivo que está buscando matlab (use which) requiere el mismo tipo que el primer argumento que realmente está pasando. I.el, si se supone que
w
es de diferente clase, y hay una funcióndivrat
allí, perow
está realmente vacía,[]
, por lo que matlab está buscandoDouble/divrat
, cuando solo hay un@(yourclass)/divrat.
Esto es solo una especulación de mi parte, pero esto a menudo me pica.
Además, divrat.m
, no divrat.M
. Esto no debería importar en la mayoría de los sistemas operativos, pero quién sabe ...
También puede probar si matlab puede encontrar una función utilizando el comando which
, es decir,
which divrat
Como han señalado otros, esto es muy probablemente un problema con la ruta del archivo de función que no está en la ''ruta'' de Matlab.
Una manera fácil de verificar esto es abrir su función en el Editor y presionar la tecla F5 . Esto haría que el Editor intente ejecutar el archivo y, en caso de que el archivo no esté en la ruta, le mostrará un cuadro de mensaje. Elija Add to Path
en eso, y debe estar listo para continuar.
Una nota al margen: al final del proceso anterior, la ventana de comandos de Matlab dará un error al decir que faltan argumentos: obviamente, no proporcionamos ningún argumento cuando intentamos ejecutar desde el editor. Pero a partir de ahora puede usar la función desde la línea de comando dando los argumentos correctos.
El código de error indica que no se puede encontrar la definición de la función. Asegúrese de llamar a la función desde el mismo espacio de trabajo divrat.m
se almacena el archivo divrat.m
. Y asegúrese de que la función divrat
no sea una subfunción, debería ser la primera declaración de función en el archivo. También puede intentar llamar a la función desde el mismo archivo divrat.m
para ver si el problema está con la selección del área de trabajo o la función.
Por cierto, ¿por qué no dijiste simplemente
s = sqrt(diag(C));
¿No sería lo mismo?
Obtiene este error cuando la función no está en la ruta MATLAB o en pwd.
Primero, asegúrese de que puede encontrar la función usando:
>> which divrat
c:/work/divrat/divrat.m
Si regresa:
>> which divrat
''divrat'' not found.
No está en la ruta MATLAB o en PWD.
En segundo lugar, asegúrese de que el directorio que contiene divrat
esté en la ruta MATLAB utilizando el comando PATH
. Puede ser que un directorio que creía que estaba en la ruta no esté realmente en la ruta.
Finalmente, asegúrese de no estar utilizando un directorio "privado". Si divrat
está en un directorio llamado privado, será accesible por funciones en el directorio padre, pero no desde la línea de comando de MATLAB:
>> foo
ans =
1
>> divrat(1,1)
??? Undefined function or method ''divrat'' for input arguments of type ''double''.
>> which -all divrat
c:/work/divrat/private/divrat.m % Private to divrat
Estoy bastante seguro de que la razón por la cual ocurrió este problema es debido a la licencia de la caja de herramientas (paquete) en la que pertenece esta función. Escribe which divrat
y ve cuál será el resultado. Si devuelve la ruta de la función y el comentario Has no license available
, entonces el problema está relacionado con la licencia. Eso significa que la licencia del paquete no está configurada correctamente. Sobre todo sucede si el paquete (caja de herramientas) de esta función se agrega más tarde, es decir, después de la instalación del matlab
original. Por favor verifique y solucione el problema de la licencia, entonces funcionará bien.