【问题标题】:A bug in matlab quad function?matlab四函数中的错误?
【发布时间】:2013-09-26 19:48:41
【问题描述】:

Matlab quad 函数中似乎有一个错误,用于使用求积公式计算积分。运行

四边形(@(x) (2/sqrt(2*pi))*(x.^2).*exp(-x.^2/2), 0, 10)

返回1.0000这是正确答案,但将上限增加到100,即

四边形(@(x) (2/sqrt(2*pi))*(x.^2).*exp(-x.^2/2), 0, 100)

回馈3.4715e-8quadl 似乎也是如此。但是,integral 命令似乎工作正常。这是一个已知问题还是我遗漏了什么?

【问题讨论】:

  • 有趣。仅将下限增加到 .01 会返回 1

标签: matlab


【解决方案1】:

octave 上使用quadquadl 运行两个表达式,结果为1。机器可能有问题。

【讨论】:

  • 它可能与 MATLAB 版本、实现等有关。它可能已在较新的版本中得到修复。 (我在 Linux 机器上的 R2012a 中找到了它。)
【解决方案2】:

阅读quaddocumentation,看来改用quadgk 可能是个好主意。在这种情况下,它给出了积分区间 (0,100) 的正确结果:

>> quadgk(@(x) (2/sqrt(2*pi))*(x.^2).*exp(-x.^2/2), 0, 100)

ans =

    1.0000

【讨论】:

  • 谢谢,那可能是正确的选择。虽然很奇怪,其他的quad 函数都这么不稳定。
  • 同意。而且还不清楚quadgk 是否始终是最佳选择,或者何时选择每个变体
  • @passerby51, et al.: Quadrature 就像数值积分 - 有很多方法,需要使用适合手头功能的方法和/或使用适当的设置。指数、对数和周期函数通常需要特别注意。例如,在双精度中,如果x 大于 38.7,此函数的计算结果为零。 quad 如果公差选项设置得足够小,实际上可以使用,例如1e-12。但quadgk(或较新版本中的integral)几乎总是更好的首选。
猜你喜欢
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多