你如何在Matlab中编写蒙特卡洛积分方法?

时间:2016-09-16 05:34:20

标签: matlab math montecarlo

我正在试图弄清楚如何使用Matlab改进基于数学的应用程序,尽管我似乎无法弄清楚如何使蒙特卡罗积分方法起作用。我觉得我也没有正确思考算法。截至目前,我有类似的东西:

    // For the function {integral of cos(x^3)*exp(x^(1/2))+x dx
    // from x = 0 to x = 10
    ans = 0;
    for i = 1:100000000
        x = 10*rand;
        ans = ans + cos(x^3)*exp(x^(1/2))+x
    end

我觉得这完全错了,因为我的产出几乎没有达到预期的水平。我该如何正确地写这个?或者,设置此算法的算法应该如何?

2 个答案:

答案 0 :(得分:4)

两个问题:

1)如果你看看你正在计算什么," ans"随着我的增加,它会增长。通过放置大量样本,您只需增加输出值。你怎么能将这个值标准化,使它保持相对相同,无论样本数量多少?

2)想想你在这里想要计算什么。你现在的" ans"给你的功能输出的100000000独立随机测量值的总和。如果您除以您采样的样本数,这个数字代表什么?您如何将这些知识与整合范围相结合,以获得曲线下的预期面积?

答案 1 :(得分:3)

我设法用我找到here的公式来解决这个问题。我最终使用了:

   ans = 0;
   n = 0;
   for i:1:100000000
       x = 10*rand;
       n = n + cos(x^3)*exp(x^(1/2))+x;
   end
   ans = ((10-0)/100000000)*n