2017-10-14 39 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