“Undefinierte function ‘functionsname’ für Eingabeargumente vom Typ ‘double’.”

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

“Undefinierte function ‘functionsname’ für Eingabeargumente vom Typ ‘double’.”

In diesem Beitrag wird versucht, die verschiedenen Szenarios zu behandeln, in denen diese Fehlermeldung auftreten kann, und Lösungsvorschläge für die Lösung dieser Fehler zu finden.

Wenn Sie auf diese Fehlermeldung stoßen und nicht wissen, was es bedeutet. Trost dabei: 90% von uns haben den gleichen Begriff gegoogelt.

“Undefinierte function ‘int’ für Eingabeargumente vom Typ ‘double’.”

Die Fehlermeldung ist ziemlich selbsterklärend, kann aber immer noch zu Verwirrung führen. (Ich wählte 'int' zufällig, es könnte genauso gut 'train', 'table', 'my_function' oder irgendetwas anderes sein).

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

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

Was machst du, wenn du diesen Fehler bekommst?

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

 which int 'int' not found. 

Es ist ziemlich offensichtlich, Matlab kann keine functionen oder Variablen namens int . Der Versuch, es zu benutzen, ist daher sinnlos. Vergleichen wir es mit max :

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

Aber Sie können Folgendes erhalten, auch wenn Sie die “Undefinierte function ‘x’ …” erhalten. Wenn ja, siehe Punkt 3 unten.

 which x x is a variable. 

1. Aber die function “int” existiert! Es ist sogar hier dokumentiert !?

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

Wenn Sie den Fehler “Undefinierte function” erhalten, aber die function in der Dokumentation finden, casting Sie einen Blick in das Menü auf der linken Seite, oder überprüfen Sie einfach die Adresse. Standard Matlab functionen haben Adressen wie:

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

Beachten Sie den “Matlab” -Teil. Wenn Sie dies sehen, verwenden Sie eine function, die Teil des Matlab-cores ist.

Wenn jedoch eine Adresse wie die folgende angezeigt wird, ist die function, 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: Suchen Sie nach einer anderen function, die nicht Teil einer Toolbox ist, die Sie nicht haben. Sie werden wahrscheinlich finden, wonach Sie suchen, wenn Sie ein erfahrener Google-Mitarbeiter sind. Wenn Sie es nicht finden können, bitten Sie um Hilfe. Erklären Sie, was Sie versucht haben, und zeigen Sie, dass Sie sich Mühe gegeben haben!

2. Aber die function ist hier dokumentiert und gehört zum core von Matlab !?

Obwohl eine function Teil der Standardinstallation von Matlab ist und gut dokumentiert ist, kann dieser Fehler dennoch auftreten. Der wahrscheinlichste Grund für diesen Fehler ist, dass Sie eine ältere Version von Matlab verwenden. Wenn Sie die Dokumentation überprüfen, sehen Sie am Ende der Seite Folgendes:

Eingeführt in R2013b

Wenn Sie also R2012b verwenden, können Sie keine Instanztabelle verwenden.

Lösung: Überprüfen Sie, ob die function in Ihrer Version von Matlab definiert ist. Wenn es noch nicht implementiert ist, müssen Sie entweder Matlab aktualisieren oder einen anderen Weg finden, es zu tun. Eine Alternative zur 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. myvariable 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, es aber versehentlich cleared haben.

Lösung: Gehen Sie den Code durch. Suchen Sie nach Tipperrorsn, Stellen, an denen Sie die Variable versehentlich gelöscht haben usw. Innerhalb des Matlab-Editors erhalten Sie die folgende Zeile unten, wenn Sie eine Variable markieren: “3 Verwendungen von” x “gefunden”, wenn Sie die function definiert und verwendet haben . Sie erhalten auch eine orange Linie unter Variablen, die nicht verwendet werden.

4. Aber ich bekomme “y ist eine Variable”, wenn ich which y ?

Wenn Sie den Fehler über “Undefined function ‘y'” erhalten, aber Ihnen mitgeteilt wird, dass y existiert, enthält Ihre Fehlermeldung einige Zeilen mehr:

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

Was Sie sagen, ist, dass Sie eine Variable namens y in Ihrem Matlab-Arbeitsbereich haben ( siehe auch diesen Link ).

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

functionen verwenden den Basisarbeitsbereich nicht. Jede function hat ihren eigenen functions-Arbeitsbereich.

Wenn eine function eine Variable sehen und verwenden soll, müssen Sie sie als Argument übergeben . Auf diese Weise wird die Variable Teil des lokalen Arbeitsbereichs für diese function sein. Wenn Sie möchten, dass Variablen, die innerhalb der function erstellt wurden, auch außerhalb der function verfügbar sind, müssen Sie sie als Ausgabe von der function haben.

Lösung: Übergeben Sie die Variablen, die Sie als Eingabeargumente verwenden möchten, an die von Ihnen verwendete function. Stellen Sie sicher, dass die Namen innerhalb der functionen intern konsistent sind. Dh es muss in der gesamten function den gleichen Namen haben. Beachten Sie, dass zwischen den Variablennamen außerhalb und innerhalb der function keine Verbindung besteht.

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

Ja, wahrscheinlich verwenden Sie die Variable als Eingabe. Die Variablennamen sind jedoch in verschiedenen functionen nicht unbedingt identisch (meistens nicht).

Angenommen, Sie haben die function:

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

Sie erhalten denselben Fehler wie oben, wenn Sie ihn wie unten im Code aus dem Arbeitsbereich aufrufen, obwohl Sie y als Eingabevariable verwenden und y innerhalb der function verwenden.

 y = 3; res = my_function(y) 

Dies liegt daran, dass innerhalb der function my_function die Variable, die Sie als Eingabe verwenden, x heißt, unabhängig davon, wie sie außerhalb der function aufgerufen wurde.

Lösung: Ändern Sie den Namen der Eingabevariablen im functionskopf oder ändern Sie den Namen der Variablen in der function.

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 function deklariert werden, in der Sie es verwenden. Wenn Sie also eine globale Variable x , müssen Sie in jeder function global x .

Lösung: Schreiben Sie Ihren Code neu und übergeben Sie Variablen als Argumente, anstatt globale Variablen zu verwenden. Wenn dies keine Option ist, fügen Sie in allen functionen, in denen Sie es verwenden, global x .


Zusätzlich zu dieser Antwort können Sie sich auf die offiziellen Matlab FAQ beziehen.

Ich habe auch

Undefinierte function ‘…’ 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 ein spezielles Zeichen (*) in meinem aktuellen Arbeitsverzeichnis vorhanden ist, sodass ich das Problem triggerse, als ich den Namen des Verzeichnisses änderte.

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