Vb.net VB挑战/帮助MONTE CARLO集成

Vb.net VB挑战/帮助MONTE CARLO集成,vb.net,vb.net-2010,Vb.net,Vb.net 2010,我正在尝试创建蒙特卡罗模拟,可以用来推导积分问题的估计值(总结下的面积) 曲线)。我现在不知道该怎么办,我被卡住了 为了解决这个问题,我们为x和y生成一个介于0和1之间的随机数对(例如n),对于每一对,我们查看点(x,y)是否落在直线的上方或下方。我们计算发生这种情况的次数(例如c)。曲线下的面积计算为c/n 真的很困惑请帮忙谢谢 Function MonteCarlo() Dim a As Integer Dim b As Integer Dim x As Doubl

我正在尝试创建蒙特卡罗模拟,可以用来推导积分问题的估计值(总结下的面积) 曲线)。我现在不知道该怎么办,我被卡住了

为了解决这个问题,我们为x和y生成一个介于0和1之间的随机数对(例如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

您正在使用曲线下MC面积的拒绝方法

这样做:

  • 将x的范围划分为100个等间距、不重叠的箱子

  • 对于函数y=f(x)=(x^2)+(2*x)+1,为10000个x=(b-a)*Rnd()值生成例如10000个y值

  • 计算每个箱子中y值的数量,然后除以10000得到“箱子概率”-->p(x)

  • 接下来,随机模拟函数的正确方法是使用拒绝方法,如下所示:

    4a。使用x=(b-a)*Rnd()绘制一个随机的x值

    4b。绘制一个随机均匀的U(0,1)。如果U(0,1)小于p(x),则向箱子添加一个计数

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

  • 现在,您可以使用拒绝方法模拟y=f(x)函数

    总的来说,在做你想做的事情之前,你需要掌握这些方法,因为听起来你在垃圾箱计数、模拟等方面几乎没有经验。曲线下的区域总是使用这种方法的区域,所以要创造性地使用MC进行集成

    看一些关于MC集成的好教材

    你应该使用。它将指出代码中的一些类型不匹配(例如,您可以使用
    Integer.Parse()
    将输入字符串转换为所需的整数。然后,请告诉我们问题是什么,例如,它给出了错误的结果(如果是这种情况),而不仅仅是“我卡住了”