概述
函数: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)
最后
以上就是矮小白猫为你收集整理的eval及其替代 matlab20170313的全部内容,希望文章能够帮你解决eval及其替代 matlab20170313所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复