2017-06-13 3 views
2

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 

は、私はその後、私は実装する方法上の任意のアドバイスを探しています私は、次のエラーメッセージ

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

    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' 

を取得

# 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)) 

この関数を呼び出そうです私の方法で改善します。

+0

タイトルと質問テキストの中に方程式の名前を入れて、他の人が検索しやすいようにするかもしれません。たとえば、「Pythonでname1、name、name3を計算する」などのタイトル。 –

+1

'pi_tau'は関数であり、数値ではありません。 'pi_tau'と呼ぶのですか? – Carcigenicate

答えて

2

いくつかの奇妙な事がここにあります

  • あなたは上、下を計算し、forループ内のすべてをbionomial、それforループで合計をアップしません。および
  • pi_tau機能をリストに追加しますか?

    return pi_tau*inside 
    
  • あなたはrange(0, kappa - 1)を使用しますが、range(..)は、UpperBoundは

それにもかかわらず、あなたはかなり難しいものを作る排他的です。

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

私はあなたがするもので信じることはトレースバックのライン21に以下の通りです:

return pi_tau(r)*inside 

関数を呼び出すのを忘れて、そして機能で整数を乗算しようとしています、関数の戻り値ではなく、です。

0

エラーはあなたがリストを乗算しているが、それはinsideで、整数は、それがreturn of pi_tau(r)

が代わりにこれを行うということである(list comprehension

試してみてください。あなたは、次のアプローチを使用することができますこれは: return [i*pi_tau(r) for i in inside]

関連する問題