请问,我如何在c#中编写一个方法,该方法可以随机生成6个具有预定义平均值以及最小和最大边界的数字?例如,该方法应能够生成位于1800和2400内的六个随机数,将它们相加并除以6将得到2000的平均值。该方法应接收所需的平均值,较高边界和较低边界作为参数。
Ps:我在matlab,Python等中看到了类似的现有问题,但是我无法翻译
答案 0 :(得分:1)
您可以尝试以下简单方法:
生成范围为0..1的六个随机值
找到他们的平均值,最小值和最大值
带有线性公式的比例值
R[i] = NeededAverage - average + (r[i] - average) *
Math.Min((NeededMax - NeededAverage) / (max - average),
(NeededAverage - NeededMin) / (average - min))
在这种情况下,最小值或最大值位于范围的低边界或高边界。如果不需要,请在第二项中将min max替换为0和1。
快速的Python实现:
import random
def genrand(Mn, Mx, Ave):
r = []
for i in range(6):
r.append(random.random())
rmn = min(r)
rmx = max(r)
rave = sum(r) / len(r)
cf = min((Mx - Ave) / (1.0 - rave), (Ave - Mn) / (rave))
for i in range(6):
r[i] = Ave - rave + (r[i] - rave) * cf
return r
r = genrand(1800, 2400, 2000)
print(r, sum(r) / len(r))
>>[2046.9226390661588, 1958.1861543479467, 2086.1995475393196,
1940.656019470334, 2095.468041407782, 1869.730314881107]
1999.5271194521083