【问题标题】:How do I properly write this integration in Matlab?如何在 Matlab 中正确编写此集成?
【发布时间】:2013-10-29 17:20:13
【问题描述】:

我正在尝试在 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 来代表无穷大。

【问题讨论】:

  • 你是在告诉我们错误是在哪里引发的,而不是错误信息是什么。
  • @DanielR 这些是我在 Matlab 中看到的所有错误消息。
  • 好吧,在我的系统上运行它肯定还有另一条消息:Undefined function or variable 'z'.
  • @A.Donda 我没有收到那个错误,我正在运行旧版本的 Matlab。但这可能是错误,我相信我定义F1 的方式不正确,但我不知道有任何其他方式。有什么建议吗?
  • @A.Donda 谢谢。我看看能不能从 math.stackexchange.com 得到任何帮助

标签: matlab integration


【解决方案1】:

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


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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-16
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    相关资源
    最近更新 更多