news 2026/5/30 4:06:15

别再死记硬背了!用几何动画和Python可视化,5分钟彻底搞懂Jensen不等式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再死记硬背了!用几何动画和Python可视化,5分钟彻底搞懂Jensen不等式

用几何动画和Python可视化5分钟掌握Jensen不等式

数学公式总是让人望而生畏?今天我们用Python代码和动态几何演示,让Jensen不等式从抽象符号变成直观可见的图形游戏。无论你是备考的学生、跨领域研究者,还是单纯对数学可视化感兴趣的开发者,这套方法都能帮你建立肌肉记忆般的数学直觉。

1. 从几何直觉理解凸函数与Jensen不等式

想象用手握住一个苹果——这就是最经典的凸形状。数学上,凸函数的定义正是对这种几何特性的抽象:函数图像上任意两点间的线段(弦)永远位于函数曲线上方。用Python的Matplotlib可以快速验证这个特性:

import numpy as np import matplotlib.pyplot as plt x = np.linspace(-2, 2, 500) f = lambda x: x**2 # 经典凸函数示例 plt.plot(x, f(x), label='f(x)=x²') plt.plot([-1, 1], [f(-1), f(1)], 'r--', label='弦') plt.fill_between(x, f(x), np.max(f(x)), alpha=0.1) plt.legend(); plt.grid()

运行这段代码会看到:

  • 红色虚线连接(-1,1)和(1,1)两点形成弦
  • 抛物线f(x)=x²始终位于弦的下方
  • 这就是Jensen不等式的几何本质:函数值在加权平均点处的输出 ≤ 函数值的加权平均

关键可视化技巧

  • fill_between突出弦与曲线围成的区域
  • 动态版本可以添加滑块调节权重λ值(后文介绍)

2. 用Manim制作交互式证明动画

静态图像还不够直观?让我们用Manim数学动画引擎创建可交互的证明过程。以下动画设计思路值得收藏:

  1. 基础场景构建
class JensenScene(Scene): def construct(self): axes = Axes(x_range=[0,5], y_range=[0,10]) func = axes.plot(lambda x: (x-2)**2 + 2, color=BLUE) self.play(Create(axes), Create(func))
  1. 添加可拖拽控制点
dot1 = Dot(point=axes.c2p(1, func(1))).set_color(RED) dot2 = Dot(point=axes.c2p(4, func(4))).set_color(RED) line = Line(dot1.get_center(), dot2.get_center(), color=YELLOW) self.play(FadeIn(dot1), FadeIn(dot2), Create(line))
  1. 动态权重演示
lambda_tracker = ValueTracker(0.3) # 权重参数 def get_interpolated_point(): l = lambda_tracker.get_value() x = l*1 + (1-l)*4 y = l*func(1) + (1-l)*func(4) return axes.c2p(x,y) moving_dot = always_redraw(lambda: Dot( get_interpolated_point(), color=GREEN))

完整代码需处理动画过渡和公式联动,但核心逻辑就是通过移动绿点展示:

  • 当λ从0→1变化时,绿点沿黄线(弦)移动
  • 同时在x轴投影点显示函数曲线上的真实值
  • 二者垂直距离直观呈现不等式关系

3. 三类典型函数的Python验证实验

不同凸函数会导致Jensen不等式呈现不同形态,我们通过实验对比分析:

3.1 指数函数验证

def test_exponential(): x = np.array([1, 3, 5]) weights = np.array([0.2, 0.5, 0.3]) lhs = np.exp(weights @ x) # e^(Σλx) rhs = weights @ np.exp(x) # Σλe^x print(f"e^{weights@x:.2f}={lhs:.2f} ≤ {rhs:.2f}") # 输出:e^3.20=24.53 ≤ 55.48

3.2 对数函数验证(注意凹凸性反转)

def test_logarithm(): x = np.array([0.1, 0.5, 0.9]) lhs = np.log(0.3*0.1 + 0.4*0.5 + 0.3*0.9) rhs = 0.3*np.log(0.1) + 0.4*np.log(0.5) + 0.3*np.log(0.9) print(f"ln(0.38)={lhs:.2f} ≥ {rhs:.2f}") # 输出:ln(0.38)=-0.97 ≥ -1.23

3.3 自定义函数交互实验

import ipywidgets as widgets @widgets.interact( a=(0.1, 2), b=(0.1, 2), c=(0.1, 2), x1=(0,5), x2=(5,10), λ=(0,1,0.1)) def custom_test(a, b, c, x1, x2, λ): f = lambda x: a*x**2 + b*x + c avg_x = λ*x1 + (1-λ)*x2 avg_f = λ*f(x1) + (1-λ)*f(x2) print(f"f({avg_x:.1f})={f(avg_x):.1f} ≤ {avg_f:.1f}")

4. 工程应用中的实战技巧

掌握Jensen不等式的直观理解后,来看几个实际应用中的经典场景:

机器学习中的损失函数设计

  • 交叉熵损失本质是-log(x)的Jensen不等式应用
  • 通过凸性保证优化过程的稳定性

金融风险评估

def risk_assessment(returns, weights): """ 用Jensen不等式验证投资组合风险 """ portfolio_return = weights @ returns individual_risks = np.array([r**2 for r in returns]) print(f"Var(E[R]) = {portfolio_return**2:.2f}") print(f"E[Var(R)] = {weights @ individual_risks:.2f}") # 对于凸函数x²,前者≤后者

信息论中的关键不等式

  • KL散度的非负性证明
  • 互信息的非负性证明
  • 这些都可以看作Jensen不等式在特定凸函数下的实例

在算法竞赛中,有个经典技巧是构造合适的凸函数来放缩表达式。比如要证明: $$ \frac{a+b}{2} \geq \sqrt{ab} $$ 只需取f(x)=-ln(x)应用Jensen不等式: $$ -\ln(\frac{a+b}{2}) \leq \frac{-\ln a -\ln b}{2} \Rightarrow \frac{a+b}{2} \geq e^{\frac{\ln a + \ln b}{2}} = \sqrt{ab} $$

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

这款AI工具让视频自动变笔记!脑子终于有救了!

过去两年我们会发现一个趋势愈发明显:学习资料越来越多,但可被吸收的有效信息却在不断稀释。录播课一节接一节、访谈内容动辄两小时,想学,却总难沉下心;打开视频容易,看完理解难,做笔记更费力。…

作者头像 李华
网站建设 2026/5/30 4:03:51

科学研究新范式:用Intern-S1规划化合物合成路线的5个步骤

科学研究新范式:用Intern-S1规划化合物合成路线的5个步骤 【免费下载链接】Intern-S1 项目地址: https://ai.gitcode.com/hf_mirrors/Shanghai_AI_Laboratory/Intern-S1 Intern-S1是上海人工智能实验室推出的最先进开源多模态推理模型,它彻底改变…

作者头像 李华
网站建设 2026/5/30 4:03:36

Android 11屏幕偏色救星:手把手教你修改SurfaceFlinger实现全局色温调节

Android 11屏幕色彩校正实战:从原理到实现的完整指南你是否曾经盯着手机屏幕,总觉得色彩不对劲?要么偏黄得像老照片,要么蓝得刺眼,但翻遍系统设置却找不到调节选项。这种困扰在Android设备上尤为常见,尤其是…

作者头像 李华