2014-03-01 80 views
-1

我需要在matlab中使用integral2函數執行四元積分。代碼如下:使用嵌套積分的四元積分輸入數組尺寸誤差

Rb = @(rho_1,phi_1) rho_1.*cos(phi_1); 
Sb = @(rho_2,phi_2) rho_2.*cos(phi_2); 
Tb = @(rho_1,phi_1,rho_2,phi_2) rho_1.*cos(phi_1)-rho_2.*cos(phi_2); 
InnerIntegrand = @(rho_1,phi_1,rho_2,phi_2) Rb(rho_1,phi_1).*Sb(rho_2,phi_2).*Tb(rho_1,phi_1,rho_2,phi_2); 
InnerIntegral = @(rho_1,phi_1) integral2(@(rho_2,phi_2) InnerIntegrand(rho_1,phi_1,rho_2,phi_2),0,3,0,2*pi); 
II = integral2(InnerIntegral,0,3,0,2*pi); 

其中InnerIntegrand (rho_1,phi_1,rho_2,phi_2)是被積函數。 InnerIntegral通過rho_2phi_2進行評估,其從外部integral2(整合在rho_1phi_1之上)調用。

我得到一個錯誤:

Error using .* 
Matrix dimensions must agree. 

Error in @(rho_1,phi_1,rho_2,phi_2)Rb(rho_1,phi_1).*Sb(rho_2,phi_2).*Tb(rho_1,phi_1,rho_2,phi_2) 


Error in @(rho_2,phi_2)InnerIntegrand(rho_1,phi_1,rho_2,phi_2) 


Error in integral2Calc>integral2t/tensor (line 238) 
     Z1 = FUN(X(VTSTIDX),Y(VTSTIDX)); NFE = NFE + 1; 

是誤差來由於兩個integral2調用不同的數組的大小?什麼是問題?

回答

0

查看我的回答similar question。 在你的情況下,你可以使用

integral2(@(rho_1,phi_1)arrayfun(InnerIntegral,rho_1,phi_1),0,3,0,2*pi)