簡體   English   中英

如何在Matlab中正確編寫此集成?

[英]How do I properly write this integration in Matlab?

我正在嘗試評估matlab中的以下積分: http : //i.imgur.com/Iuc4VT5.png

這是我的代碼:

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的方式。 我將F1定義為對偶積分的uv的函數,但是還有一個變量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代表無窮大。

在成功回答了同一發布者的后續問題之后 ,我意識到此答案的相關部分是錯誤的。 我會刪除答案,但不能,因為它已被接受。 因此,此免責聲明...


簡單的答案是:您對F1定義包含對z的引用,但未將其指定為該函數的參數。

但是,將z指定為附加參數將無濟於事,因為I1不再是常量,而是本身是z的函數。

我不是數值積分方面的專家,但據我所知,這意味着您無法對表達式進行數值積分,至少不能使用quaddblquad的組合。 外部指數函數的參數不是常數,並且數值積分不能返回函數。

可能可以重新排列積分,使其成為可以數字積分的形式,但是我無法告訴您如何進行。

另一個問題是,用10 ^ 5“表示”無窮大不一定是有用的近似值-它全取決於要集成的函數的行為。 一個可能的技巧可能是進行變量替換,以便將變為無窮大的每個變量寫為另一個具有有限范圍的變量的函數。

我的建議:嘗試盡可能通過分析來評估此積分,並且僅在確定沒有分析方法時才使用數字。 並嘗試在math.stackexchange.com上尋求幫助,因為這不是編程問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM