0

繁殖的n×m的矩陣,矩陣nxmxp不同尺寸在我目前的分析,我想乘以矩陣(FLM),尺寸的n×m的,用矩陣的逆nxmxp,然後用這個結果乘以矩陣的逆(flm)。如何在MATLAB

使用下面的代碼我嘗試:

flm = repmat(Data.fm.flm(chan,:),[1 1 morder]); %chan -> is a vector 1by3 
A = (flm(:,:,:)/A_inv(:,:,:))/flm(:,:,:); 

不過。由於尺寸問題,我收到以下錯誤消息: 錯誤使用==> mrdivide 輸入必須是2-D,或者至少有一個 輸入必須是標量。 要計算基於元素的RDIVIDE,請改爲使用 RDIVIDE(./)。

我不知道如何繼續使用循環,所以任何人的任何建議?

+0

P.S.我複製一個錯誤的東西(第二個flm沒有參數),所以它看起來像這樣: flm = repmat(Data.fm.flm(chan,:),[1 1 morder]); A =(flm(:,:,:)/ A_inv(:,:,))/ flm(:,,:,:); – tTimoteof 2014-11-25 10:45:26

+0

歡迎來到SO!請注意,您可以通過點擊問題下方的「修改」按鈕來編輯自己的問題。此外,如果嘗試儘可能好地格式化代碼(例如,在代碼前沒有27個空格),那就很好。 – 2014-11-25 12:47:32

+0

你如何計算3D矩陣的逆?這是不可能的。每個2D切片是分別反轉的嗎?另外,爲什麼要計算A的(未定義的)逆並使用除法,而不是僅僅乘以它? – 2014-11-25 12:53:37

回答

1

我認爲你正在尋找一種方便乘法矩陣,當一個是比另一個更高的維度。在這種情況下,您可以使用bxsfun自動「擴大」較小的矩陣。

x = rand(3,4); 
y = rand(3,4,5); 
bsxfun(@times,x,y) 

這很簡單,而且非常有效。

有關更多示例,請務必查看doc bsxfun

+0

感謝您的澄清。但是,我正在檢查,下面的代碼不會給我相同的結果: x = rand(3,3); y = rand(3,3,5); test1 = bsxfun(@ times,x,y) for i = 1:size(y,3) test2 = x * y(:,:,i); 結束; 這是爲什麼?你知道嗎? 是否因爲bsxfun [[]]對數組A和B [...]'應用逐個元素的二進制操作,如果是這樣的話我怎樣才能用矩陣乘法的代數矩陣來解決我的問題? – tTimoteof 2014-11-25 12:28:20

+0

@tTimoteof,與完全相同的結果? – 2014-11-25 12:57:45

+0

@tTimoteof它確實是逐元素乘法。如果你想要正規矩陣乘法,我只需要在你的評論中提到的單個循環。只要確保結果矩陣在循環中不增長。 – 2014-11-25 13:14:01