簡體   English   中英

#值! Excel VBA中worksheetfunction.gammadist上的錯誤

[英]#value! error on worksheetfunction.gammadist in excel VBA

我正在編寫代碼以找到方程的固定點:

1 / N = xf(x)/(1-F(x)),

其中x = p(1 + phi),f和F為伽馬分布的pdf和cdf,N為正整數。

對於伽馬分布,已知右側x會增加,因此必須有唯一的解決方案。

我寫了函數:

Function find_pdstar_gamma(alpha As Double, beta As Double, phi As Double, N As Integer) As Double

Dim plow As Double
Dim pmid As Double
Dim ptop As Double
Dim parg As Double
Dim f As Double
Dim Fbar As Double
Dim z As Double

plow = 0
ptop = 1000
Do
    pmid = (ptop + plow) / 2
    parg = (1 + phi) * pmid
    f = WorksheetFunction.GammaDist(parg, alpha, beta, False)
    Fbar = (1 - WorksheetFunction.GammaDist(parg, alpha, beta, True)) 
    z = parg * f / Fbar - 1 / N
    If z > 0 Then
        ptop = pmid
    Else
        plow = pmid
    End If
Loop Until ((ptop - plow) / ptop) < 1e-08
find_pdstar_gamma = (ptop + plow) / 2

End Function

我得到一個#值! 運行函數時出錯。 知道我的錯誤在哪里嗎?

我猜想您會遇到運行時錯誤6(溢出)或運行時錯誤11(除以0)。 這實際上可能會產生誤導,因為它實際上是一個除以Double可以被報告為溢出。

要做的第一件事是檢查以確保您的運算符優先級對於此代碼行是正確的:

z = parg * f / Fbar - 1 / N

評估為

z = ((parg * f) / Fbar) - (1 / N)

這意味着,如果Fbar永遠為零(或足夠小的雙精度數),您將在此處收到錯誤消息。

第二件事是驗證您的輸入或添加錯誤處理程序。 這樣,您將能夠獲得關於什么地方出了問題的更有意義的指示。

我要回答這個問題:“知道我的錯誤在哪里嗎?” 我真的沒有塵世的想法,但我知道如何縮小范圍。 在提到獲取#value錯誤時-似乎您將其用作工作表函數。 那可能是預期的應用程序,但使調試變得困難。 而是-在立即窗口中運行它。 在VBE中輸入類似

?find_pdstar_gamma(1, 3, 0.5, 100)

(但帶有使您感到悲傷的alpha,beta等值)。 當您執行此操作時-計算將停止並突出顯示有問題的行(如果您在錯誤msgbox中點擊了調試按鈕)。 這告訴您錯誤在哪里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM