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

Sympy绘制特定积分函数:Jupyter环境下的实现方法咨询

最优实现步骤

优先采用符号解析积分+数值化绘图的方案,比直接数值积分效率更高、结果更准确:

  • 第一步:导入依赖库
    在Jupyter单元格中运行:

    import sympy as sp
    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline  # 让图像直接显示在Jupyter中
    
  • 第二步:计算积分的解析表达式
    定义符号变量和被积函数,用Sympy求解解析解:

    t, x = sp.symbols('t x')
    integrand = sp.ln(1 + t**2) / (t*(1 + t**2))
    # 计算定积分
    F_sym = sp.integrate(integrand, (t, 0, 1/sp.cos(x)))
    

    运行后会得到解析结果:

    -polylog(2, -tan(x)**2)/2 + (log(tan(x)**2 + 1)**2)/8
    

    这里用到的多对数函数polylog,Sympy可以很好地完成其数值转换。

  • 第三步:将符号函数转为数值函数
    用lambdify把Sympy表达式转换成支持Numpy数组的函数,方便批量计算:

    F_num = sp.lambdify(x, F_sym, 'numpy')
    
  • 第四步:生成数据并绘图
    注意1/cos(x)的定义域:cos(x)≠0且cos(x)>0,因此x的取值范围是(-π/2, π/2),需避开奇点:

    # 生成x的数值点,两端留0.1余量避免接近奇点
    x_vals = np.linspace(-np.pi/2 + 0.1, np.pi/2 - 0.1, 1000)
    y_vals = F_num(x_vals)
    
    # 绘图
    plt.figure(figsize=(10, 6))
    plt.plot(x_vals, y_vals, label=r'$F(x) = \int_0^{1/\cos(x)} \frac{\ln(1+t^2)}{t(1+t^2)} dt$')
    plt.xlabel('x')
    plt.ylabel('F(x)')
    plt.title('Plot of Integral Function F(x)')
    plt.grid(True, alpha=0.3)
    plt.legend(fontsize=12)
    plt.show()
    

备选方案:直接数值积分

如果遇到Sympy无法求出解析解的复杂积分,可使用Scipy的数值积分:

from scipy.integrate import quad

def compute_F(x):
    # 定义数值被积函数
    integrand = lambda t: np.log(1 + t**2) / (t*(1 + t**2))
    # 计算定积分,忽略误差项
    result, _ = quad(integrand, 0, 1/np.cos(x))
    return result

x_vals = np.linspace(-np.pi/2 + 0.1, np.pi/2 - 0.1, 100)
y_vals = [compute_F(x) for x in x_vals]

# 绘图代码与上述一致
plt.figure(figsize=(10,6))
plt.plot(x_vals, y_vals, label=r'$F(x) = \int_0^{1/\cos(x)} \frac{\ln(1+t^2)}{t(1+t^2)} dt$')
plt.xlabel('x')
plt.ylabel('F(x)')
plt.title('Plot of Integral Function F(x)')
plt.grid(True, alpha=0.3)
plt.legend()
plt.show()

关键注意点

  • x必须避开±π/2,否则cos(x)=0会导致积分上限无穷大(虽积分在x→±π/2时收敛,但数值计算会报错)
  • 解析法计算速度远快于数值积分法,优先使用
  • 可通过Sympy验证极限行为,比如计算x→π/2⁻时F(x)的极限:
    sp.limit(F_sym, x, sp.pi/2, dir='-')
    
    结果为π²/24,可在绘图中观察函数趋近于该值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:30:47