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

如何在Python中实现函数演化过程的动画效果?

函数序列演化动画实现方案

本文是《在Python中绘制3D图形》的续篇。

给定二维数组sol=(u(t_i,x_j): 0≤i≤m,-n≤j≤n),表示函数u在网格点(t_i:=i/m,x_j:=j/n)处的取值。定义两个数组time:=(t_i: 0≤i≤m)和space:=(x_j: -n≤j≤n),我们可以:

  • 针对固定的i绘制plot(space, sol[i,]),这是函数u_i的图像,其中u_i(x_j):=u(t_i,x_j)(-n≤j≤n);
  • 绘制3D图展示time、space与sol的关系(如前篇所示)。

现在需要制作函数序列(u_i: 0≤i≤m)的演化动画,在同一坐标系中展示u_i的演化过程,并生成视频文件。

函数构造代码

import numpy as np
import math

eps=0.1
m=2000
n=100
dt=1.0/m
dx=1.0/(n*n)
time=np.zeros(m+1)
for i in range(m+1):
  time[i]=i*dt
space=np.zeros(2*n+1)
for j in range(2*n+1):
  space[j]=(j-n)*dx*n
sol=np.zeros((m+1,2*n+1))
for i in range(m):
  index_i=m-1-i
  for j in range(1,2*n):
    sol[index_i, j] =sol[index_i+1, j]-0.5*dt*math.log(eps+abs(sol[index_i+1, j+1]+sol[index_i+1, j-1]-2*sol[index_i+1, j])/dx)

动画实现方案

可以使用matplotlib的animation模块实现动画并保存为视频,步骤如下:

  1. 导入必要的库
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation, FFMpegWriter
  1. 设置绘图基础
fig, ax = plt.subplots()
line, = ax.plot(space, sol[0,])
ax.set_xlabel('空间x')
ax.set_ylabel('u(x,t)')
# 固定y轴范围避免画面跳动
y_min, y_max = sol.min(), sol.max()
ax.set_ylim(y_min - 0.1*(y_max-y_min), y_max + 0.1*(y_max-y_min))
  1. 定义动画更新函数
def update(frame):
    line.set_ydata(sol[frame,])
    ax.set_title(f'函数u(x,t)的演化过程 (t={time[frame]:.4f})')
    return line, ax
  1. 创建动画并保存为视频
# 每隔10帧取一次数据,平衡流畅度与生成效率
step = 10
frames = range(0, m+1, step)
ani = FuncAnimation(fig, update, frames=frames, blit=True, interval=20)

# 保存为MP4视频(需提前安装FFMpeg)
writer = FFMpegWriter(fps=30, metadata={'title': '函数演化动画'}, bitrate=1800)
ani.save('function_evolution.mp4', writer=writer)

# 可选:直接显示动画
plt.show()

注意事项

  • 由于m=2000,直接使用全量帧会导致视频过大、生成缓慢,设置step参数隔帧采样是更高效的选择;
  • 保存视频需安装FFMpeg,可通过pip install ffmpeg-python或系统包管理器完成安装;
  • 固定y轴范围能避免动画过程中画面频繁跳动,提升观看体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:15:39