我期待看看我可以創建一個三角分佈使用3個數字的最小值(40)最大值(330)和平均值(100 )。生成一個隨機數與最大值,最小值和平均值(平均值)在視覺基礎 - 三角dist
這段代碼只給我2號的隨機性和不攜帶平均:
z = =RAND()*(b-a)+a
我怎樣才能使一個三角形DIST。 ?
我期待看看我可以創建一個三角分佈使用3個數字的最小值(40)最大值(330)和平均值(100 )。生成一個隨機數與最大值,最小值和平均值(平均值)在視覺基礎 - 三角dist
這段代碼只給我2號的隨機性和不攜帶平均:
z = =RAND()*(b-a)+a
我怎樣才能使一個三角形DIST。 ?
更正爲每@Severin Pappadeux
Function trigDist(dMIn As Double, dMax As Double, dMean As Double) As Double
Dim dFR As Double
Dim bProceed As Boolean
bProceed = True
'/ error checks
If dMIn >= dMax Then
MsgBox "max value less than min value."
bProceed = False
End If
If dMean < dMIn Then
MsgBox "Mean is less than min value."
bProceed = False
End If
If dMean > dMax Then
MsgBox "Mean is larger than max value."
bProceed = False
End If
If bProceed Then
dFR = Rnd()
If dFR < ((dMean - dMIn)/(dMax - dMIn)) Then
trigDist = Sqr(dFR * (dMean - dMIn) * (dMax - dMIn)) + dMIn
Else
trigDist = dMax - Sqr((1 - dFR) * (dMax - dMean) * (dMax - dMIn))
End If
Else
trigDist = 0
End If
End Function
顯然,通過@cyboashu答案是錯的,因爲你有Min
,Max
和Mean
。
因此,您從輸入中恢復A,B,C開始,使用here這一事實,意思是等於(A+B+C)/3
。不瞭解足夠的VBA,請耐心等待
A = Min
B = Max
C = 3.0*Mean - A - B
If A >= B Then
print 'Error, Min is greater than Max'
End If
If C < A Then
print 'Error, Mean is too small'
End If
If C > B Then
print 'Error, Mean is too large'
End If
r = Rnd()
If r < ((C - A)/(B - A)) Then
Res = A + Sqr(r * (B - A) * (C - A))
Else
Res = B - Sqr((1.0 - r) * (B - A) * (B - C))
End If
return Res
您無法使用您提供的三個值生成三角形分佈。你指定平均值應該是100,平均值=(最小+最大+模式)/ 3。根據您的規格,在'100 =(40 + 330 +模式)/ 3'中求解模式的值爲-70,不在最小值和最大值之間。 – pjs
@pjs 100是平均值(平均值)。我認爲你在計算平均數時犯了一個錯誤。我已經給了它。 – Zapata
沒有錯,你說你想要最少40,最多330,平均(平均)100。[三角形分佈**的均值是**'平均=(最小+最大+模式)/ 3' ](https://en.wikipedia.org/wiki/Triangular_distribution),所以我們可以計算出模式必須是什麼。你的數字對於三角形分佈是不可行的。 – pjs