VB挑战/帮助MONTE CARLO INTEGRATION

时间:2015-02-21 17:39:01

标签: vb.net vb.net-2010

我试图创建蒙特卡洛模拟,可用于推导出对集成问题的估计(总结下面积 曲线)。不知道现在该做什么,我被困住了

"为了解决这个问题,我们为0和1之间的x和y生成一个数字(比方说n)随机数对,对于每一对,我们看到点(x,y)是否高于或低于线。我们计算这种情况发生的次数(比如c)。曲线下面积计算为c / n"

真的很困惑请帮忙谢谢

Function MonteCarlo()

    Dim a As Integer
    Dim b As Integer
    Dim x As Double
    Dim func As Double
    Dim total As Double
    Dim result As Double
    Dim j As Integer
    Dim N As Integer

    Console.WriteLine("Enter a")
    a = Console.ReadLine()
    Console.WriteLine("Enter b")
    b = Console.ReadLine()
    Console.WriteLine("Enter n")
    N = Console.ReadLine()

    For j = 1 To N
        'Generate a new number between a and b
        x = (b - a) * Rnd()

        'Evaluate function at new number 
        func = (x ^ 2) + (2 * x) + 1

        'Add to previous value 
        total = total + func

    Next j

    result = (total / N) * (b - a)
    Console.WriteLine(result)
    Console.ReadLine()
    Return result

End Function

1 个答案:

答案 0 :(得分:0)

您正在曲线下使用MC区域的拒绝方法。

这样做:

  1. 将x的范围分为例如100个等间距,非重叠的分档。

  2. 对于你的函数y = f(x)=(x ^ 2)+(2 * x)+ 1,生成例如对于10,000个x =(b - a)* Rnd()。

  3. 的值,10,000的y值
  4. 计算每个bin中的y值的数量,并除以10,000以获得“bin概率”。 - > P(X)。

  5. 接下来,随机模拟函数的正确方法是使用rejection方法,如下所示:

    4A。使用x =(b - a)* Rnd()

    绘制随机x值

    4b中。绘制随机均匀U(0,1)。如果U(0,1)小于p(x),则向bin添加计数。

    4c中。继续执行步骤4a-4b 10000次。

  6. 现在,您可以使用rejection方法模拟y = f(x)函数。

    总的来说,你需要在你做你想做的事情之前掌握这些方法,因为它听起来你在箱数,模拟等方面几乎没有经验。曲线下的区域总是使用这种方法,所以只需要有创意进行整合使用MC。

    看看有关MC集成的一些好教科书。