web-dev-qa-db-de.com

"Undefinierte Funktion 'Funktionsname' für Eingabeargumente vom Typ 'Double'."

Eine Frage, die häufig in verschiedenen Formen und Größen auftaucht, lautet: Warum erhalte ich die folgende Fehlermeldung:

"Undefinierte Funktion 'Funktionsname' für Eingabeargumente vom Typ 'Double'."

In diesem Beitrag wird versucht, alle unterschiedlichen Szenarien zu behandeln, in denen diese Fehlermeldung auftreten kann, und Lösungsvorschläge zu deren Behebung.

16
Stewie Griffin

Wenn Sie über diese Fehlermeldung stolpern und nicht wissen, was sie bedeutet. Beruhige dich dabei: 90% von uns haben den gleichen Satz gegoogelt.

"Undefinierte Funktion 'int' für Eingabeargumente vom Typ 'double'."

Die Fehlermeldung ist ziemlich selbsterklärend, kann aber dennoch zu Verwirrung führen. (Ich habe zufällig 'int' gewählt, es könnte genauso gut 'train', 'table', 'my_function' oder etwas anderes sein).

Es gibt zwei Hauptfälle, in denen dieser Fehler auftritt: 

  1. Sie versuchen eine Funktion zu verwenden, die (noch) nicht existiert
  2. Sie versuchen auf ein Element in einer Variablen zuzugreifen, die (noch) nicht existiert.

Was machen Sie, wenn Sie diesen Fehler erhalten?

Zuerst möchten Sie vielleicht which ausprobieren. Dadurch erfahren Sie, ob die Funktion oder Variable, die Sie verwenden möchten, definiert ist. 

which int
'int' not found.

Es ist offensichtlich, dass Matlab keine Funktionen oder Variablen mit dem Namen int finden kann. Der Versuch, es zu benutzen, ist daher zwecklos. Vergleichen wir es mit max:

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

Möglicherweise erhalten Sie jedoch Folgendes, auch wenn Sie die "undefinierte Funktion 'x' ..." erhalten. Wenn ja, siehe Punkt 3 unten.

which x
x is a variable.

1. Aber die Funktion "int" existiert! Es ist sogar dokumentiert -/!?

Ja, int existiert, aber nur wenn Sie die Symbolic Toolbox haben. Da Toolboxes zusätzliche Pakete sind, die separat erworben werden müssen (und ziemlich teuer sein können), besteht die Chance, dass Sie dieses Paket nicht haben. 

Wenn Sie den Fehler "Undefinierte Funktion" erhalten, die Funktion jedoch in der Dokumentation finden, schauen Sie im Menü links nach oder überprüfen Sie einfach die Adresse. Standard Matlab-Funktionen haben Adressen wie:

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

Beachten Sie den "Matlab" -Teil. Wenn Sie dies sehen, verwenden Sie eine Funktion, die Teil des Kern-Matlab ist. 

Wenn Sie jedoch eine Adresse wie die unten stehende sehen, ist die Funktion, die Sie verwenden möchten, Teil der Symbolic Toolbox:

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

oder vielleicht ist es Teil der Neural Network Toolbox:

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

Lösung: Finden Sie eine andere Funktion, die nicht Teil einer Toolbox ist, die Sie nicht haben. Wenn Sie ein erfahrener Googler sind, werden Sie wahrscheinlich das finden, wonach Sie suchen. Wenn Sie es nicht finden können, bitten Sie um Hilfe. Erklären Sie, was Sie versucht haben, und zeigen Sie, dass Sie einige Anstrengungen unternommen haben!

2. Aber die Funktion ist hier dokumentiert und ist Teil des Kerns Matlab !?

Obwohl eine Funktion Teil der Standardinstallation von Matlab ist und gut dokumentiert ist, kann dieser Fehler trotzdem auftreten. Die wahrscheinlichste Ursache für diesen Fehler ist, dass Sie eine ältere Version von Matlab verwenden. Wenn Sie die Dokumentation durchsehen, sehen Sie unten auf der Seite Folgendes:

Eingeführt in R2013b 

Wenn Sie also R2012b verwenden, können Sie zum Beispiel table nicht verwenden. 

Lösung: Prüfen Sie, ob die Funktion in Ihrer Matlab-Version definiert ist. Wenn es noch nicht implementiert ist, müssen Sie Matlab entweder aktualisieren oder einen anderen Weg finden. Eine Alternative zu table kann beispielsweise die Verwendung von Zellen oder Strukturen sein. 

3. Aber die Variable "my_variable" existiert! Ich habe es in der Zeile oben erstellt!

