我正在使用CUDA / C ++来解决非线性方程组,我正在将结果写入mat文件。之后,我将数据加载到Matlab中,使用quiver
和imagesc
显示,然后使用writeVideo(video,getframe(gcf));
制作视频。以下是我如何做的草图:
for i=1:numberoffiles
load(strcat(data1,num2str('i')));
load(strcat(data2,num2str('i')));
load(strcat(data3,num2str('i')));
load(strcat(data4,num2str('i')));
load(strcat(data5,num2str('i')));
subplot(...);
quiver(...);
imagesc(...);
drawnow
writeVideo(video,getframe(gcf));
end
当我的numberoffiles
为100
时,它工作正常,尽管这个过程越来越慢。现在我的numberoffiles=1000
和i>400
之后变得非常慢。我想,我忘了清楚一些事情。但事实是,我的所有.mat
文件都包含一个名为iu1
的数组,因此每个加载都会覆盖数组iu1
。任何人都知道如何解决它?我觉得这个问题出在RAM中,因为在这个过程中,一切都开始在我的电脑上运行得很慢。
这是我的完整代码:
function []=MakeVideo(framerate,name)
video=VideoWriter(name);
video.FrameRate=framerate;
open(video);
f=figure('units','normalized','outerposition',[0 0 1 1])
[names, values]=textread('config.txt','%s%f');
stride=values(17);
dt=values(16);
resize=values(19)/32;
max=values(15)/dt;
dx=values(18)/values(19);
for i=0:stride:max
uitable(f,'Data',values,'ColumnWidth',{100},'ColumnName', {'Values'},'RowName',names,'Position',[1150 500 350 800]);
load(strcat('nx',num2str(i)));
nxcu=iu1';
clear('iu1');
load(strcat('ny',num2str(i)));
nycu=iu1';
clear('iu1');
ncu=nxcu+1i.*nycu;
load(strcat('Psi',num2str(i)));
Psicu=iu1';
clear('iu1');
load(strcat('phi',num2str(i)));
phicu=iu1';
clear('iu1');
load(strcat('c',num2str(i)));
ccu=iu1';
clear('iu1');
subplot(2,2,1)
ncu=imresize(ncu,1/resize);
npplot=angle(ncu)/2;
imagesc(abs(ncu));
colorbar
hold on
q=quiver(cos(npplot),sin(npplot));
set(q,'color','black');
set(q,'LineWidth',2);
set(q,'ShowArrowHead','off');
daspect([1 1 1])
title('n')
subplot(2,2,2)
imagesc(phicu)
daspect([1 1 1])
colorbar
title(strcat('w, wmin=',num2str(min(min(phicu)))))
subplot(2,2,3)
Psix=imresize(Deriv(Psicu,'y',dx),1/resize);
Psiy=imresize(-Deriv(Psicu,'x',dx),1/resize);
q=quiver(Psix,Psiy);
set(q,'color','black');
set(q,'LineWidth',2);
daspect([1 1 1])
title('Psi')
subplot(2,2,4)
imagesc(ccu)
daspect([1 1 1])
colorbar
title(strcat('time=',num2str(dt*i),'mic=',num2str(min(min(ccu)))))
drawnow
writeVideo(video,getframe(gcf));
end
close gcf
close(video)
end
在工作文件夹中,我有以下文件列表:
nx0.mat, ny0.mat, c0.mat, Psi0.mat, phi0.mat,
nx1000.mat, ny1000.mat, c1000.mat, Psi1000.mat, phi1000.mat,
nx2000.mat, ny2000.mat, c2000.mat, Psi2000.mat, phi2000.mat,
.............................................
nx500000.mat, ny500000.mat, c500000.mat, Psi500000.mat, phi500000.mat
每个mat文件都有变量iu1
。该变量是矩阵512x512。