2015-04-05 38 views
1

比方說,我們有如何從Matlab中的多維數組中獲取積分?

A(:,:,1) = 

1  1  1 
1  1  1 
1  1  1 


A(:,:,2) = 

2  2  2 
2  2  2 
2  2  2 


A(:,:,3) = 

2  2  2 
3  3  3 
2  2  2 

我怎麼會沿着「頁」(即「Z」)軸進行一個整體在每個元素?

我們結果矩陣M應該是3×3,並且例如:

M(1:1)將包含的A(1,1,1), A(1,1,2)A(1,1,3)和積分。

M(1:2)將包含A(1,2,1), A(1,2,2)A(1,2,3)的積分。

依此類推。

我想獲得矩陣M這樣的:

M = 
3.5 3.5 3.5 
4  4  4 
3.5 3.5 3.5 

任何想法如何做到這一點?我已經嘗試過trapz但沒有骰子。

+0

我看不出,例如,A(1,1,:)計算至3.5。你只是想計算總和? – Andy 2015-04-05 20:34:13

+0

'trapz([1 2 2])= 3.5' - 也就是說,取每個頁面的左上角值,依此類推 - 其他值相應計算 - 我不想要這個總和,但是在每個索引中積分 - 讓我知道你的想法 – pepe 2015-04-05 20:43:29

+0

這總是取決於你的離散數據如何表示一些連續函數。如果連續函數是這些值的線性插值,則梯形法則將給出精確的積分。它也可以表示一個分段常數函數,在這種情況下,您需要沿第三維的和。沒有一個正確的答案,因爲你需要知道你的實際連續函數是什麼,除了剛纔提到的那些簡單的函數,還有很多其他的可能性。 – knedlsepp 2015-04-05 20:56:37

回答

3

只需使用從trapz的DIM參數(這部作品在八度):

A = bsxfun ("times", ones (3, 3), permute([1 2 2], [1, 3, 2])); 
A(2, :, 3) = 3; 
M = trapz (A, 3) 
M = 

    3.5000 3.5000 3.5000 
    4.0000 4.0000 4.0000 
    3.5000 3.5000 3.5000 
+0

完美,如此簡單,沒有從'trapz'文檔中理解, – pepe 2015-04-05 21:26:36