matlab 画图直接存储_基于Matlab监测实时生成数据并画图

本文介绍了如何使用Matlab监测fortran计算生成的数据文件,并实时画图展示结果,通过读取文件、绘图及创建GIF动画,实现数据的动态展示。程序逻辑包括检查数据文件数量、读写操作以及图表生成。
摘要由CSDN通过智能技术生成

7b6663839af9bfc53345e297ef46e288.png

在使用fortran, c语言等进行科学计算时,常常会出现某个case的计算时间较长,而数据输出的迭代步长较大,case结果的迭代变化并不明显,往往期望能够对生成的结果进行实时的展示和输出。

基于Matlab语言,对fortran生成的数据文件进行监测并得到相应的“实时”(与真实计算存在一个时间差)图片。程序的逻辑较为简单,查找文件夹中数据文件的数量,对文件进行读写操作,画图,生成GIF动画。

本例中的数据文件为下面形式:

ITLE="RESULT_V"
 VARIABLES="X","V"
 ITER=        1000
   1.00250624120235       7.808651116880838E-007
   3.00751872360706       1.349819874126379E-006
   5.01253120601177       1.211866283504929E-006
   7.01754368841648       9.670211951072779E-007
   9.02255617082119       7.992737613514242E-007
   11.0275686532259       7.107701954877268E-007
   13.0325811356306       6.739803962184800E-007
   15.0375936180353       6.640896067336087E-007
   17.0426061004400       6.657497084456198E-007
   19.0476185828447       6.716665208342410E-007
   21.0526310652494       6.790229404302768E-007
   23.0576435476542       6.869140482201853E-007
.......

其中,X与V数据总计为400行。

程序为

%显示最新数据图像,并存储在gif文件中
clear,clc
datadir = '1106';%待检测文件夹名称
if ~exist([datadir,'_done'],'dir')
    mkdir([datadir,'_done'])%将显示完的结果放在这个文件夹中
end
time_acc_flag = 1000%1000s内没有文件产生则程序停止;
time_acc=0;
while time_acc<=time_acc_flag
    %待测文件夹内是否有文件
    file_all = dir([datadir,'/.']);%1106文件夹内所有文件和文件夹
    file_all = struct2cell(file_all);
    if isempty(find(cell2mat(file_all(5,:))==0,1))%是否存在文件
        pause(10);%暂停10s,与数据文件产生速度相匹配
        time_acc = time_acc+10; 
    else
        
        FileName = file_all(1,~cell2mat(file_all(5,:)));%确定所有文件的名字,剔除文件夹
        for i=1:numel(FileName)
            %读取
            x=zeros(1,400);v=zeros(1,400);%输出的数据数量:400
            fileID = fopen([datadir,'/',FileName{i}]);%1106文件夹
            fscanf(fileID,'%sn',2)
            iter = fscanf(fileID,'ITER= %d');
            for j=1:numel(x)
                temp = fscanf(fileID,'%f %e',2);
                x(j) = temp(1);
                v(j) = temp(2);
            end
            %画图
            plot(x,v)
            xlabel('x')
            ylabel('y')
            title([num2str(iter),'ITER'])
            frame=getframe;
            im=frame2im(frame);
            [II,map]=rgb2ind(im,256);
            if(i==1)
                imwrite(II,map,[datadir,'.gif'],'DelayTime',0.2,'LoopCount',Inf)
            else
                imwrite(II,map,[datadir,'.gif'],'WriteMode','append','DelayTime',0.2)    
            end
            %读取完的文件放置在*_done文件中
            movefile([datadir,'/',FileName{i}],[datadir,'_done/',FileName{i}]);
        end
        time_acc = 0;
    end
end

如有错误,欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值