2015-02-21 2 views
-4

Im пытается создать симуляцию Монте-Карло, которая может быть использована для получения оценок для задач интеграции (суммирование области под кривой). Не знаю, что делать сейчас, и я застрялVB вызов/помощь MONTE CARLO INTEGRATION

Для решения этой проблемы мы генерируем число (скажем n) случайных пар чисел для x и y между 0 и 1, для каждой пары мы видим, если точка (х, у) падает ниже или выше линии. Мы рассчитываем, сколько раз это происходит (например с). площадь под кривой вычисляется с/п»

действительно путают, пожалуйста, помогите спасибо

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

Вы должны использовать [Option Strict On] (https://msdn.microsoft.com/en-us/library/zcd4xwzs.aspx). Он укажет на некоторые несоответствия типов в вашем коде (например, вы можете использовать 'Integer.Parse()' для преобразования из входных строк в требуемые целые числа. ** Затем **, пожалуйста, сообщите нам, в чем проблема, например, она дает неправильный результат (если это так), а не просто «я застрял». –

ответ

0

Вы используете метод отклонения для области MC под кривой.

ли это:

  1. Разделить диапазон х, скажем, на 100 равномерно разнесенных, неперекрывающиеся бункеров.

  2. Для вашей функции y = f (x) = (x^2) + (2 * x) + 1, сгенерируйте, например, 10 000 значений y для 10000 значений x = (b - a) * Rnd().

  3. Подсчитайте количество значений y в каждом бункере и разделите их на 10 000, чтобы получить «вероятность бит». -> p (x).

  4. Далее, правильный способ случайным образом имитировать функцию, чтобы использовать метод отбраковки, который идет следующим образом:

    4а. Нарисуйте случайное значение x, используя x = (b - a) * Rnd()

    4b. Нарисуйте случайную равномерную U (0,1). Если U (0,1) меньше p (x), добавьте счет в корзину.

    4c. Продолжайте шаги 4a-4b 10000 раз.

Теперь вы сможете смоделировать свою функцию y = f (x), используя метод отклонения.

В общем, вам нужно освоить эти подходы, прежде чем делать то, что вы хотите, поскольку это звучит так, как будто у вас мало опыта в подсчетах, симуляции и т. Д. Площадь под кривой всегда используется с использованием этого подхода, поэтому просто создавайте интегрирование с использованием MC.

Посмотрите на некоторые хорошие учебники по интеграции MC.

Смежные вопросы