文章目录
找到了一个github的关于ai生成manim的解决方案,记录一下。
B站的视频介绍
github的仓库
deepseek的链接对标openai o1正式版,免费,api价格低廉。
使用该项目需要
3Blue1Brown开创的Manim数学动画引擎,让无数人第一次感受到数学可视化带来的认知革命。然而Manim较高的学习门槛始终是阻碍更多人创作数学动画的障碍,人力成本高,思路难以实现。DeepSeek-R1与Math-To-Manim工具链的诞生,让数学动画创作迈入智能生成时代。
大模型对于数学的理解能力和解题思路的逻辑能力在r1上有了显著提升,且其更擅长输出长文本和复杂思维链的答案。
因此通过DeepSeek-r1来进行数学问题的解答,并将过程的公式和原理作为场景,通过manim的python脚本展示出来。实现了数学动画脚本的快速迭代和生成。
二、工具链三大核心突破
1. 自然语言转动画代码
通过DeepSeek-R1大模型的理解能力,开发者只需用自然语言描述数学场景(如"展示傅里叶级数逼近方波的过程"),系统即可自动生成规范的Manim代码。我们测试显示,85%的基础动画需求可以通过单轮对话实现完整代码输出。
2. 智能参数优化系统
# 自动生成的渐变动画代码示例
class ParametricCurve(Scene):
def construct(self):
curve = ParametricFunction(
lambda t: np.array([
1.5 * np.cos(t) + 0.5 * np.cos(7*t),
1.5 * np.sin(t) + 0.5 * np.sin(7*t),
0
]),
color=COLOR_MAP["GOLD"],
t_range=[0, 2*PI]
).scale(0.8)
self.play(Create(curve, rate_func=smooth), run_time=3)
3. 数学语义理解增强
针对数学领域的特殊需求,系统深度优化了:
几何图形关系推导
微积分过程可视化
线性代数空间变换
概率统计动态演示
github的项目介绍
This project uses DeepSeek AI to generate mathematical animations using Manim in one shot through model refinement and training. It includes various examples of complex mathematical concepts visualized through animation. The intent here is to attempt to automatically chart concepts that far exceed most humans’ capacity to visualize complex connections across math and physics in a one-shot animation.
本项目利用 DeepSeek AI 通过模型优化和训练,在单次操作中利用 Manim 生成数学动画。它包括通过动画可视化复杂数学概念的多个示例。本意在于尝试自动绘制概念图,这些概念图远超大多数人类在单次动画中可视化数学与物理之间复杂联系的能力。
Technical Breakthroughs: 技术突破:
LaTeX Anchoring: Base prompt engineering technique yielding 62% better code accuracy.
LaTeX 锚定:基础提示工程技术,代码准确率提升 62%。
Dual-Stream Output: Simultaneous animation code + study notes generation.
双流输出:同时动画代码+生成学习笔记。
Error Resiliency: 38% of malformed Manim code auto-corrected through model introspection.
错误容错性:38%的格式错误的 Manim 代码通过模型自省自动纠正。
我正在幕后使用模型精炼和微调,试图从 DeepSeek 中获得更好的单次结果。我意识到的一个关键点是,如果你在提示中向模型传递 LaTeX,这将显著提高返回给用户的可视化效果。
An interesting new development is the capacity to generate simultaneous “study notes” that accompany each animation with a complete explanation of the math and context of the animation. The Benamou animation and notes were the first attempt at this.
一种有趣的新发展是能够生成与每个动画同时出现的“学习笔记”,其中包含对动画中数学和背景的完整解释。Benamou 动画和笔记是这种尝试的首次。
关键步骤
把需要展示和表达的问题使用latex的格式进行提示词的编写。
LaTeX→Manim Bridge: Regex-based sanitization of mathematical expressions
LaTeX→Manim Bridge:基于正则表达式的数学表达式净化
Animation Validation: Automated scene graph analysis pre-render
动画验证:自动场景图分析预渲染
Documentation Engine: Markdown/LaTeX dual-output system
文档引擎:Markdown/LaTeX 双输出系统
配置的过程
环境配置过程中的问题可以询问ai.,路径不要有中文
git clone https://github.com/HarleyCoops/DeepSeek-Manim-Animation-Generator
cd DeepSeek-Manim-Animation-Generator
设置api密钥
如果运行失败,记得去掉双引号。
deepseek充值和领取api的链接
可以使用conda
conda create -n manim-env python=3.9
conda activate manim-env
然后使用pip来下载
#下载python环境。
pip install -r requirements.txt
# 此外还有openai的调用需求
pip install openai
echo "DEEPSEEK_API_KEY=your_key_here" > .env
FFmpeg的安装
LaTeX 环境(替代 MiKTeX)
# 通过 Conda 安装精简版 LaTeX
conda install -c conda-forge texlive-core
MikTex下载一些latex 包的时候,需要连接vpn。下载连接
下载之后,把
\MiKTeX\miktex\bin\x64
这个放在系统环境下就行
检测环境安装进度
# 检查 Manim 版本
manim --version
# 验证 LaTeX
xelatex --version
# 验证 FFmpeg
ffmpeg -version
测试
创建测试文件 test_scene.py
from manim import *
class TestAnimation(Scene):
def construct(self):
text = Tex("Hello \\LaTeX", font_size=144)
self.play(Write(text))
self.wait()
manim -pql test_scene.py TestAnimation
常见问题
在设置完上述过程后,我们就可以开始使用deepseek-r1的api来给我们干活了。
进入对应环境。
操作的流程,我们许哟啊按照场景,或者说是单一的问题。如果场景无法想象或者提炼,可以让ai协助进行。
下面是一个简易的使用deepseek界面。是打开app.py的调用
先输入需要解决的问题,可以使用多种描述手段,可以使用英文和中文,最好添加一定的latex。
可以先在网页端生成一个有一定解决过程的描述的。
please help me to deal with rectangle a^2 + b^2= c^2
我这句话表述的不是很清楚。
但是ai理解为对矩形,进行勾股定理的验证
因为上述有说明工作流程,我们让其生成latex文件,并生成另外的三个文件
生成latex文件,然后根据这个生成python的manim动画的脚本,和markdown格式的说明文件。
pdflatex rectangle_diagonal.tex
我们可以通过这个来把latex的文件转变为pdf格式的文件。
from manim import *
class RectangleDiagonal(Scene):
def construct(self):
# 创建矩形和对角线
rect = Rectangle(width=3, height=4, color=BLUE)
diagonal = Line(rect.get_corner(DL), rect.get_corner(UR), color=RED)
# 添加标签
a_label = MathTex("a = 3").next_to(rect, DOWN)
b_label = MathTex("b = 4").next_to(rect, RIGHT)
c_label = MathTex("c = 5").next_to(diagonal, UP, buff=0.2)
# 勾股定理公式
formula = MathTex("a^2 + b^2 = c^2").to_edge(UP)
formula_box = SurroundingRectangle(formula, color=YELLOW)
# 动画序列
self.play(Create(rect), run_time=2)
self.play(Write(a_label), Write(b_label))
self.wait(1)
self.play(Create(diagonal), Write(c_label))
self.wait(1)
self.play(Write(formula), Create(formula_box))
self.wait(3)
# 运行命令(在终端执行):
# manim -pql rectangle_animation.py RectangleDiagonal
其生成了上面的脚本。
通过该脚本运行生成动画。
manim -pql rectangle_animation.py RectangleDiagonal
生成了如下的视频
同样,对于复杂的问题,我们可以先生成一个说明,然后再让其切分场景来进行说明和生成
对于lif模型的介绍和描述。(由网页端的deepseek生成)
泄漏整合发放模型(Leaky Integrate-and-Fire, LIF)是描述神经元膜电位动态的简化数学模型,其数学表达如下:
1. 膜电位动态方程
膜电位 ( V(t) ) 随时间的变化由以下微分方程描述:
[
\tau_m \frac{dV(t)}{dt} = -(V(t) - V_{\text{rest}}) + R_m I(t)
]
参数说明:
( \tau_m = R_m C_m ): 膜时间常数(( R_m ) 为膜电阻,( C_m ) 为膜电容)
( V_{\text{rest}} ): 静息电位
( I(t) ): 输入电流(突触电流或外部刺激)
( R_m ): 膜电阻
2. 点火条件与重置规则
当膜电位达到阈值 ( V_{\text{th}} ) 时,神经元触发动作电位(发放),随后膜电位被重置:
[
\text{若 } V(t) \geq V_{\text{th}} \Rightarrow
\begin{cases}
V(t) \leftarrow V_{\text{reset}}, \
\text{记录发放时刻 } t_{\text{spike}},
\end{cases}
]
参数说明:
( V_{\text{th}} ): 发放阈值
( V_{\text{reset}} ): 重置电位(通常 ( V_{\text{reset}} \leq V_{\text{rest}} ))
3. 不应期(可选)
在触发动作电位后,神经元进入短暂的不应期 ( \tau_{\text{ref}} ),期间膜电位保持固定:
[
\text{若 } t \in [t_{\text{spike}}, t_{\text{spike}} + \tau_{\text{ref}}] \Rightarrow \frac{dV(t)}{dt} = 0.
]
4. 输入电流分解
输入电流 ( I(t) ) 可进一步分解为突触电流和噪声项:
[
I(t) = I_{\text{syn}}(t) + I_{\text{noise}}(t),
]
其中突触电流常建模为:
[
I_{\text{syn}}(t) = \sum_{i} w_i \sum_{t_i^{(k)}} \kappa(t - t_i^{(k)}),
]
( w_i ): 突触权重
( \kappa(t) ): 突触核函数(如指数衰减 ( \kappa(t) = e^{-t/\tau_s} ))
5. 数学性质与动态行为
泄漏项:( -(V - V_{\text{rest}}) ) 导致膜电位指数衰减至静息电位。
积分项:( R_m I(t) ) 反映输入电流对膜电位的累积效应。
阈值机制:点火条件引入非线性,使模型能模拟动作电位的离散发放特性。
6. 离散时间近似(数值求解)
采用欧拉法对微分方程离散化(时间步长 ( \Delta t )):
[
V(t + \Delta t) = V(t) + \frac{\Delta t}{\tau_m} \left[ -(V(t) - V_{\text{rest}}) + R_m I(t) \right].
]
总结
LIF 模型通过 泄漏项、积分项、阈值条件 的数学结构,简洁地刻画了神经元的电生理特性,是计算神经科学和脉冲神经网络(SNN)的基础模型。其数学形式平衡了生物合理性和计算效率,适用于大规模网络仿真与理论分析。
展示分析一个这个,通过不同场景来呈现
ai会根据这个说明,设置五个场景
好的,我需要根据用户提供的关于泄漏整合发放模型(Leaky Integrate-and-Fire, LIF)的详细数学描述,设计不同场景来展示其动态行为。用户希望我通过不同场景呈现LIF模型的应用,可能需要具体的例子、参数变化的影响、数值模拟的可视化等。我需要先理解LIF模型的各个方程和参数,然后构思几个典型场景,比如不同输入电流下的膜电位变化、阈值的触发与重置、不应期的效果、噪声的影响等。接下来,我需要为每个场景设定具体的参数,可能用Python代码进行数值模拟,并生成对应的图表来展示结果。同时,还需要解释每个场景下模型的行为及其背后的数学原理。需要确保每个场景的例子都能清晰地说明LIF模型的一个或多个特性,例如泄漏效应、积分过程、点火机制等。另外,可能需要比较不同参数设置下的结果,如改变膜时间常数τ_m或输入电流I(t)的幅度和频率,观察对神经元发放频率的影响。最后,总结这些场景如何共同体现了LIF模型的核心特点,如生物合理性与计算效率的平衡。
并产生了模拟的代码,但不是manim的。
使用manim的实现方式。我们要求其使用manim的格式来实现,可以按照这个来命令。
生成latex文件,然后根据这个生成python的manim动画的脚本,和markdown格式的说明文件。
粘贴上面的代码,并交给manim引擎来产生动画。
这个工具和思想对于想要学习manim或者直接由思路去学习各种数学知识并进行可视化提供了非常高效的方案。