eval及其替代 matlab20170313

函数:eval

功能:执行字符串形式的语句

格式:eval(expression)

备注:输入expression为字符串形式的matlab函数语句

使用示例

expression = input('Enter the name of a matrix','s');

if (exist(expression,'var'))

mesh(eval('expression'))

end


替代eval使用的N中情况

为什么要在某些情况下避免使用eval?

eval比较低效,代码可读性差,难以调试

matlab会在第一次执行代码的时候编译它以提高以后的执行速度,但存在eval的代码是在运行时(runtime)改变的,所以matlab无法编译。

可替代的情况

1、操作连续名称的变量

通常会使用eval生成一系列具有连续名称的变量,例如A1,A2,A3...;这种做法违背了matlab向量化操作的原理。更好的解决办法是将相关的数据存储到一个三维矩阵中或胞元数组中。

eval(['A', int2str(n),' = magic(n)'])

替换为

numArrays = 10;
A = cell(numArrays, 1);
for n = 1:numArrays
    A{n} = magic(n);
end

2、操作连续名称的文件

例如保存一些列具有连续名称的文件

eval(['save myfile', int2str(n), '.mat'])

借用良好的编程习惯

currentFile = 'myfile1.mat';
save(currentFile);

可替换为

numFiles = 3;
for n = 1:numFiles
    randomData = rand(n);
    currentFile = sprintf('myfile%d.mat',n);
    save(currentFile,'randomData')
end

3、函数名称作为变量

%creat function handle with @
plotFcn = {@plot @bar};
n = input('Select an example (1 for plot,2 for bar): ');
plotFcn{n}(1:10)


%use feval function
plotFuc = input('Specify a plotting function: ','s');
data = input('Enter data to plot: ');
feval(plotFuc,data)


%% field Names in Variables
myData.height = [67, 72, 58];
myData.weight = [140, 205, 90];


fieldName = input('Select data (height or weight): ','s');
dataToUse = myData.(fieldName)

% access fieldName: structName.(dynamicExpression)


你可能感兴趣的:(matlab/simulink)