Ошибка при использовании простого матричного умножения

Я наткнулся на ошибку во время простого умножения, что меня удивило. Что здесь происходит, я всегда предполагал, что * был только для умножения матрицы.

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

Выдает следующий результат:

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.

Кто-нибудь понимает, что здесь происходит? Конечно, я подтвердил, что x не является функцией.

Ответ 1

Это зависит от расстояния. См. Также здесь для более подробного объяснения и некоторых примеров того, когда у вас может быть истинная двусмысленность, но в основном первые три из них будут работать так, как вы ожидали, и последний предположит, что вы пытаетесь вызвать функцию x со входом * 1:

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

Это не происходит, если вы назначаете вывод какой-либо переменной независимо от интервала:

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

Ответ 2

Это происходит потому, что, когда у вас есть x *1 в отдельной строке, MATLAB интерпретирует x как функцию, пытается передать '*1' в качестве аргумента для него, но тогда он полагает, что x является переменной, следовательно, ошибка.