news 2026/6/12 4:00:58

别再死记硬背公式了!用Python可视化带你‘看见’牛顿-莱布尼茨公式的诞生

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再死记硬背公式了!用Python可视化带你‘看见’牛顿-莱布尼茨公式的诞生

用Python动画拆解微积分:牛顿-莱布尼茨公式的可视化实践

微积分教材上那个看似神秘的牛顿-莱布尼茨公式,本质上是在说"变化量的累积等于最终状态与初始状态的差值"。但纯符号推导就像在黑暗中摸索——直到我们用代码将它可视化。本文将用Python制作动态演示,让你亲眼见证面积如何"生长"成原函数差值。

1. 准备工作:搭建数学可视化实验室

工欲善其事,必先利其器。我们需要配置一个能同时处理数学运算和图形渲染的Python环境:

# 基础工具库 import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation from matplotlib.patches import Polygon from scipy.integrate import quad # 美化绘图样式 plt.style.use('seaborn-whitegrid') plt.rcParams['font.family'] = 'SimHei' # 中文显示

关键参数设置

# 定义演示函数 (以二次函数为例) def f(x): return 0.5 * x**2 + 1 # 积分区间 a, b = 1, 4 n_frames = 50 # 动画帧数

提示:尝试修改f(x)定义和积分区间,观察不同函数的可视化效果差异

2. 动态演绎:从微分到积分的连续过渡

2.1 拉格朗日中值定理的可视化

我们先实现教材中静态插图的动态版本——在函数曲线上任意两点间,必然存在某点的切线斜率等于这两点的割线斜率:

def animate_lagrange(i): plt.cla() x = np.linspace(a, b, 100) y = f(x) # 动态变化的中间点 current_x = a + (b-a)*i/n_frames plt.plot(x, y, 'b-', linewidth=2) # 绘制割线 plt.plot([a, b], [f(a), f(b)], 'g--', alpha=0.6) # 寻找并绘制满足中值定理的切线 c = find_tangent_point(a, b) tangent_line = f(c) + f(c)*(x-c) plt.plot(x, tangent_line, 'r-', linewidth=1.5) # 标注关键点 plt.scatter([a, b, c], [f(a), f(b), f(c)], color=['blue', 'blue', 'red']) plt.title(f"拉格朗日中值定理演示 (帧 {i}/{n_frames})") # 生成动画 ani = FuncAnimation(plt.gcf(), animate_lagrange, frames=n_frames, interval=100) plt.show()

观察要点

  • 红色切线始终与绿色割线平行
  • 随着current_x移动,切点c自动调整位置
  • 动画直观展示了f(b)-f(a) = f'(c)(b-a)的几何意义

2.2 黎曼和的渐进逼近

接下来我们演示如何用矩形面积逐步逼近曲线下方面积:

def riemann_sum(n): dx = (b-a)/n x = np.linspace(a, b, n+1) areas = [dx * f(a + i*dx) for i in range(n)] return sum(areas), x, areas def animate_riemann(i): plt.cla() current_n = 2 + i*2 # 逐步增加分割数 total, x_vals, areas = riemann_sum(current_n) x = np.linspace(a, b, 100) y = f(x) plt.plot(x, y, 'b-', linewidth=2) plt.bar(x_vals[:-1], areas, width=(b-a)/current_n, alpha=0.4, edgecolor='black') true_area, _ = quad(f, a, b) error = abs(total - true_area) plt.title(f"黎曼和逼近 (n={current_n})\n面积: {total:.2f} (误差: {error:.2f})")

参数对比实验

分割数n计算面积实际面积相对误差
515.3816.8758.86%
1016.0916.8754.65%
5016.7216.8750.92%
10016.8116.8750.38%

3. 公式的完整可视化证明

现在我们将整个证明过程转化为可交互的动画演示:

def full_proof_animation(i): plt.figure(figsize=(12, 6)) # 左图:微分过程 plt.subplot(1, 2, 1) show_differential_process(i) # 右图:积分过程 plt.subplot(1, 2, 2) show_integral_process(i) plt.tight_layout() def show_differential_process(i): x = np.linspace(a, b, 100) y = f(x) current_x = a + (b-a)*i/n_frames plt.plot(x, y, 'b-') plt.plot([current_x, current_x + 0.1], [f(current_x), f(current_x + 0.1)], 'ro-') dy = f(current_x + 0.1) - f(current_x) plt.text(current_x, f(current_x)+0.5, f'Δy ≈ {dy:.2f}', color='red') plt.title("微分过程:局部线性逼近") def show_integral_process(i): current_n = 2 + i*2 total, x_vals, areas = riemann_sum(current_n) x = np.linspace(a, b, 100) y = f(x) plt.plot(x, y, 'b-') for j in range(current_n): vertices = [(x_vals[j], 0), (x_vals[j+1], 0), (x_vals[j+1], f(x_vals[j])), (x_vals[j], f(x_vals[j]))] poly = Polygon(vertices, alpha=0.3) plt.gca().add_patch(poly) plt.title(f"积分过程:面积求和 (n={current_n})")

操作建议

  1. 逐步运行动画观察微分与积分的对应关系
  2. 修改f(x)的定义,验证不同函数的公式成立
  3. 尝试在动画暂停时,手动计算几个离散点的ΔyΔx比值

4. 进阶应用:构建交互式学习工具

