如何在Matlab中正确编写此集成?

时间:2013-10-29 17:20:14

标签: matlab integration

我正在尝试在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的函数作为double积分,但也有一个变量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代表无限。

1 个答案:

答案 0 :(得分:0)

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


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

但是,将z指定为附加参数无济于事,因为I1不再是常量,而是z的函数。

我不是数值积分方面的专家,但据我所知,这意味着你无法在数字上整合你的表达,至少不使用quad和{{1}的组合}。外部指数函数的参数不是常量,数值积分不能返回函数。

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

另一个问题是,用10 ^ 5“表示”无穷大不一定是有用的近似值 - 它全部取决于正在积分的函数的行为。一个可能的技巧可能是进行变量替换,使得每个变为无穷大的变量都被写为具有有限范围的另一个变量的函数。

我的建议:尝试尽可能地分析分析,并且只有在确定没有分析方法时才使用数字。并尝试在math.stackexchange.com上获得帮助,因为它不是编程问题。