lorenz-x-y-z
Lorenz三个维度数据
在科研工作中,经常需要将数据可视化以便更好地理解和传达研究成果。
但大家主要放静态图片,而视频或动画通常比静态图片更具吸引力和表现力。AE, Manim太难学,Matlab就可以用来制作动画。
在这篇博客中,我们将介绍如何使用 MATLAB 制作动画,并以 Lorenz 系统为例进行演示。完整源代码动态Lorenz完整源代码,下面来讲解原理。
原理
MATLAB 是一个强大的数值计算和可视化软件,它提供了丰富的函数和工具箱,使得制作动画变得相对简单。动画的制作原理基本上是通过在每个时间步更新图形的内容,并将这些图形组合成一个连续的视频。在 MATLAB 中,可以使用 figure 和 plot 函数创建图形,并使用循环或时间事件来更新图形。最后,通过将每一帧保存为图像并将这些图像组合成视频,就可以生成动画。
案例:Lorenz
Lorenz 系统是一种混沌动力学模型,描述了大气对流中的非线性行为。它由三个常微分方程组成,可以用来模拟天气系统中的复杂行为。我们将使用 MATLAB 来模拟 Lorenz 系统的动态行为,并将其制作成动画。
核心代码:
% 创建动画
% 定义 Lorenz 系统的常数
sigma = 10;
beta = 8/3;
rho = 28;
% 定义初始条件和时间步长
x0 = 10;
y0 = 10;
z0 = 10;
dt = 0.01;
tspan = 0:dt:50;
% 定义 Lorenz 系统的微分方程
lorenz = @(t, XYZ) [sigma*(XYZ(2)-XYZ(1)); XYZ(1)*(rho-XYZ(3)) - XYZ(2); XYZ(1)*XYZ(2) - beta*XYZ(3)];
% 解微分方程
[t, XYZ] = ode45(lorenz, tspan, [x0; y0; z0]);
% 创建动画
figure;
for i = 1:length(t)
plot3(XYZ(1:i,1), XYZ(1:i,2), XYZ(1:i,3), 'b', 'LineWidth', 1.5);
xlabel('X');
ylabel('Y');
zlabel('Z');
title(sprintf('Lorenz 系统动画 (t = %.2f)', t(i)));
grid on;
axis([-30 30 -30 30 0 60]);
drawnow;
% 保存每一帧为图像(可选)
% frame = getframe(gcf);
% imwrite(frame.cdata, 'lorenz_animation.gif', 'gif', 'WriteMode', 'append');
end
上面展示了最基础的版本。进行角度运镜+自定义颜色的微调之后的效果如下:
lorenz-x-y-z
Lorenz三个维度数据
完整源代码
- 动态Lorenz完整源代码
- Matlab-Patch 创建彩色多边形的补片