2016-07-18 20 views
0

我期待看看我可以創建一個三角分佈使用3個數字的最小值(40)最大值(330)和平均值(100 )。生成一個隨機數與最大值,最小值和平均值(平均值)在視覺基礎 - 三角dist

這段代碼只給我2號的隨機性和不攜帶平均:

z = =RAND()*(b-a)+a 

我怎樣才能使一個三角形DIST。 ?

+0

您無法使用您提供的三個值生成三角形分佈。你指定平均值應該是100,平均值=(最小+最大+模式)/ 3。根據您的規格,在'100 =(40 + 330 +模式)/ 3'中求解模式的值爲-70,不在最小值和最大值之間。 – pjs

+0

@pjs 100是平均值(平均值)。我認爲你在計算平均數時犯了一個錯誤。我已經給了它。 – Zapata

+0

沒有錯,你說你想要最少40,最多330,平均(平均)100。[三角形分佈**的均值是**'平均=(最小+最大+模式)/ 3' ](https://en.wikipedia.org/wiki/Triangular_distribution),所以我們可以計算出模式必須是什麼。你的數字對於三角形分佈是不可行的。 – pjs

回答

1

更正爲每@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 
+0

我想知道1.什麼是dFR? 2.爲什麼在公式中使用sqr? – Zapata

+1

https://en.wikipedia.org/wiki/Triangular_distribution – cyboashu

+0

它給出了運行時錯誤5:當我改變最小值,最大值和平均值時,參數的過程調用無效。 – Zapata

1

顯然,通過@cyboashu答案是錯的,因爲你有MinMaxMean

因此,您從輸入中恢復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 
+1

同意。我的回答是不正確的。 – cyboashu

+0

我已根據您的建議更新了我的答案。 – cyboashu

+0

@Severin Pappadeux它不起作用。你爲什麼要計算平均值,而我已經把它作爲平均值(100)呢? – Zapata

相關問題