如何正确计算以下等式?

时间:2017-06-13 21:49:13

标签: python python-2.7 function math

使用python 2.7我试图计算以下相当困难的方程组。

enter image description here

我已经成功实施了前两个,但我正在努力争取第三个。这是我的尝试,

def pi_tau( r ):
    return (1 - (1 - r)**(t + 1))/(2 - r)  

def mean_field( r ): 
    return 1 - (1 - r)**t

def pi_neighbour( r ):
    inside = []
    for kappa_dash in range(0, kappa - 1):

        Binomial_Coefficient = (math.factorial(kappa - 1)) / (math.factorial(kappa - 1 - kappa_dash)*math.factorial(kappa_dash))          

        top = ((mean_field( r )*pi_tau( r ))**kappa_dash)*(1 - mean_field( r )*pi_tau( r ))**(kappa - 1 - kappa_dash)

        bottom = kappa_dash + 1

    fraction = top/bottom
    inside.append(kappa_dash)
    inside[kappa_dash] = inside[kappa_dash] + fraction*Binomial_Coefficient

return pi_tau*inside

然后我尝试调用此函数

# set parameters 
r = 0.15
kappa = 2.1
T = 10

ppp_t = []
mmm_f = []
nnn_t = []

for t in range(0, T):
    ppp_t.append(pi_tau( r ))
    mmm_f.append(mean_field( r ))
    nnn_t.append(pi_neighbour( r ))

我收到以下错误消息

---------------------------------------------------------------------------

    TypeError                                 Traceback (most recent call last)
    <ipython-input-41-9bcf462306f0> in <module>()


   6     ppp_t.append(pi_tau( r ))
      7     mmm_f.append(mean_field( r ))
----> 8     nnn_t.append(pi_neighbour( r ))

<ipython-input-39-d9acdd7490f9> in pi_neighbour(r)
     19         inside[kappa_dash] = inside[kappa_dash] + fraction*Binomial_Coefficient
     20 
---> 21     return pi_tau*inside

TypeError: can't multiply sequence by non-int of type 'function'

我正在寻找有关如何实现第三个功能并改进我的方法的任何建议。

3 个答案:

答案 0 :(得分:2)

这里有几件奇怪的事情:

  • 您在for循环中计算了top,bottom和biionial,但不要总结for循环;和
  • 您将pi_tau 函数与列表相乘?

    return pi_tau*inside
    
  • 您使用的是range(0, kappa - 1),但range(..)上限是独占的

尽管如此,你还是很努力。您可以使用以下方法:

from math import factorial

def pi_neighbour(r):
    sum = 0.0
    for kappa_dash in range(0,kappa):
        bin_coeff = factorial(kappa-1)/(factorial(kappa-1-kappa_dash)*factorial(kappa_dash))      
        top = ((mean_field(r)*pi_tau(r))**kappa_dash)*(1-mean_field(r)*pi_tau(r))**(kappa-1-kappa_dash)
        sum += bin_coeff*top/(kappa_dask+1)
    return pi_tau(r)*sum

答案 1 :(得分:1)

我认为你打算做的是追溯第21行的以下内容:

return pi_tau(r)*inside

您忘记调用该函数,因此它尝试将整数乘以函数,而不是函数的返回值

答案 2 :(得分:0)

错误在于您将列表乘以inside和整数,即return of pi_tau(r)

改为执行此操作(list comprehension

试试这个: return [i*pi_tau(r) for i in inside]