2016-06-10 95 views
0

我試圖整合以下形式的嵌套積分:多個嵌套積分

s_min = 0; 
s_max = lam; 
t_min = 0; 
t_max = pi; 
pmax = @(x,y) y; 
pmin = 0; 
ymax = 1; 
ymin = @(x) x; 
xmax = 1; 
xmin = 0; 

eqn = integral(@(x) x.*integral(@(y) (1/y).*integral(@(p) (exp(-arrayfun(@(p,x,y)integral2(@(s,t)myfun(s,t,p,x,y),s_min,s_max,t_min,t_max),p,x,y)./(k.*T))),pmin,pmax,'Arrayvalued',true),ymin,ymax,'Arrayvalued',true),xmin,xmax,'Arrayvalued',true) 

但是,我得到的錯誤:

Error using integral (line 85)
A and B must be floating point scalars.

我想通過增加'Arrayvalued'爲單積分和arrayfun爲雙重積分,這不會是一個問題。爲什麼這不起作用?

回答

0

integral()的範圍參數必須是數字,但是您要給函數pmaxymin。你需要評估它們。我將它分成多行,以使其具有一定的可讀性。

fa = @(p,x,y) @(s,t) myfun(s,t,p,x,y); 
fb = @(p,x,y)integral2(fa(p,x,y),s_min,s_max,t_min,t_max); 
fc = @(x,y) @(p) (exp(-arrayfun(fb,p,x,y)./(k.*T))); 
fd = @(x)@(y) (1/y).*integral(fc(x,y),pmin,pmax(x,y),'Arrayvalued',true); 
fe = @(x) x.*integral(fd(x),ymin(x),ymax,'Arrayvalued',true); 
eqn = integral(fe,xmin,xmax,'Arrayvalued',true) 

以這種方式實現高維集成看起來相當低效,它在寫這個的時候並沒有在我的機器上完成。您可能必須實施自己的集成商。

+0

嗨janismac,謝謝!你有什麼建議或參考資料可以讓我自己創建集成商嗎?用循環函數可以做到這一點嗎? – SFfever

+0

對於矩形域(又名超立方體)上的有界函數,它將非常容易。但是你的函數有一個奇點'1/y',這需要某種自適應網格和錯誤控制。這個數學超出了我。 – janismac