当前位置: 首页 > news >正文

从调和级数到p级数:用Python可视化帮你彻底搞懂级数敛散性(附代码)

用Python可视化破解级数敛散性:从调和级数到p级数的数学实验

数学分析中最令人着迷又困惑的概念之一莫过于无穷级数的收敛与发散。当我在大学第一次接触调和级数时,那个看似简单却发散的数列让我百思不得其解——为什么每一项都在趋近于零,总和却可以无限增大?直到我用Python绘制出它的部分和曲线,一切才变得直观起来。本文将带你用代码和图表重新认识级数,把抽象的数学定义转化为可交互的实验。

1. 级数基础与Python环境搭建

级数本质上是无穷数列的和,理解它的关键在于部分和数列的行为。设有一个数列{aₙ},它的部分和Sₙ = a₁ + a₂ + ... + aₙ。当n趋近于无穷时,如果Sₙ趋近于某个有限值,我们称级数收敛;否则称其发散。

准备工作:我们需要以下Python库:

import numpy as np import matplotlib.pyplot as plt from ipywidgets import interact # 用于创建交互式可视化

先定义一个通用函数来计算级数的部分和:

def partial_sums(term_func, n_max): """计算级数的部分和 term_func: 通项公式的函数 n_max: 计算的最大项数 """ n_values = np.arange(1, n_max+1) terms = term_func(n_values) return np.cumsum(terms) # 累积和得到部分和数列

2. 经典级数可视化实验

2.1 调和级数:缓慢的发散

调和级数是最著名的发散级数: [ \sum_{n=1}^{\infty} \frac{1}{n} = 1 + \frac{1}{2} + \frac{1}{3} + \cdots ]

用Python绘制其部分和:

def harmonic(n): return 1/n n_max = 1000 sums = partial_sums(harmonic, n_max) plt.figure(figsize=(10,6)) plt.plot(sums, label='Harmonic series partial sums') plt.xlabel('Number of terms') plt.ylabel('Partial sum') plt.title('Divergence of the Harmonic Series') plt.grid(True) plt.legend() plt.show()

观察现象

  • 曲线增长缓慢但持续上升,没有趋于平稳的迹象
  • 前1000项和约为7.485,看似不大,但数学证明其发散

2.2 p级数:收敛与发散的临界点

p级数的一般形式: [ \sum_{n=1}^{\infty} \frac{1}{n^p} ]

其敛散性取决于p值:

  • p > 1:收敛
  • p ≤ 1:发散

让我们比较几个不同的p值:

def p_series(n, p): return 1 / (n ** p) n_max = 500 p_values = [0.5, 1, 1.5, 2] plt.figure(figsize=(10,6)) for p in p_values: sums = partial_sums(lambda n: p_series(n, p), n_max) plt.plot(sums, label=f'p={p}') plt.axhline(y=np.pi**2/6, color='gray', linestyle='--', label='π²/6 (p=2 limit)') plt.legend() plt.title('Comparison of p-series for different p values') plt.xlabel('Number of terms') plt.ylabel('Partial sum') plt.grid(True) plt.show()

关键发现

  • p=1(调和级数)明显发散
  • p=0.5发散得更快
  • p=1.5和p=2收敛,后者趋近于著名的π²/6

3. 判别法的可视化实现

3.1 比较判别法的动态演示

比较判别法告诉我们:如果aₙ ≤ bₙ且∑bₙ收敛,则∑aₙ也收敛。让我们用代码验证:

def compare_test(series1, series2, n_max=500): """可视化比较两个级数的部分和""" sums1 = partial_sums(series1, n_max) sums2 = partial_sums(series2, n_max) plt.figure(figsize=(10,6)) plt.plot(sums1, label='Series 1') plt.plot(sums2, label='Series 2') plt.title('Comparison Test Visualization') plt.xlabel('Number of terms') plt.ylabel('Partial sum') plt.legend() plt.grid(True) plt.show() # 示例:比较1/(n²+1)和1/n² compare_test(lambda n: 1/(n**2 + 1), lambda n: 1/n**2)

3.2 比值判别法的交互实验

比值判别法通过极限ρ=lim|aₙ₊₁/aₙ|判断敛散性:

  • ρ < 1:绝对收敛
  • ρ > 1:发散
  • ρ = 1:不确定

