2016-07-07 80 views

risposta

17

Se si imbattersi in questo messaggio di errore e non si sa cosa significa. Approfittate di questo: il 90% di noi ha cercato su google la stessa frase.

"Funzione non definita 'int' per argomenti di input di tipo 'double'."

Il messaggio di errore è abbastanza auto-esplicativo, ma può ancora causare confusione. (Ho scelto a caso lo 'int', potrebbe anche essere 'train', 'table', 'my_function' o qualsiasi altra cosa).

Ci sono due casi principali in cui si verificano questo errore:

  1. Si sta tentando di utilizzare una funzione che non esiste (ancora)
  2. Si sta tentando di accedere a un elemento in una variabile che doesn esiste (ancora)

Cosa fai se ottieni questo errore?

In primo luogo si potrebbe voler provare which. Questo ti dirà se la funzione o la variabile che stai cercando di utilizzare è definita o meno.

which int 
'int' not found. 

E 'abbastanza ovvio, Matlab non riesce a trovare alcuna funzione o variabili denominate int. Cercare di usarlo è quindi inutile. Mettiamo a confronto a max:

which max 
built-in (C:\Program Files\MATLAB\R2014b\toolbox\matlab\datafun\@logical\max) % logical method 

Ma, si potrebbe ottenere quanto segue, anche se si ottiene la "funzione non definita 'x' ...". In tal caso, vedere il punto 3 di seguito.

which x 
x is a variable. 

1. Ma la funzione "int" esiste! È anche documented here!?

Sì, int esiste, ma solo se si dispone dello Symbolic Toolbox. Poiché Toolboxes sono pacchetti aggiuntivi che devono essere acquistati separatamente (e possono essere piuttosto costosi), è probabile che tu non abbia quel pacchetto.

Se si ottiene l'errore "Funzione non definita", ma trovare la funzione nella documentazione, dare un'occhiata nel menu a sinistra, o semplicemente controllare l'indirizzo. Le funzioni standard di Matlab hanno indirizzi come:

mathworks.com/help/matlab/ref/max.html 
        ^^^^^^ 

Avviso la parte "matlab". Se vedi questo, stai usando una funzione che fa parte del core Matlab.

Se, tuttavia, si vede un indirizzo come quello qui sotto, allora la funzione che si sta tentando di utilizzare è parte della Symbolic Toolbox:

mathworks.com/help/symbolic/int.html 
        ^^^^^^^^ 

o forse è parte del Toolbox Neural Network:

mathworks.com/help/nnet/ref/train.html 
        ^^^^ 

Soluzione: Trovare un'altra funzione che non è parte di una serie di strumenti non si dispone. È probabile che troverai quello che cerchi se sei un esperto googler. Se non riesci a trovarlo, chiedi aiuto. Spiega cosa hai provato e mostra che hai fatto qualche sforzo!

2. Ma la funzione è documented here e fa parte del core Matlab !?

Anche se una funzione fa parte dell'installazione standard di Matlab ed è ben documentata, si può ancora ottenere questo errore. La causa più probabile di questo errore è che si sta utilizzando una versione precedente di Matlab. Se si controlla la documentazione si vedrà il seguente nella parte inferiore della pagina:

introdotto nel R2013b

Quindi, se si utilizza R2012b quindi non si può usare per esempio table.

Soluzione: Verificare se la funzione è definita nella versione di Matlab. Se non è ancora implementato, è necessario aggiornare Matlab o trovare un altro modo per farlo. Un'alternativa a table può essere ad esempio quella di utilizzare celle o strutture.

3. Ma la variabile "mia_variabile" esiste! L'ho creato nella riga sopra!

No, non l'hai fatto. È possibile che tu abbia creato la variabile myvariable, my_Variable, my_Variable o qualcosa di simile nella riga sopra. È anche possibile che tu l'abbia creato, ma che abbia accidentalmente lo cleared.

Soluzione: Passare attraverso il codice. Cerca gli errori di battitura, i luoghi in cui hai cancellato accidentalmente la variabile ecc. All'interno dell'editor Matlab otterrai la seguente riga in basso se contrassegni una variabile: "3 usi di" x "trovati" se hai definito e utilizzato la funzione . Avrai anche una linea arancione sotto le variabili che non sono utilizzate.

4. Ma ottengo "y è una variabile" quando digito which y?

Se si ottiene l'errore di cui sopra "funzione non definita 'y', ma which si y esiste dice, il messaggio di errore contiene un paio di righe:

my_function(x) 
Undefined function or variable 'y'. 
Error in my_function (line 2) 
t = x*y; 

>> which y 
y is a variable. 

Che cosa questo ti dice è che si dispone di un variabile denominata nel tuo Matlab Workspace (controlla anche this link).

Il problema è che le funzioni non possono accedere a questo spazio di lavoro:

funzioni non utilizzare l'area di lavoro di base. Ogni funzione ha una propria area di lavoro funzione.

Se si desidera che una funzione visualizzi e utilizzi una variabile, è necessario passarla come argument. In questo modo la variabile farà parte dello spazio di lavoro locale per quella funzione. Allo stesso modo, se si desidera che le variabili create all'interno della funzione siano accessibili al di fuori della funzione, è necessario visualizzarle come output dalla funzione.

Soluzione: Passare le variabili che si desidera utilizzare come argomenti di input per la funzione che si utilizza. Assicurati che i nomi all'interno delle funzioni siano coerenti internamente. Cioè deve avere lo stesso nome per tutta la funzione. Si noti che non esiste alcuna connessione tra i nomi delle variabili all'esterno e all'interno della funzione.

5. Ma ho passato la variabile come input alla funzione, ma ricevo comunque lo stesso messaggio di errore !?

Sì, probabilmente si utilizza la variabile come input. Tuttavia, i nomi delle variabili non sono necessariamente gli stessi in diverse funzioni (il più delle volte non lo sono).

Supponiamo di avere la funzione:

function output = my_function(x) 
output = 2*y; 
end 

Si otterrà lo stesso errore come sopra se lo si chiama dall'area di lavoro come nel codice qui sotto, anche se si sta utilizzando y come variabile di ingresso, e utilizzare y all'interno della funzione.

y = 3; 
res = my_function(y) 

Questo perché all'interno della funzione my_function, la variabile si utilizza come input sarà chiamato x, indipendentemente da quello che è stato chiamato fuori della funzione.

Soluzione: Modificare il nome del nome della variabile di input nell'intestazione della funzione o modificare il nome della variabile in tutta la funzione.

6. Ma ho creato x come una variabile globale !?

Primo: consiglio di non utilizzare variabili globali! È molto meglio passare le variabili come argomenti.

Non è sufficiente dichiarare una variabile come global nell'area di lavoro Matlab. Deve essere dichiarato in ogni funzione in cui lo si utilizza. Quindi, se si dispone di una variabile globale x, è necessario eseguire global x in ogni funzione.

Soluzione: Riscrivi il codice e passa le variabili come argomenti anziché utilizzare le variabili globali. Se questa non è un'opzione, aggiungi global x in tutte le funzioni in cui la stai utilizzando.


In aggiunta a questa risposta, è possibile fare riferimento al funzionario Matlab FAQ.

+0

http://stackoverflow.com/questions/35039864/undefined-function-lt-for-input-argents-of-type-cell-in-using-cell/35040225#35040225 questo potrebbe essere un altro caso in cui questo errore si verifica Per i principianti potrebbe essere difficile capire perché, anche quando la soluzione sarebbe semplicemente usare 'doc lt'. Non so se questo succede a molte persone però – Max