def fac(n):
value = 1
for i in range(2,n+1):
value = value * i
return value
def C(n,k):
return fac(n)/(fac(k) * (fac(n-k)))
for k in range(1,100):
for n in [10,20,30]:
F=C(n,k)
plt.plot(k,F)
plt.legend()
plt.show()
我想将二项式函数绘制为 k
中的函数,对于某些 n
值,例如 n = 10, 20, 30, ...
但是,我不知道如何绘制它。
最佳答案
我怀疑,有一个特定的原因不使用 NumPy ,所以这是一个使用普通 Python 的解决方案。
如果您正在谈论 binomial distribution ,那么公式需要包含概率p。我在下面的代码中添加了这一点。 (如果您实际上只想拥有 binomical coefficient ,请删除两个 pow
项。)
一般来说,为了绘图,您需要在某些数组中收集 x 和 y 值(例如 X
和 Y
),以便您可以使用 plt.plot(X, Y)
绘制整个函数。
在您的示例中,您还需要切换两个循环,因为您想要三个函数,每个函数对应 k = [1 ... 100]
。
这就是我的解决方案:
from matplotlib import pyplot as plt
def fac(n):
value = 1
for i in range(2, n+1):
value = value * i
return value
def C(n, k, p):
return fac(n)/(fac(k) * (fac(n-k))) * pow(p, k) * pow(1-p, n-k)
for N in [10, 20, 30]:
X = []
Y = []
for K in range(1, 100):
X.append(K)
Y.append(C(N, K, 0.5))
plt.plot(X, Y)
plt.legend(('N = 10', 'N = 20', 'N = 30'))
plt.show()
生成的输出如下所示:
希望有帮助!
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.8.1
Matplotlib: 3.2.0rc1
----------------------------------------
关于python - 如何绘制二项式函数的图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59889957/