【问题标题】:Error using simple matrix multiplication使用简单矩阵乘法时出错
【发布时间】:2013-08-14 22:26:09
【问题描述】:

我在一个简单的乘法过程中偶然发现了一个错误,这让我很惊讶。这里发生了什么,我一直认为* 仅适用于matrix multiplication。

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 不是函数。

【问题讨论】:

  • 重启Matlab后能重现吗?
  • @Dan 确实它很容易被复制,我认为答案可以解释它。
  • 我明白了,我在 Octave 中尝试过,没有任何问题。
  • 我认为一条线索是给出问题的行中*1 的语法着色...

标签: matlab matrix-multiplication


【解决方案1】:

这取决于间距。另请参阅here 以获得更长的解释和一些何时可能存在真正歧义的示例,但基本上前三个将按您的预期工作,最后一个假设您正在尝试使用输入 *1 调用函数 x :

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

如果您将输出分配给某个变量,则不会发生这种情况,无论间距如何:

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

【讨论】:

  • 谢谢,我没有意识到如果函数不存在,这会被解释为函数调用。
  • @DennisJaheruddin 也试试这个:{[1+2], [1 + 2], [1+ 2], [1 +2]}。这个怪癖是我最不喜欢 MATLAB 的地方之一。
【解决方案2】:

发生这种情况是因为当您在单独的行中有 x *1 时,MATLAB 将 x 解释为一个函数并尝试将 '*1' 作为参数传递给它,但随后它意识到 x 是一个变量,因此错误。

【讨论】:

  • 谢谢,我没有意识到如果函数不存在,这会被解释为函数调用。希望我也能接受这个答案。
猜你喜欢
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 2015-06-20
  • 2011-11-30
  • 2016-10-13
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多