簡體   English   中英

Matlab復雜矩陣幅度

[英]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矩陣,將其轉換為兩倍以在找到大小時允許浮點精度,然后執行我上面所做的操作。 這是必要的,因為abssqrt僅適用於浮點數。 由於textread%d分隔符,您在S中的元素已經是int32了。 換一種說法:

Smat = double(cell2mat(S));
realComp = Smat(:,2);
imagComp = Smat(:,3);
mag = sqrt(realComp.^2 + imagComp.^2);

mag因此將為您返回每一行的大小,假設第二列是實部,而第三列是虛部。


不過,如果你使用是死心塌地 complexabs ,你能做到像這樣:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM