如果要確保保留complex
數據類型,請明確地將該數字轉換爲complex
。因此:
y(1) = complex(x(1));
因爲x(1)
只有一個真正的分量,MATLAB自動這是爲了節省空間轉換爲real
。正如你所看到的,如果複數是純真實的,那麼簡單地存儲真實分量會更有效率,因爲它是8個字節的數字,與complex
相比,它是16個字節的數字 - 對於真實分量爲8,對於虛數爲8零件。
同樣在你的代碼中,y
在技術上將全部爲real
,因爲沒有虛部。如果y
至少有一個複雜值,則y
仍將保留爲complex
。看看下面的代碼:
x = complex(1:2,0:1);
y = complex(zeros(1,2), [3 5]);
whos x y
Name Size Bytes Class Attributes
x 1x2 32 double complex
y 1x2 32 double complex
現在,讓我們嘗試分配和檢查的x
類和y
:
y(1) = x(1);
whos x y
Name Size Bytes Class Attributes
x 1x2 32 double complex
y 1x2 32 double complex
此外,作爲一個旁註,你不應該與x
有關被轉換爲純真實。只要您將至少一個複數值放入此陣列中,x
會自動提升爲complex
。試一下,比如:
x = 1:5;
whos x
Name Size Bytes Class Attributes
x 1x5 40 double
現在使用相同的x
陣列,請嘗試:
x(3) = 1 + 4i;
whos x
Name Size Bytes Class Attributes
x 1x5 80 double complex
編輯
與您的意見,去你能做些什麼,以確保該數組將保持複雜將會在x(1)
的虛部添加一個無限小數。一個足夠小的數字,以便數值差異幾乎爲零,但足以尊重y
仍然是一個複數值陣列。因此:
x = complex(1:2,0:1);
y = complex(zeros(1,2),0);
y(1) = x(1) + i*eps;
who x y
Name Size Bytes Class Attributes
x 1x2 32 double complex
y 1x2 32 double complex
eps
代表machine epsilon。如果顯示y
,顯示出更多顯著的數字,這就是我們看到:
format long
y
y =
1.000000000000000 + 0.000000000000000i 0.000000000000000 + 0.000000000000000i
試一下,看看是否適合你。
如果'y'初始時全爲0,則鑄造'x(1)'不起作用。它似乎適用於您的示例,因爲y(2)具有非零虛部。 – 2014-12-06 03:49:57
@FabioSomenzi - 我明白了。但是,你不應該關心'x'被轉換爲純真實的。請參閱我的編輯,瞭解如果從純真實數組開始,然後將複數值賦給其中的任何位置,會發生什麼情況。 – rayryeng 2014-12-06 03:52:12
根據複雜屬性的實現方式,我可能會擔心導入很少的問題,但我希望一次性完成返回值的分配。 – 2014-12-06 03:53:14