我试图在 SageMath 中将这个方程作为一个函数来实现:
def prob_k(p_uv_list, tw):
probs = []
w, k = var('w, k')
# compute probability of generating k entanglements, k=1..w
for tk in range(tw):
pk = binomial(w, k)*(p_uv_list[tk]**k)*(1-p_uv_list[tk])**(w-k).subs({x:tw,k:tk})
probs += [pk]
return probs
输入是一个概率列表和一个整数。我希望输出是给定 pk 公式计算的概率列表。我得到的是:
[0.500000000000000^k*0.500000000000000^w*binomial(w, k),
0.500000000000000^k*0.500000000000000^(w - 1)*binomial(w, k),
0.500000000000000^k*0.500000000000000^(w - 2)*binomial(w, k)]
为什么不用 w 和 k 代替 tw 和 tk ?
不使用 subs,您可以使用括号和 replace 方法直接在表达式中简单地替换 tw 和 tk 的值
你可以试试这个代码:
def prob_k(p_uv_list, tw):
probs = []
w, k = var('w k')
# compute probability of generating k entanglements, k=1..w
for tk in range(tw):
pk = binomial(w, k)*(p_uv_list[tk]**k)*(1-p_uv_list[tk])**(w-k)
pk = pk.replace(w, tw).replace(k, tk)
probs += [pk]
return probs