创建交互式可视化:

def ratio_test_visual(a_n, n_max=200): """计算并绘制比值判别法的相关曲线""" n_values = np.arange(1, n_max+1) terms = a_n(n_values) ratios = terms[1:] / terms[:-1] # a_{n+1}/a_n plt.figure(figsize=(12,5)) plt.subplot(1,2,1) plt.plot(partial_sums(a_n, n_max)) plt.title('Partial sums') plt.grid(True) plt.subplot(1,2,2) plt.plot(ratios, label='a_{n+1}/a_n') plt.axhline(y=1, color='r', linestyle='--') plt.title('Ratio test') plt.legend() plt.grid(True) plt.tight_layout() plt.show() # 交互界面 @interact(p=(0.5, 3, 0.1), q=(0.5, 3, 0.1)) def interactive_ratio(p=1, q=1): ratio_test_visual(lambda n: 1/(n**p + np.log(n)**q))

实验建议

  • 尝试p>1和p<1的情况观察比值行为
  • 固定p=1,调整q观察临界情况

4. 高级可视化技巧

4.1 对数尺度下的观察

有些级数的变化在常规坐标下难以观察,对数尺度能揭示更多细节:

n_max = 10000 p_convergent = 1.1 p_divergent = 0.9 plt.figure(figsize=(12,6)) # 线性坐标 plt.subplot(1,2,1) plt.plot(partial_sums(lambda n: 1/n**p_convergent, n_max), label=f'p={p_convergent}') plt.plot(partial_sums(lambda n: 1/n**p_divergent, n_max), label=f'p={p_divergent}') plt.title('Linear scale') plt.legend() # 对数坐标 plt.subplot(1,2,2) plt.loglog(partial_sums(lambda n: 1/n**p_convergent, n_max), label=f'p={p_convergent}') plt.loglog(partial_sums(lambda n: 1/n**p_divergent, n_max), label=f'p={p_divergent}') plt.title('Log-log scale') plt.legend() plt.tight_layout() plt.show()

4.2 3D可视化:参数空间探索

对于依赖多个参数的级数,3D可视化非常有用:

from mpl_toolkits.mplot3d import Axes3D def p_series_3d(p_min=0.5, p_max=2, n_max=100): p_values = np.linspace(p_min, p_max, 50) n_values = np.arange(1, n_max+1) P, N = np.meshgrid(p_values, n_values) S = np.cumsum(1/N**P, axis=0) # 沿n轴累积 fig = plt.figure(figsize=(12,8)) ax = fig.add_subplot(111, projection='3d') surf = ax.plot_surface(P, N, S, cmap='viridis') ax.set_xlabel('p value') ax.set_ylabel('Number of terms') ax.set_zlabel('Partial sum') ax.set_title('3D Visualization of p-series Convergence') fig.colorbar(surf) plt.show() p_series_3d()

5. 常见误区与验证实验

5.1 项趋零不一定保证收敛

通过对比三个级数说明这一点:

  1. 调和级数 ∑1/n (发散)
  2. ∑1/n² (收敛)
  3. ∑1/(n ln n) (发散)
n_max = 10000 series = { '1/n': lambda n: 1/n, '1/n²': lambda n: 1/n**2, '1/(n ln n)': lambda n: 1/(n * np.log(n)) } plt.figure(figsize=(10,6)) for name, func in series.items(): sums = partial_sums(func, n_max) plt.plot(sums, label=name) plt.legend() plt.title('Comparison: Terms →0 but Different Convergence') plt.xlabel('Number of terms') plt.ylabel('Partial sum') plt.grid(True) plt.yscale('log') # 对数y轴更好展示 plt.show()

5.2 交错级数的有趣行为

交错调和级数: [ \sum_{n=1}^{\infty} \frac{(-1)^{n+1}}{n} = \ln 2 ]

def alternating_harmonic(n): return (-1)**(n+1) / n n_max = 1000 sums = partial_sums(alternating_harmonic, n_max) plt.figure(figsize=(10,6)) plt.plot(sums, label='Alternating harmonic') plt.axhline(y=np.log(2), color='r', linestyle='--', label='ln(2)') plt.title('Conditional Convergence Example') plt.legend() plt.grid(True) plt.show()

