为什么。+算术运算在相同大小的向量上失败

时间:2014-01-31 10:12:56

标签: matlab

>> p=[1;2;3]

p =

     1
     2
     3

>> p1 = [2;3;4]

p1 =

     2
     3
     4

>> p + p1

ans =

     3
     5
     7

但是

>> p .+ p1
Error: "p" was previously used as a variable, conflicting with
its use here as the name of a function or command.
See "How MATLAB Recognizes Command Syntax" in the MATLAB
documentation for details.

另外

>> p .* p1

ans =

     2
     6
    12

>> p * p1
Error using  * 
Inner matrix dimensions must agree.

2 个答案:

答案 0 :(得分:14)

问题是运营商.+不存在:

>> help ops
  Operators and special characters.

  Arithmetic operators.
    plus       - Plus                               +    
    uplus      - Unary plus                         +    
    minus      - Minus                              -    
    uminus     - Unary minus                        -    
    mtimes     - Matrix multiply                    *    
    times      - Array multiply                    .*    
    mpower     - Matrix power                       ^    
    power      - Array power                       .^    
    ...

注意,对于乘法,有两个运算符:.*element-wise multiplication*matrix multiplication。没有矩阵添加这样的东西,因此只有一个运算符+,即element-wise addition

当您键入p .+ p1时,Matlab解析器无法识别有效的运算符,因此它可能假设您正在使用command syntax并尝试使用字符串文字进行函数调用p('.+', 'p1') 。由于p不是函数,因此您会收到错误消息。

这种'命令语法'很方便,因为它可以节省你输入几个字符(即load data.mat而不是load('data.mat')。问题是这会导致解释语句模糊不清,请参阅页面that was linked directly您的错误消息。正如您的问题所示,这可能会产生令人惊讶的结果。这是Matlab语法的一个阴暗面。

答案 1 :(得分:3)

运算符".*"执行两个数组的元素乘法。

"*"运算符执行两个数组的mutrix乘法,在你的情况下不能在两个3x1向量上完成,因此Matlab报告错误。

Matlab中不存在".+"运算符。在这种情况下,Matlab认为您使用"."语法来引用结构或函数的元素,因此会出现错误。