0
我必須在Matlab中對兩個函數A(x,y)和B(x,y)乘積的積分進行數值計算。這兩個函數是二維數組形式。積分應爲以下矩陣在Matlab中的數值積分
據我所知,功能,如「trapz」是數據陣列的數值積分,但我不明白何來適應我的情況。
謝謝
朱塞佩
我必須在Matlab中對兩個函數A(x,y)和B(x,y)乘積的積分進行數值計算。這兩個函數是二維數組形式。積分應爲以下矩陣在Matlab中的數值積分
據我所知,功能,如「trapz」是數據陣列的數值積分,但我不明白何來適應我的情況。
謝謝
朱塞佩
指導你,我會建立一些(方)矩陣功能
%// 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)}
謝謝。我在做這個工作! – user2969317 2014-10-02 07:43:03
得到在(X,Z)=(0,0)的結果我輸入錯誤:A和B是2維數組 – user2969317 2014-10-01 17:29:52
我建議在其上的工作點點自己,問一個更具體的問題。除非在這裏有人已經解決了你所問的確切問題,否則stackoverflow社區不可能提供幫助。 trapz可能會爲你工作,所以玩弄它,看看你可以自己想出什麼 – Trogdor 2014-10-01 18:05:11