基于Python构建微积分与概率分布的交互式可视化工具
核心功能概述
本程序利用Python结合SymPy与Matplotlib库,实现对一元及多元函数的导数、不定积分、定积分、多重积分以及两类曲线与曲面积分的符号计算与数值求解,并通过图形界面动态展示结果。同时支持常见概率分布的参数设定与可视化输出。
微积分模块实现
1. 一元函数导数与高阶导数
通过符号计算引擎对任意可导表达式求取指定阶次的导数,支持多项式、三角函数、指数函数等组合形式。
def compute_derivative(self):
try:
expr = self.input_expr.text()
var_name = self.input_var.text()
order = int(self.order_input.text())
x = sympy.Symbol(var_name)
func = sympy.sympify(expr)
result = sympy.diff(func, x, order)
self.result_display.setText(f"导数: {result}")
except Exception as e:
self.result_display.setText(f"错误: {str(e)}")
2. 不定积分与定积分
支持符号不定积分求解与数值定积分计算,自动处理积分常数项并返回精确或近似值。
def evaluate_integral(self):
try:
integrand = sympy.sympify(self.integrand_input.text())
variable = sympy.Symbol(self.var_input.text())
lower = sympy.sympify(self.lower_limit.text())
upper = sympy.sympify(self.upper_limit.text())
if lower is None or upper is None:
# 不定积分
antiderivative = sympy.integrate(integrand, variable)
self.result.setText(f"∫{integrand}d{variable} = {antiderivative} + C")
else:
# 定积分
definite_val = sympy.integrate(integrand, (variable, lower, upper)).evalf()
self.result.setText(f"∫_{lower}^{upper}{integrand}d{variable} ≈ {definite_val:.6f}")
except Exception as e:
self.result.setText(f"计算失败: {e}")
3. 多重积分(二重/三重)
采用嵌套积分方式求解二维与三维区域上的积分问题,适用于物理场中质量、电荷分布等建模。
def compute_double_integral(self):
f = sympy.sympify(self.func_2d.text())
x, y = sympy.symbols('x y')
x_low = float(self.x_min.text())
x_high = float(self.x_max.text())
y_low = float(self.y_min.text())
y_high = float(self.y_max.text())
integral = sympy.integrate(f, (y, y_low, y_high), (x, x_low, x_high))
self.result_2d.setText(f"∬{f} dxdy = {integral.evalf()}")
4. 曲线与曲面积分
- 第一类积分(标量场):用于计算非均匀密度曲线段的质量或曲面的总质量。
- 第二类积分(矢量场):用于变力做功、电磁通量等场景,体现方向性影响。
def compute_line_integral_vector(self):
P = sympy.sympify(self.P_func.text())
Q = sympy.sympify(self.Q_func.text())
x_t = sympy.sympify(self.x_param.text())
y_t = sympy.sympify(self.y_param.text())
t_start = float(self.t_start.text())
t_end = float(self.t_end.text())
dx_dt = sympy.diff(x_t, 't')
dy_dt = sympy.diff(y_t, 't')
integrand = P.subs({'x': x_t, 'y': y_t}) * dx_dt + Q.subs({'x': x_t, 'y': y_t}) * dy_dt
result = sympy.integrate(integrand, ('t', t_start, t_end)).evalf()
self.result_vector.setText(f"∫Pdx+Qdy = {result}")
概率分布可视化模块
集成常见的离散与连续型概率分布,支持用户自定义参数后实时生成概率密度函数(PDF)或概率质量函数(PMF)图像。
示例:正态分布参数调节与绘图
def plot_normal_distribution(self):
mu = float(self.mu_input.text())
sigma = float(self.sigma_input.text())
x_vals = np.linspace(mu - 4*sigma, mu + 4*sigma, 1000)
pdf_vals = (1 / (sigma * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x_vals - mu) / sigma)**2)
plt.figure(figsize=(8, 5))
plt.plot(x_vals, pdf_vals, label=f'N({mu}, {sigma}²)')
plt.fill_between(x_vals, pdf_vals, alpha=0.3)
plt.title("Normal Distribution PDF")
plt.xlabel("x")
plt.ylabel("f(x)")
plt.legend()
plt.grid(True)
plt.show()
支持分布类型
- 正态分布(Normal)
- 泊松分布(Poisson)
- 指数分布(Exponential)
- 均匀分布(Uniform)
- 二项分布(Binomial)
GUI界面设计要点
使用PyQt5构建响应式界面,包含以下组件:
- 输入框:用于输入数学表达式与参数
- 下拉菜单:选择所需计算类型与分布模型
- 按钮区:触发计算与绘图操作
- 结果显示区:显示公式推导过程与最终数值
- 画布控件:嵌入Matplotlib图表进行动态可视化
所有计算逻辑均在后台线程中执行,避免阻塞主线程,提升用户体验。