【发布时间】: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