[英]Matlab complex matrix magnitude
我有一個矩陣S像這樣:
1 4 7
2 5 8
3 6 9
然后我制作a=complex(S{2},S{3})
並想找到abs(a);
。 在MATLAB中這是不可能的,因為a
不是整數-它是一個矩陣。 如何獲得矩陣a
的每一行的大小?
PS:使用textscan()
從文本文件讀取矩陣,因為S = textscan(fileID,'%d %d %d', 'delimiter','\\t');
。
第二個問題:
再次假設具有以下S矩陣。
1 4 7 2 1
2 5 8 3 4
3 6 9 6 8
現在,我想以這樣的方式排列它們,使第2,3和4,5列交替如下:
4 2
7 1
5 3
8 4
6 6
9 8
如何不使用循環就可以做到這一點? 謝謝。
按照我在注釋中的假設,我假設第二列由矩陣的實部組成,而第三列由虛部組成。 您的矩陣S
實際上是元素的單元格數組。 您無需先使用complex
abs
。 您可以簡單地取每個列,分別對它們進行平方,將它們加在一起並取平方根。 我要做的就是將像元數組轉換為2D矩陣,將其轉換為兩倍以在找到大小時允許浮點精度,然后執行我上面所做的操作。 這是必要的,因為abs
和sqrt
僅適用於浮點數。 由於textread
的%d
分隔符,您在S
中的元素已經是int32
了。 換一種說法:
Smat = double(cell2mat(S));
realComp = Smat(:,2);
imagComp = Smat(:,3);
mag = sqrt(realComp.^2 + imagComp.^2);
mag
因此將為您返回每一行的大小,假設第二列是實部,而第三列是虛部。
不過,如果你使用是死心塌地 complex
和abs
,你能做到像這樣:
Smat = double(cell2mat(S));
imagNumbers = complex(Smat(:,2), Smat(:,3));
mag = abs(imagNumbers);
這仍將為您提供與上述內容相同的結果。
在上面的帖子中看到您的編輯,我們可以很容易地實現此目的,方法是對矩陣進行子設置,然后對所需矩陣的每個部分進行reshape
。 換一種說法:
Smat = double(cell2mat(S));
realMat = Smat(:,2:3); %// Grab second and third columns
imagMat = Smat(:,4:5); %// Grab fourth and fifth columns
realCol = reshape(realMat.', [], 1); % // Form the columns like you specified
imagCol = reshape(imagMat.', [], 1);
finalMatrix = [realCol imagCol];
finalMatrix
應該在單個矩陣中包含您在上面指定的這兩列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.