2017-04-14 60 views
1

我一直在嘗試解決matlab中第三個變量的雙重積分方程。解決第三個變量的雙重積分方程

一個例子:

起初,我試圖象徵性地解決它(當k = 1),如下:

syms x y h 
F = @(x,y,h) 2*x*y+4*h; 
f = @(x) x/2; 
solve(int(int(F(x,y,h)*f(x),x,0,3)*f(y),y,0,1)-3, h) 

的代碼給出了正確的答案,即ħ當k = 1時= 2/3。

然而,對於我真正的問題,函數F和f是非常複雜的。當我在複數F和f上面應用相同的代碼時,matlab並沒有在適當的時間內解決它。其實我不知道它是否能解決 - 我讓代碼運行了30分鐘,並強制它終止。我將不得不進一步追求這條路線,但現在,我試圖用數字來解決它。下面的代碼是我曾嘗試過的:

F = @(x,y,h) 2.*x.*y+4.*h; 
f = @(x) x./2; 
g1 = @(y,h) integral(@(x) F(x,y,h).*f(x),0,3) 
g2 = @(h) integral(@(y) g1(y,h).*f(y),0,1)-3 
bsolve = fsolve(g2,0) 

爲什麼這段代碼給我錯誤的答案是0.5833?

回答

0

從文檔integral

對於標量值問題函數Y = FUN(X)必須接受的載體 參數X並返回一個向量結果Y,被積函數 在X每個元件進行評價。對於數組值問題(請參閱下面的 'ArrayValued'選項)FUN必須接受標量並返回一個值數組。

由於您正在嵌套調用integral,因此外部積分將向量傳遞到內部調用中。爲了解決這個問題,內積分,g1必須配置爲標量操作:

g1 = @(y,h)integral(@(x)F1(x,y,h).*f1(x),0,3,'ArrayValued',true) 

現在,該代碼將在浮點返回2/3。您應該也可以使用fzero而不是fsolve來解決這個單變量查找問題。

+0

非常感謝! – user2011987