2014-10-01 322 views
0

我必須在Matlab中對兩個函數A(x,y)和B(x,y)乘積的積分進行數值計算。這兩個函數是二維數組形式。積分應爲以下矩陣在Matlab中的數值積分

$ C(x,z)=\int_{a}^{b} dy' A(x,y')B(y',z) $

據我所知,功能,如「trapz」是數據陣列的數值積分,但我不明白何來適應我的情況。

謝謝

朱塞佩

+0

得到在(X,Z)=(0,0)的結果我輸入錯誤:A和B是2維數組 – user2969317 2014-10-01 17:29:52

+0

我建議在其上的工作點點自己,問一個更具體的問題。除非在這裏有人已經解決了你所問的確切問題,否則stackoverflow社區不可能提供幫助。 trapz可能會爲你工作,所以玩弄它,看看你可以自己想出什麼 – Trogdor 2014-10-01 18:05:11

回答

1

指導你,我會建立一些(方)矩陣功能

%// Problem size. 
n = 3; 
%// Auxiliary constant matrices. 
D1 = rand(n, n); 
D2 = rand(n, n); 
D3 = rand(n, n); 
D4 = rand(n, n); 
%// Matrix functions and product. 
A = @(x,y) x^2*D1.^2 + y*D2; 
B = @(y,z) (log(y)+z)*D3.^3 - z*sin(D4); 
P = @(x,y,z) A(x,y)*B(y,z); 

這樣P是三個變量的函數,現在我們將整合它在y中,當x和z都爲0.

a = 0; 
b = 1; 
integral(@(y) P(0,y,0), a, b, 'ArrayValued', true) 

爲了推廣該解決方案將任意域,我們可以建立在(X,Z)

Int = @(x,z) integral(@(y) P(x,y,z), a, b, 'ArrayValued', true); 

一個新的功能,並定義網格

x = linspace(-1, 1, 11); 
z = linspace(-2, 2, 21); 
[X, Z] = meshgrid(x, z); 

現在,我們可以評估對全網的積分。

C = arrayfun(Int, X(:), Z(:), 'UniformOutput', false); 

這樣C將包含所有的積分時,存儲在單元的一維數組。

作爲檢查我們可以通過調用

C{sub2ind([11 21], 6, 11)} 
+0

謝謝。我在做這個工作! – user2969317 2014-10-02 07:43:03