You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sympy无法绘制含阶乘的浮点概率函数问题求助

问题分析与解决

你的绘图未显示曲线的核心原因是:将符号变量传入了带.evalf()的Python函数,导致SymPy无法正确对每个绘图点的数值x计算函数值。

问题细节

你定义的f(x)是Python函数,内部直接调用.evalf()。当传入符号变量x时,factorial(365 - x)是未替换数值的符号表达式,.evalf()无法针对绘图时的每个具体x值计算结果,最终导致绘图函数无法生成有效曲线数据。

修正后的代码

将函数定义为纯符号表达式,让SymPy在绘图时自动处理数值代入:

from sympy import *
from sympy.plotting import plot

init_printing()

# 定义符号变量,指定为整数(符合生日问题的x取值逻辑)
x = symbols('x', integer=True)
# 定义符号形式的概率函数
f = factorial(365) / factorial(365 - x) / (365**x)

# 计算x=5时的函数值
display(f.subs(x, 5).evalf())
# 绘制函数曲线
plot(f, (x, 0, 100), ylim=[0, 2])

另一种方案:用lambdify转换为数值函数(配合Matplotlib)

如果你更习惯用数值绘图,可以把符号表达式转成NumPy可计算的函数:

from sympy import *
import matplotlib.pyplot as plt
import numpy as np

init_printing()

x = symbols('x', integer=True)
f = factorial(365) / factorial(365 - x) / (365**x)

# 转换为数值函数
f_np = lambdify(x, f, 'numpy')
x_vals = np.arange(0, 101)
y_vals = f_np(x_vals)

# 计算x=5的值
print(f_np(5))
# 绘图
plt.plot(x_vals, y_vals)
plt.ylim(0, 2)
plt.show()

内容的提问来源于stack exchange,提问作者Yiffany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:55:15