2013-08-13 19 views
10

Natknąłem się na błąd podczas prostego mnożenia, który raczej mnie zaskoczył. Co się tutaj dzieje, zawsze zakładałem, że * było tylko dla matrix multiplication.Błąd przy użyciu prostego mnożenia macierzy

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 

da następujący wynik:

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. 

Czy ktoś zrozumieć, co tu się dzieje? Oczywiście zweryfikowałem, że x nie jest funkcją.

+0

można odtworzyć to po ponownym uruchomieniu Matlab? – Dan

+0

@Dan Rzeczywiście można go łatwo odtworzyć, myślę, że odpowiedzi wyjaśniają to. –

+0

Rozumiem, próbowałem go w Octave i nie miałem żadnych problemów. – Dan

Odpowiedz

11

To zależy od odstępów. Zobacz także here dla dłuższego wyjaśnienia i kilka przykładów, kiedy możesz mieć prawdziwą dwuznaczność, ale zasadniczo pierwsze trzy z nich będą działać zgodnie z oczekiwaniami, a ostatnie będzie zakładać, że próbujesz wywołać funkcję x z wprowadzeniem * 1:

x*1 
x * 1 
x* 1 
x *1 

nie stanie, jeśli przypisać wyjście do jakiejś zmiennej, niezależnie od tego, rozstaw

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

Dzięki, nie zdawałem sobie sprawy, że zostanie to zinterpretowane jako wywołanie funkcji, jeśli ta funkcja nie istnieje. –

+3

@DennisJaheruddin Wypróbuj również: '{[1 + 2], [1 + 2], [1+ 2], [1 +2]}'. To dziwactwo jest jedną z rzeczy, których nie lubię najbardziej w MATLAB. –

9

Dzieje się tak dlatego, że gdy masz x *1 w osobnej linii, MATLAB interpretuje x jako funkcja próbuje przekazać '*1' jako argument do niej, ale potem realzes że x jest zmienna, stąd błąd.

+1

Dzięki, nie zdawałem sobie sprawy, że zostanie to zinterpretowane jako wywołanie funkcji, jeśli ta funkcja nie istnieje. Chciałbym również móc przyjąć tę odpowiedź. –

Powiązane problemy