MATLAB从mat文件中按顺序读取变量

这次在做以“制动能量回收”为主题的项目,需要从一堆形如“speed001.mat”的变量中读取数据。本着“做出通用程序以便扩展”这一想法,我做出了循环读取变量的函数。
此文和我的第一个 MATLAB 程序有类似的地方,然而新的程序用到了eval函数。

函数全文如下:

function [ divided_ ] = divide_travel( order )
load('speed');
name='speed000';
p0=mod(order,10);
p1=mod((order-mod(order,10)),100)/10;
p2=(order-mod(order,10)-mod((order-mod(order,10)),100)/10*10)/100;
name(8)=num2str(p0);name(7)=num2str(p1);name(6)=num2str(p2);
n=length(eval(name));
speed_prev=0;time_=0;
try
    divide_row=size(divided_,2)+1;
catch
    divided_=zeros(1);divide_row=1;
end
for i=1:n
    eval(['speed_=',name,'(',num2str(i),');']);
    if speed_==0&speed_prev~=0
        time_=1;divide_row=divide_row+1;
    else
        time_=time_+1;
    end
    divided_(time_,divide_row)=speed_;
    speed_prev=speed_;
end
end

关键在于读取变量“name”中形如“speed001”的字符串所指的行向量的某个值(比如说“speed001(5)”),不能用这样

name(5)

这样读取出来的是“d”;也不能用“speed001(5)”,这样就失去了意义。
最后用的是eval函数解决问题(MATLAB教程上说慎用此函数,但是我认为MATLAB是一个在自己主机运行的而且没有删除文件等危险函数操作的程序,不需要考虑这么多)。

关键部分

eval(['speed_=',name,'(',num2str(i),');']);
% eval()函数的功能就是将括号内的字符串视为语句并运行
% 字符串、字符数组要用逗号连接;字符数组不用加单引号:加上视为字符串

《MATLAB从mat文件中按顺序读取变量》有3个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注