【问题标题】:How to wtite Erlang B and Erlang C formulas in Python [closed]如何在 Python 中使用 Erlang B 和 Erlang C 公式 [关闭]
【发布时间】:2014-05-07 20:49:38
【问题描述】:

我需要在 python 脚本中使用 Erlang B 和 Erlang C 公式。

如何在 Python 中编写这些公式?

【问题讨论】:

    标签: python traffic


    【解决方案1】:

    尝试寻找像 scipy 这样的科学 Python 库 :=)

    from math import factorial
    def ErlangB (E, m):
        InvB = 1.0
        for j in range(1, m+1):
            InvB = 1.0 + InvB * (j/E)
        return (1.0 / InvB)
    
    def ErlangC(A, N):
        L = (A**N / factorial(N)) * (N / (N - A))
        sum_ = 0
        for i in range(N):
            sum_ += (A**i) / factorial(i)
        return (L / (sum_ + L))
    

    (根据维基百科伪代码)

    【讨论】:

    • 这段代码看起来不错,当我添加条件if (N-A<=0): return 1 else: _your code here_时,Erlang C 函数工作正常@
    • 不幸的是它对于大量的A和N来说很慢,有时会出现这样的溢出错误sum_ += (A**i)/factorial(i) OverflowError: long int too large to convert to float
    • 也许你可以在 C 中实现这些函数并提供一个 python 模块来访问这些函数。但我不知道这样做是否有真正的优势(就性能而言)
    • 不幸的是,这对于大数字来说似乎是错误的,可能是由于幂和阶乘导致的巨大浮动。作为一个健全的检查,ErlangC(48, 55) 应该是 0.239,但这个实现产生 0.247。
    • 我修改了代码以使用 Python 的decimal module,这提高了计算的准确性;在 ErlangC 中,将 A 和 N 转换为十进制。十进制使 ErlangC(48, 55) 返回大约 0.2387。
    猜你喜欢
    • 1970-01-01
    • 2011-04-01
    • 2014-03-31
    • 2018-06-17
    • 2012-12-31
    • 2011-01-29
    • 1970-01-01
    • 2017-12-20
    • 2017-10-31
    相关资源
    最近更新 更多