为了让理解更加深入,我们可以创建一个可调节参数的交互式演示:

from ipywidgets import interact, IntSlider @interact( n=IntSlider(min=1, max=50, step=1, value=5), a=IntSlider(min=-5, max=5, step=1, value=0), b=IntSlider(min=-5, max=5, step=1, value=3) ) def interactive_demo(n, a, b): plt.figure(figsize=(10, 5)) # 计算原函数 F = lambda x: (1/6)*x**3 + x # f(x) = 0.5x^2 + 1的原函数 # 绘制函数曲线 x = np.linspace(min(a,b)-1, max(a,b)+1, 200) plt.plot(x, f(x), 'b-', label='f(x)') # 绘制黎曼和 dx = (b-a)/n x_vals = np.linspace(a, b, n+1) for i in range(n): plt.bar(x_vals[i], f(x_vals[i]), width=dx, alpha=0.3, edgecolor='k') # 标注原函数差值 plt.plot([a, a], [0, F(a)], 'g--') plt.plot([b, b], [0, F(b)], 'g--') plt.plot([a, b], [F(a), F(b)], 'go-') # 计算并显示结果对比 riemann = sum(f(x_vals[i])*dx for i in range(n)) ftc = F(b) - F(a) plt.title(f"黎曼和: {riemann:.2f} vs 原函数差值: {ftc:.2f}") plt.legend()

交互实验记录

  • n=1时,黎曼和就是简单的矩形面积
  • 随着n增大,矩形面积和逐渐接近真实积分值
  • 无论n取何值,原函数差值始终精确等于积分值
  • 改变积分上下限a,b时,两者始终保持一致

5. 数学原理与代码实现的对应关系

理解代码背后的数学原理同样重要:

微分部分的核心数学原理

# 代码中的微分思想 dy = f(x + dx) - f(x) # 实际变化量 df = f_prime(x) * dx # 微分近似 # 对应数学定理 lim(dx->0) [f(x+dx)-f(x)]/dx = f'(x)

积分部分的核心数学原理

# 代码中的积分实现 area = sum(f(x_i) * dx for x_i in partition) # 对应数学定义 ∫[a,b] f(x)dx = lim(n->∞) Σ f(x_i*)Δx_i

牛顿-莱布尼茨公式的完整实现

def newton_leibniz(f, a, b, F): """ 参数: f: 被积函数 a: 积分下限 b: 积分上限 F: f的原函数 返回: 定积分值 """ return F(b) - F(a) # 示例使用 F = lambda x: (1/6)*x**3 + x # f(x)=0.5x²+1的原函数 print(newton_leibniz(f, 1, 4, F)) # 输出16.875

注意:实际应用中,我们常使用scipy.integrate.quad进行数值积分,但当原函数已知时,牛顿-莱布尼茨公式提供了更精确的计算方式

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 4:00:38

3步搞定LaTeX到PowerPoint转换:pdf2pptx终极解决方案

3步搞定LaTeX到PowerPoint转换:pdf2pptx终极解决方案 【免费下载链接】pdf2pptx Convert your (Beamer) PDF slides to (Powerpoint) PPTX 项目地址: https://gitcode.com/gh_mirrors/pd/pdf2pptx 你是否为LaTeX Beamer制作的精美学术幻灯片无法在PowerPoint…

作者头像 李华
网站建设 2026/6/12 4:00:33

Quartus II 13.1引脚绑定效率革命:从手动拖拽到一键导入

1. 传统引脚绑定的痛点与效率瓶颈 在FPGA开发中,引脚绑定是每个工程师都绕不开的环节。记得我第一次用Quartus II 13.1做项目时,面对一块有200多个引脚的芯片,光是手动拖拽分配就花了整整两天时间。每次修改设计后,都要重复这个痛…

作者头像 李华
网站建设 2026/6/12 4:00:32

从Bib文件到完美排版:LaTeX参考文献样式(.bst)的简易自定义指南

从Bib文件到完美排版:LaTeX参考文献样式(.bst)的简易自定义指南在学术写作中,参考文献的格式规范往往比内容本身更容易成为审稿人的关注焦点。我曾见过一位同行研究者,其论文三次被顶级期刊退回,原因仅仅是…

作者头像 李华
网站建设 2026/6/12 4:00:29

深入高通UEFI架构:手把手解析XBL中TLMM Protocol控制GPIO的完整流程

深入高通UEFI架构:手把手解析XBL中TLMM Protocol控制GPIO的完整流程在嵌入式系统开发领域,对硬件底层的直接控制能力往往是区分普通开发者与资深工程师的关键。当我们面对基于高通平台的设备时,UEFI固件架构中的XBL(eXecutable Bo…

作者头像 李华
网站建设 2026/6/12 4:00:16

别再被小提琴图骗了!明明数据全是正数,为啥图上冒出了负值?

解密小提琴图中的负值幻觉:当数据可视化欺骗了你的眼睛第一次用Python的Seaborn库绘制小提琴图时,我盯着屏幕上那些延伸到负值区域的曲线愣住了——我的数据明明全是电商销售额,最低也是0元,怎么图表上会出现负值?这种…

作者头像 李华
网站建设 2026/6/12 4:00:15

5分钟搞定黑苹果:OpCore-Simplify自动化配置终极指南

5分钟搞定黑苹果:OpCore-Simplify自动化配置终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑苹果复杂的EFI配置头疼吗&am…

作者头像 李华