2017-10-14 6 views
1

Matlab式の空白は純粋に美容的だと私は理解しましたが、何が起きているのか分かりません。何か案は?複素数定義の空白の効果

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

(私は2016a上だ)

EDIT:応答の 感謝。

私は非複素数を見たとき、それは何が起こっているか確認するために簡単です実現:

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

しかし、複素数に適用されたものと同じ構文解析ルールは気づいていないために望ましくない結果を招く可能性があります。

EDIT 2: 私は上記のすべてのロジックを完全に理解していますが、このような恐ろしいものにつながる可能性がある場合は、区切り文字の空白とカンマのミックス方法に満足しているとは思えません。 ..

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

答えて

3

最初のケースでは、+オペレータの周囲にスペースがないため、バイナリオペレータとして解決されます。したがって、複素数として解決されます。 +i間にスペースがないように、第2の場合には

は、そのような+1として単項オペレータとして解決されます。一方、空間は行列要素のセパレータであるため、この場合、2つの要素+i1が検出されます。正しい場合は、[1 + +i]と書くことができます。これは、3番目のケースと同等です。なぜなら+オペレータの周囲の空間の第3のケースで

は、再び+バイナリオペレータとして解決されなければなりません。したがって、それは複素数として解決されます。

3

スペースは常に外観のためではありません。行列を定義したいときは、行の要素間を区切るためにスペースを使用することができます。実際には、コンマ,またはスペースを使用して、2つの結果的な要素を区切ることができます。

例: A=[1 2 3; 4 5 6]2x3行列であると等しくなるであろう:同じ行の別個の要素ようにMATLABは、+iとしてプラスiを考慮し、あなたの第2のケースで[1,2,3;4,5,6];

+0

空白はリストセパレータですが、大文字と小文字は区別されません。確かに、パーサーは常に項目分離記号としてホワイトスパースを取るか、または区切り文字を探す前に複素数を解決する必要があります。 私にとって、それは直感的ではありません。 – jacanterbury

+1

ケース3の場合、 "+"(プラス)は "i"の直後ではありませんが、前後にスペースがあります。そのため、それは総額とみなされ、別々には考慮されません。ケース2では、それが「+ i」でマイナスiではないことを強調したようです。したがって、単にその記号です。 – srt