2017-10-14 42 views
1

我明白Matlab表达式中的空白是纯粹的化妆品,但我发现这一点,我不明白发生了什么。有任何想法吗?具有复数定义的空白的影响

>> [1+i] 
ans = 
    1.0000 + 1.0000i 
>> [1 +i] 
ans = 
    1.0000 + 0.0000i 0.0000 + 1.0000i << ???? 
>> [1 + i] 

(我在2016a)

编辑: 感谢您的答复。

我意识到这是比较容易看到在看非复数时发生的事情:

>> [2-1] 
ans = 
    1 
>> [2 - 1] 
ans = 
    1 
>> [2 -1] 
ans = 
    2 -1 

但应用到复数同解析规则可能导致的不知道不良的后果。

编辑2: 我完全理解所有上述的逻辑,但我不确定我很满意混合空间和逗号分隔符的mix'n'match方法,如果它可能导致这样的可怕事情...

> >> [1+2,3+4] ans = 
>  3  7 
> >> [1 +2,3+4] ans = 
>  1  2  7 

回答

3

对于第一种情况,由于+运算符周围没有任何空格,因此它被解析为二进制运算符。因此,解决复杂的数字。

对于第二种情况,因为没有+i之间的任何空间,它被解析为一元操作者如+1。另一方面,空间是矩阵元素的分隔符,因此在这种情况下检测到两个元素+i1。对于正确的情况,您可以编写[1 + +i],这与第三种情况相同。

由于各地运营商 +空间

在第三种情况下,再次+应该被解析为二元操作。因此,它将被解析为一个复数。

3

空间并不总是为外观。当想要定义矩阵时,可以使用空间来分隔一行的元素。其实你可以使用逗号,或空格来分隔两个结果元素。

实施例: A=[1 2 3; 4 5 6]将是一个2x3矩阵,并且等于:[1,2,3;4,5,6];

在第二个情况下MATLAB认为+i作为加i,从而在同一行中的单独元件。

+0

好处是,空白是一个列表分隔符,但不应该情况下3应该产生与情况2相同的输出?当然,解析器应该总是将whitepsace作为项目分隔符,或者在查找分隔符之前应首先解析复数。 对我而言,它所做的并不直观。 – jacanterbury

+1

在情况3中,“+”(加号)不在“我”后面,但前后有一个空格。这就是为什么它被视为一笔款项,而不是分开。在情况2中,就像你强调它是一个“+ i”而不是减i,所以它只是它的标志。 – srt