2013-10-29 30 views
0

我試圖評估MATLAB下面的積分:http://i.imgur.com/Iuc4VT5.png如何在Matlab中正確編寫這個集成?

這裏是我的代碼:

alpha = 2; 
F1 = @(u,v) 2*u.*v.*exp(-u.^2)./(1+2*z.*u.*v); 
F2 = @(v) v; 
F3 = @(z) exp(-z)./sqrt(z); 
I1 = dblquad(F1,0,1e5,2,1e5); 
I2 = quad(F2,2,1e5); 
quad(F3*exp(-(I2-I1)),0,1e5); 

我得到如下圖所示的錯誤。這些錯誤並不多,但我猜這是因爲我寫了F1。作爲uv的函數,我定義了F1作爲雙積分的函數,但也有一個變量z,它是外積分的變量。我這樣做是因爲我無法將z從內部積分中分離出來。有沒有更好的方法來編寫這個集成?

Error in ==> @(u,v)2*u.*v.*exp(-u.^2)./(1+2*z.*u.*v) 


Error in ==> dblquad>innerintegral at 73 
fcl = intfcn(xmin, y(1), varargin{:}); %evaluate only to get the class below 

Error in ==> quad at 76 
y = f(x, varargin{:}); 

Error in ==> dblquad at 53 
Q = quadf(@innerintegral, ymin, ymax, tol, trace, intfcn, ... 

我選擇1e5表示無窮大。

+0

你告訴我們錯誤發生在哪裏,但不是錯誤信息是什麼。 – Daniel

+0

@DanielR這些都是我在Matlab中看到的所有錯誤消息。 –

+0

那麼,在我的系統上運行它肯定會有另一個消息:'未定義的函數或變量'z'. –

回答

0

在成功回答了同一張海報的follow-up question後,我意識到這個答案的相關部分是錯誤的。我會刪除答案,但我不能,因爲它被接受。因此,該聲明...


簡單的答案是:你的F1定義包含z一個參考,但它沒有被指定爲函數的參數。

但是,它不會幫助指定z作爲附加參數,因爲然後I1不再是常數,而是它本身是z的函數。

我不是數值積分方面的專家,但據我所看到的,這意味着你不能數值積分表達式,至少不使用的quaddblquad的組合。外部指數函數的參數不是一個常數,而數值積分不能返回函數。

可能重新排列積分以將其轉換爲可以數字化的形式,但我不能告訴你如何。

另一個問題是,「代表」無窮大10^5不一定是一個有用的近似值 - 這一切都取決於被整合的函數的行爲。一個可能的竅門可能是做一個變量替換,使得每個變量無窮大都被寫爲一個有限範圍的另一個變量的函數。

我的建議:儘量儘可能分析評估這個積分,只有當你確定沒有分析方法時才使用數字。並嘗試在math.stackexchange.com上獲得幫助,因爲它不是一個編程問題。