【问题标题】:mathematica: evaluation order in numerical integrationMathematica:数值集成中的评估顺序
【发布时间】:2016-09-23 01:06:32
【问题描述】:

您好,我有一个关于数学中数值积分的问题。这是我的测试功能

Table[NIntegrate[
Boole[Sqrt[1 - cosk^2]*Sqrt[1 - cosk2^2] > Abs[a - cosk*cosk2]]/
Sqrt[(1 - cosk^2)*(1 - cosk2^2) - (a - cosk*cosk2)^2],
{cosk, -1,1}, {cosk2, -1, 1}, Method -> "GlobalAdaptive"], {a, -.9, .9, .1}]

积分产生复数,尽管由于被积函数中的布尔函数,sqrt 中的参数应始终为正,因此只产生实数值。是否可以首先评估布尔函数,并且只有当它为真时才开始进行数值积分?

如果我使用蒙特卡罗积分策略计算相同的积分

Table[NIntegrate[
Boole[Sqrt[1 - cosk^2]*Sqrt[1 - cosk2^2] > Abs[a - cosk*cosk2]]/
Sqrt[(1 - cosk^2)*(1 - cosk2^2) - (a - cosk*cosk2)^2], {cosk, -1, 
1}, {cosk2, -1, 1}, Method -> {"MonteCarlo", "MaxPoints" -> 10^8, 
"SymbolicProcessing" -> None}], {a, -.9, .9, .1}]

我怎样才能知道它是否由于布尔函数而总结了很多零?我认为如果首先评估蒙特卡洛网格的每个样本点的布尔函数,评估可以节省大量计算时间。如果我用“AdaptiveMonteCarlo”替换“MonteCarlo”,结果就会完全错误。

【问题讨论】:

    标签: math wolfram-mathematica numerical-integration


    【解决方案1】:

    如果你转变为真正的守卫会发生什么? (Boole 形式可能太聪明了一半(Mathematica 可能不会将 false --> 0 视为真正的守卫)。

    Table[NIntegrate[
    If[Sqrt[1 - cosk^2]*Sqrt[1 - cosk2^2] > Abs[a - cosk*cosk2],
    1/Sqrt[(1 - cosk^2)*(1 - cosk2^2) - (a - cosk*cosk2)^2], 0],
    {cosk, -1,1}, {cosk2, -1, 1}], {a, -.9, .9, .1}]
    

    【讨论】:

      【解决方案2】:

      这里是如何使用EvaluationMonitor 来了解采样方法的作用:

      out = Reap[With[{a = -.9},
         NIntegrate[
          v = Boole[
             Sqrt[1 - cosk^2]*Sqrt[1 - cosk2^2] > Abs[a - cosk*cosk2]]/
            Sqrt[(1 - cosk^2)*(1 - cosk2^2) - (a - 
                 cosk*cosk2)^2], {cosk, -1, 1}, {cosk2, -1, 1}, 
          Method -> "LocalAdaptive", 
          EvaluationMonitor :> Sow[{cosk, cosk2, v}]]]]
      

      注意LocalAdaptive 非常慢,但可能是最准确的纯数值结果:

           Graphics@Point[out[[2, 1]][[All, {1, 2}]]]
      

      这里是全局自适应的。

      MonteCarlo 只是到处采样,而不考虑被积函数。

      您最好的选择可能是使用全局自适应并设置MinRecursion。让自己满意,虚部可以忽略不计,取结果的实部。 当然,分析解决您的集成限制并一起消除Boole 会好得多。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-05
        • 1970-01-01
        • 2011-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多