"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'."

    Dieser Beitrag versucht, alle verschiedenen Szenarien zu behandeln, in denen diese Fehlermeldung angezeigt wird kann vorkommen und Lösungen vorschlagen, wie das Problem gelöst werden kann.

    07 July 2016
    Stewie Griffinuser1532230
2 answers
  • Wenn Sie über diese Fehlermeldung stolpern und nicht wissen, was sie bedeutet. Beruhigen Sie sich 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 jedoch zu Verwirrung führen. (Ich habe 'int' zufällig 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 das gibt es (noch) nicht

    Was machen Sie, wenn Sie diesen Fehler erhalten?

    Zuerst möchten Sie vielleicht which . 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
     

    Aber möglicherweise erhalten Sie Folgendes, auch wenn Sie die Msgstr "Undefinierte Funktion 'x' ...". Wenn ja, siehe Punkt 3.

     which x
    x is a variable.
     

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

    Ja, int ist vorhanden, aber nur, wenn Sie die symbolische 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 "Undefined function" erhalten, die Funktion jedoch in der Dokumentation finden, schauen Sie im Menü t nacho links oder einfach die Adresse überprüfen. 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. Die Funktion ist jedoch hier dokumentiert und ist Teil des Kerns Matlab! ?

    Auch wenn eine Funktion zur Standardinstallation von Matlab gehört 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 R2012b verwenden, können Sie beispielsweise 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, haben Sie nicht. Wahrscheinlich haben Sie die Variable myvariable, my_Variable, my_Variable oder etwas Ähnliches in der obigen Zeile erstellt. Es ist auch möglichdass Sie es erstellt haben, es jedoch versehentlich cleared haben.

    Lösung: Gehen Sie den Code durch. 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. Ich bekomme jedoch "y ist eine Variable", wenn ich which y eingebe.

    Wenn Sie den Fehler oberhalb von "Undefinierte Funktion 'y' erhalten, aber which Wenn Sie wissen, dass y vorhanden ist, enthält Ihre Fehlernachricht noch 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.
     

    Was sagt Ihnen das aus? dass Sie über eine Variable mit dem Namen y in Ihrem Matlab-Arbeitsbereich verfügen ( Prüfen Sie auch diesen Link ).

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

    Funktionen verwenden die Basis nicht Arbeitsbereich: Jede Funktion hat einen eigenen Funktionsarbeitsbereich.

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

    Lösung: Übergeben die Variablen, die Sie als Eingabeargumente für die von Ihnen verwendete Funktion verwenden möchten. Stellen Sie sicher, dass die Namen in den Funktionen intern konsistent sind. D.h. es muss den gleichen Namen wie thr habenwährend der Funktion. Beachten Sie, dass zwischen den Variablennamen außerhalb und innerhalb der Funktion keine Verbindung besteht.

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

    Ja, Sie verwenden die Variable wahrscheinlich 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
     

    Sie erhalten die gleiche Fehlermeldung wie oben, wenn Sie sie vom Arbeitsbereich aus wie im nachstehenden Code aufrufen, auch wenn Sie y als verwenden Eingabevariable und verwenden Sie y innerhalb der Funktion.

     y = 3;
    res = my_function(y)
     

    Dies liegt daran, dass in der Funktion my_function Die Variable, die Sie als Eingabe verwenden, wird x genannt, unabhängig davon, wie sie außerhalb der Funktion aufgerufen wurde.

    Lösung: Ändern Sie den Namen von 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 als global im Matlab-Arbeitsbereich. Es muss in jeder Funktion deklariert werden, in der Sie es verwenden. Wenn Sie also eine globale Variable x haben, müssen Sie global x in jeder Funktion ausführen.

    Lösung: 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 Sie können sich auf die offizielle Matlab-FAQ

    03 March 2017
    Stewie Griffinuser1532230
  • Ich habe auch

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

    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.

    22 March 2018
    Can Ayhan