2013-08-13 25 views
10

Ich stolperte bei einer einfachen Multiplikation auf einen Fehler, der mich eher überraschte. Was hier passiert, habe ich immer angenommen * war nur für matrix multiplication.Fehler mit einfacher Matrixmultiplikation

x = 2; 
y = zeros(1,4); 
y(1) = 1 *x; 
y(2) = x* 1; 
y(3) = (x *1); 
y(4) = x *1; 
y 
x *1 

die folgende Ausgabe geben:

y = 

    2  2  2  1 

Error: "x" was previously used as a variable, 
conflicting with its use here as the name of a function or command. 
See MATLAB Programming, "How MATLAB Recognizes Function Calls That Use Command Syntax" for details. 

Versteht jemand, was hier vor sich geht? Natürlich habe ich überprüft, dass x keine Funktion ist.

+0

können Sie diese reproduzieren nach Matlab Neustart? – Dan

+0

@Dan In der Tat kann es leicht reproduziert werden, ich denke, die Antworten erklären es. –

+0

Ich sehe, ich habe es in Octave versucht und hatte keine Probleme. – Dan

Antwort

11

Es hängt vom Abstand ab. Siehe auch here für eine längere Erklärung und einige Beispiele dafür, wann Sie echte Zweideutigkeiten haben könnten, aber die ersten drei funktionieren wie erwartet, und die letzte wird davon ausgehen, dass Sie versuchen, eine Funktion x mit Eingabe * 1:

aufzurufen
x*1 
x * 1 
x* 1 
x *1 

Dies geschieht nicht, wenn Sie die Ausgabe zu einem gewissen variablen zuweisen, unabhängig davon Abstand:

y(2) = x *1 
z = x *1 
x = x *1 
+0

Danke, ich wusste nicht, dass dies als Funktionsaufruf interpretiert werden würde, wenn die Funktion nicht existiert. –

+3

@DennisJaheruddin Versuchen Sie es auch: '{[1 + 2], [1 + 2], [1+ 2], [1 +2]}'. Diese Eigenart ist eines der Dinge, die ich an MATLAB am meisten mag. –

9

Dies geschieht, weil, wenn Sie x *1 in einer separaten Zeile haben, MATLAB x als Funktion interpretiert eine versucht '*1' als Argument zu übergeben, aber dann realzes es, dass x eine Variable ist, daher der Fehler.

+1

Danke, ich habe nicht realisiert, würde dies als Funktionsaufruf interpretiert, wenn die Funktion nicht existiert. Ich wünschte, ich könnte diese Antwort auch akzeptieren. –

Verwandte Themen