0

我正在尝试在 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。我定义F1uv为双积分的函数,但还有一个变量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代表无限。

4

1 回答 1

0

在成功回答了同一张海报的后续问题后,我意识到这个答案的相关部分是错误的。我会删除答案,但我不能,因为它被接受了。因此,此免责声明...


简单的答案是:您的定义F1包含对 的引用z,但未将其指定为该函数的参数。

z但是,将其指定为附加参数也无济于事,因为 thenI1不再是常量,而是z.

我不是数值积分方面的专家,但据我所知,这意味着您不能对表达式进行数值积分,至少不能使用quad和的组合dblquad。外指数函数的参数不是常数,数值积分不能返回函数。

可能可以重新排列积分以使其成为可以数字积分的形式,但我不能告诉你如何。

另一个问题是用 10^5 “表示”无穷大不一定是有用的近似值——这完全取决于被集成的函数的行为。一个可能的技巧可能是进行变量替换,以便将每个趋于无穷大的变量写为另一个具有有限范围的变量的函数。

我的建议:尽量用分析方法评估这个积分只有在确定没有分析方法时才使用数值。并尝试在 math.stackexchange.com 上获得帮助,因为这不是编程问题。

于 2013-10-29T19:58:36.590 回答