教学建议:可以让学生尝试修改代码,探索不同交错级数的行为,比如:

  • 改变符号模式(如两正一负)
  • 调整分母的幂次
  • 组合不同类型的项
http://www.jsqmd.com/news/960463/

相关文章:

  • 二维面阵Root-MUSIC算法MATLAB实现(含主程序root_music.m与Python对照版)
  • 屏幕暗斑、彩带、摩尔纹?别急着报废!聊聊工厂里那个‘救火队长’Demura到底能干啥
  • 当MicroBlaze遇到RTL8211FD:手把手调试FPGA千兆网卡驱动与LWIP协议栈
  • 告别盗版烦恼:用YT88加密狗5分钟搞定软件源码保护(附C#/Java/Python实战)
  • 别再只用nohup了!当Go程序自己处理SIGHUP时,你的服务是怎么挂的?
  • 保姆级教程:手把手教你理解PCIe L1.1/L1.2低功耗状态与CLKREQ#信号实战
  • 呼伦贝尔市2026年最新黄金回收白银回收铂金回收门店实测 五家靠谱店铺排行榜及联系方式电话推荐 - 盛世金银回收
  • 荆州市五家靠谱黄金回收店铺排行榜 2026年最新黄金+白银+铂金+K金回收门店及联系方式电话推荐 - 大熊猫898989
  • 2026最新诚信优选白银市黄金回收白银回收铂金回收彩金回收高口碑靠谱门店TOP5权威排行榜+联系方式推荐 - 前途无量YY
  • TCS3472颜色传感器I2C通信避坑指南:从地址0x29到Arduino代码调试全流程
  • Python中文NLP实战:30分钟跑通文本清洗到关键词提取
  • 别再手动改路径了!PyQt5样式表.qrc文件一键生成pyrcc5配置(附Anaconda虚拟环境定位技巧)
  • 实战演练:基于快马平台与天元云构建网络带宽智能弹性伸缩系统
  • 告别‘设备未识别’:Ubuntu 20.04下CH340驱动编译安装保姆级避坑指南
  • [智能体-293]:从字面符号到弦外之音:人类自然语言的演化逻辑与大脑语义理解机制
  • 湖州市2026年最新黄金回收白银回收铂金回收门店实测 五家靠谱店铺排行榜及联系方式电话推荐 - 盛世金银回收
  • 超越基础配置:用auditd为你的UOS统信服务器打造全方位行为监控日志
  • 景德镇市五家靠谱黄金回收店铺排行榜 2026年最新黄金+白银+铂金+K金回收门店及联系方式电话推荐 - 大熊猫898989
  • 微信小程序门禁控制源码:指纹远程开门+访客临时授权+操作日志查看
  • 2026最新诚信优选百色市黄金回收白银回收铂金回收彩金回收高口碑靠谱门店TOP5权威排行榜+联系方式推荐 - 前途无量YY
  • 告别重复插拔U盘!手把手教你将Clonezilla备份“烧录”成一张万能系统恢复光盘(飞腾/麒麟平台)
  • 别再傻等Github Action定时任务了!我用腾讯云函数SCF+workflow_dispatch,实现了真正的准时触发
  • 从车载导航到无人机飞控:手把手教你用u-center配置NEO-M8T实现10Hz高刷新率定位
  • RDMA网络调优实战:如何用perftest参数精准定位带宽与时延瓶颈?
  • 别再只会仿真了!基于74LS148和74LS373的抢答器硬件避坑指南
  • Win10 64位下USB转LPT并口打印机驱动包(含静默安装与端口配置工具)
  • 2026年 条刷/毛刷/工业毛刷/清扫器毛刷/板刷/弹簧刷/针辊 生产厂商实力之选:桐城市新锐制刷有限公司 - 品牌企业推荐师(官方)
  • 2026最新诚信优选蚌埠市黄金回收白银回收铂金回收彩金回收高口碑靠谱门店TOP5权威排行榜+联系方式推荐 - 前途无量YY
  • 九江市五家靠谱黄金回收店铺排行榜 2026年最新黄金+白银+铂金+K金回收门店及联系方式电话推荐 - 大熊猫898989
  • RTX5线程退出osThreadExit实战:Detached与Joinable模式到底怎么选?附代码避坑