2013-10-29 29 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上获得帮助,因为它不是一个编程问题。