【发布时间】:2016-03-19 18:50:57
【问题描述】:
我正在尝试在 MATLAB 中模拟 Lorenz 系统中的轨迹,目前使用以下代码 -
clear all
clf;
clc;
% Solution
[t1,x1] = ode45('g',[0 30],[0;2;0]);
[t2,x2] = ode45('g2',[0 30],[0;2.001;0]);
[C,h] = size(x2);
ang = 0;
for j = 1:C
p1(j,:)= x1(j,:);
p2(j,:)= x2(j,:); % Plot
plot3(p1(:,1),p1(:,2),p1(:,3),'k', p2(:,1),p2(:,2),p2(:,3),'r'); hold on;
plot3(p1(j,1),p1(j,2),p1(j,3),'ko','markerfacecolor','k');
plot3(p2(j,1),p2(j,2),p2(j,3),'rd','markerfacecolor','r'); hold off
axis([-20 20 -40 40 0 50])
axis off
set(gca,'color','none') % Rotation
camorbit(ang,0,[p1(1,1),p1(1,2),p1(1,3)])
ang = ang + (360/C); % Record
set(gcf, 'units','normalized','outerposition',[0 0 1 1])
F(j)= getframe(gcf);
end
movie(F)
clf;
close;
函数g、g2定义相同:
function xdot = g(t,x)
xdot = zeros(3,1);
sig = 10;
rho = 28;
bet = 8/3;
xdot(1) = sig*(x(2)-x(1));
xdot(2) = rho*x(1)-x(2)-x(1)*x(3);
xdot(3) = x(1)*x(2)-bet*x(3);
洛伦兹系统。整个代码的目的是制作两个初始状态变化很小的轨迹的电影,以展示该系统的混沌行为。代码本身确实有效,但占用了我计算机的所有内存,并且在尝试制作轨迹的 .avi 文件时,它抱怨超过 7.5 GB——这对于这个模拟来说当然太多了。
我的问题由两部分组成:
(1) 如何管理此代码以使其运行更顺畅?
(2) 如何制作轨迹的.avi 文件?我在网上找了半天的方法,但是每次都是MATLAB或者我的电脑都放弃了。
提前致谢!
【问题讨论】:
-
嗨。函数
g2的定义是什么。如果是一样的..你为什么用不同的名字? -
当我运行你的代码时,
F(j)是一个带有元素cdata: [686x1048x3 uint8]的结构。j从1循环到C=1421。代码在我的机器上运行得非常顺利。也许压缩是个问题?编辑:它也播放流畅.. -
另外,如果您有内存问题,您可以每帧保存帧,以便存储它们
-
@MatthiasW。完全一样,可能你是对的
-
@AnderBiguri 感谢您的建议。我如何才能做到这一点并且仍然能够制作这种模拟的电影?
标签: matlab video memory simulation lorenz-system