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

问题描述 投票:0回答:1

我正在尝试在 matlab 中计算以下积分:https://i.stack.imgur.com/iZg5e.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
定义为
u
v
的二重积分函数,但还有一个变量
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
来代表无穷大。

matlab numerical-integration
1个回答
0
投票

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


简单的答案是:您对

F1
的定义包含对
z
的引用,但未将其指定为该函数的参数。

但是,将

z
指定为附加参数并没有帮助,因为这样
I1
就不再是常量,而是本身是
z
的函数。

我不是数值积分方面的专家,但据我所知,这意味着您无法对表达式进行数值积分,至少不能使用

quad
dblquad
的组合。外部指数函数的参数不是常数,数值积分不能返回函数。

也许可以重新排列积分,使其成为可以进行数值积分的形式,但我不能告诉你如何做。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.