Генерация случайных значений и суммирование их в ноль в VB.NET - PullRequest
0 голосов
/ 01 марта 2012

Я должен сгенерировать серию случайных чисел, скажем, 100, в диапазоне от -1 до 1 и масштабировать их до значения, скажем, квадратного корня из 2. После этого я беру эти 100 значений и их сумму = 0.масштабировать эту сумму на другое значение.Проверьте код ниже, чтобы понять, что я имею в виду.

Dim rand As New Random()
Dim sum As Double = 0
Dim kin As Double = 0

For j As Integer = 0 To 99
    rand.NextDouble()
    Console.WriteLine(" {0} ", (rand.NextDouble() * 2 - 1) * Math.Sqrt(2))
    sum = sum + ((rand.NextDouble() * 2 - 1) * Math.Sqrt(2))
    kin = kin + Math.Pow(sum, 2)
Next
Console.WriteLine(sum)
Console.WriteLine(kin)

Я не могу получить сумму, равную 0. Случайное распределение должно быть равномерным, поэтому суммирование обычно будет 0 между (-1,1),И sum, и kin имеют 100 значений.

В конечном итоге я пытаюсь вычислить сохранение импульса.

1 Ответ

0 голосов
/ 02 марта 2012

NextDouble должен давать вам равномерное распределение.Это не то же самое, что сказать, что все полученные значения будут усреднены по среднему.

Возможно, настоящая проблема, с которой вы сталкиваетесь, заключается в том, что kin вычисляется неправильно.Для каждой итерации вы добавляете sum ^ 2.Возведение в квадрат отрицательного всегда приводит к положительному числу, и вы добавляете результат к kin, кроме того.Если вы не суммировали kin, а просто вычислили после цикла, то есть kin = Math.Pow(sum, 2), то вы увидите, что sum делает стремящимся к 0.

Кроме того, как уже упоминалось в комментариях, вы неправильно используете сгенерированные случайные числа и дублируете вычисления.Вот модификации, которые я рекомендую:

Dim rand As New Random()
Dim sum As Double = 0
Dim kin As Double = 0
Dim randomValue As Double

For j As Integer = 0 To 99
    randomValue = (rand.NextDouble() * 2 - 1) * Math.Sqrt(2)
    Console.WriteLine(" {0} ", randomValue)
    sum = sum + randomValue
Next

kin = Math.Pow(sum, 2)

Console.WriteLine(sum)
Console.WriteLine(kin)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...