Nein, hast du nicht. Möglicherweise haben Sie die Variable myvariable, my_Variable, my_Variable oder etwas Ähnliches in der obigen Zeile erstellt. Es ist auch möglich, dass Sie es erstellt haben, aber versehentlich cleared it. 

Lösung: Den Code durchgehen. Suchen Sie nach Tippfehlern, Stellen, an denen Sie versehentlich die Variable gelöscht haben usw. Im Matlab-Editor erhalten Sie unten eine Zeile, wenn Sie eine Variable markieren: "3 Verwendungen von" x "gefunden", wenn Sie die Funktion definiert und verwendet haben . Unter den nicht verwendeten Variablen wird auch eine orangefarbene Linie angezeigt. 

4. Aber ich bekomme "y ist eine Variable", wenn ich which y eingebe.

Wenn Sie die Fehlermeldung "Nicht definierte Funktion 'y" erhalten, aber which Ihnen sagt, dass y vorhanden ist, enthält Ihre Fehlermeldung einige weitere Zeilen:

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

>> which y
y is a variable.

Dies sagt Ihnen, dass Sie eine Variable namens y in Ihrem Matlab Workspace haben (überprüfen Sie auch diesen Link ).

Das Problem ist, dass Funktionen nicht auf diesen Arbeitsbereich zugreifen können:

Funktionen verwenden nicht den Basisarbeitsbereich. Jede Funktion hat einen eigenen Funktionsarbeitsbereich.

Wenn eine Funktion eine Variable anzeigen und verwenden soll, müssen Sie diese als argument übergeben. Auf diese Weise wird die Variable Teil des lokalen Arbeitsbereichs für diese Funktion. Wenn Sie möchten, dass innerhalb der Funktion erstellte Variablen auch außerhalb der Funktion verfügbar sind, müssen Sie diese als Ausgabe von der Funktion haben.

Solution: Übergeben Sie die Variablen, die Sie als Eingabeargumente verwenden möchten, an die von Ihnen verwendete Funktion. Stellen Sie sicher, dass die Namen in den Funktionen intern konsistent sind. D.h. Es muss in der gesamten Funktion denselben Namen haben. Beachten Sie, dass zwischen den Variablennamen außerhalb und innerhalb der Funktion keine Verbindung besteht.

5. Ich übergebe aber die Variable als Eingabe an die Funktion, bekomme aber trotzdem die gleiche Fehlermeldung !?

Ja, wahrscheinlich verwenden Sie die Variable als Eingabe. Die Variablennamen sind jedoch in verschiedenen Funktionen nicht unbedingt gleich (meistens nicht).Angenommen, Sie haben die Funktion:.

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

y = 3; res = my_function(y)

Solution: Ändern Sie den Namen der Eingabevariable im Funktionsheader oder ändern Sie den Namen der Variablen in der gesamten Funktion.

6. Aber ich habe x als globale Variable erstellt !?.

Zunächst einmal: Ich empfehle Ihnen, keine globalen Variablen zu verwenden! Es ist viel besser, Variablen als Argumente zu übergeben.

Es reicht nicht aus, eine Variable im Matlab-Arbeitsbereich als global zu deklarieren. Es muss in jeder Funktion deklariert werden, in der Sie es verwenden. Wenn Sie also eine globale Variable x haben, müssen Sie in jeder Funktion global x ausführen. 

Solution: Schreiben Sie Ihren Code um und übergeben Sie Variablen als Argumente, anstatt globale Variablen zu verwenden. Wenn dies keine Option ist, fügen Sie in allen Funktionen, in denen Sie es verwenden, global x hinzu.

.


Zusätzlich zu dieser Antwort können Sie auf das offizielle Matlab FAQ verweisen.

In addition to this answer, you can refer to the official Matlab FAQ .

23
Stewie Griffin

Ich habe auch 

Undefinierte Funktion '...' für Eingabeargumente vom Typ 'double'.

fehler und ich habe die oben genannten Empfehlungen ausprobiert, aber sie konnten mein Problem nicht lösen. Dann wurde mir klar, dass sich in meinem aktuellen Arbeitsverzeichnis ein Sonderzeichen (*) befindet. Daher löse ich das Problem, wenn ich den Namen des Verzeichnisses geändert habe. 

Vergessen Sie nicht, das aktuelle Verzeichnis nach dem Änderungsvorgang mit dem Argument cd zu ändern.

1
Can Ayhan

Eine andere Sichtweise auf das Problem:

die Eingabeargumente sollten in einer solchen Reihenfolge sein, dass die Erklärung der Funktion sie lesen kann.

0
user50374