使用python 2.7我试图计算以下相当困难的方程组。
我已经成功实施了前两个,但我正在努力争取第三个。这是我的尝试,
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'
我正在寻找有关如何实现第三个功能并改进我的方法的任何建议。
答案 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]