【发布时间】:2012-03-19 13:34:01
【问题描述】:
我必须生成一系列随机数,比如 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。随机分布应该是均匀的,因此总和通常在 (-1,1) 之间为 0。 sum 和 kin 都有 100 个值。
最终,我正在尝试计算动量守恒。
【问题讨论】:
-
Just so you know the random distribution is supposed to be uniform so the summation would normally be 0 between。它应该相当接近于零,但绝不是“每次都为零”。有很好的变化,它不会完全为零。 -
其实它求和为0的理论概率是……0。数学不好玩吗?
-
另外,您正在生成 300 个随机数。您是否应该将 rand.NextDouble() 的结果放入变量中?
-
我的目标是生成一系列从 -1 到 1 的统一随机数,使它们的总和为 0 或接近它的值。但是,我似乎无法获得“统一”部分。您现在可以省略 math.sqrt(2) 部分,只考虑 -1 和 1 之间的随机数之和,但是,它永远不会是统一的。
标签: .net vb.net loops random for-loop