matlab中的eval函数使用
matlab中的eval函数使用
在matlab的命令行窗口中输入help eval命令回车就可以看到eval函数的官方解释,大概的意思就是执行matlab中的表达式,计算expression表示的代码。意思是相当于在命令行中输入expression表达式命令的意思。
用法:
eval(expression)
[output1,…,outputN] = eval(expression)
这里就很奇怪了,为啥不直接在命令行中输入命令而是要多使用一个eval函数来完成这样的事情呢。这个是有原因的,下面举个例子:
1、比如你需要使用matlab加载一些数据,并且这些数据保存在很多个文件中,文件的命名有一定的规律,比如:data1.mat data2.mat……等,你需要怎样来加载呢?是直接写n个load data1.mat吗,显然不是的,当遇到这种情况的时候就是eval函数展示其用处的时候了。你可以这样写:
for i = 1:n
eval([\'load\',\' \',\'data\',num2str(i),\'.mat\']); % 这样完全跟上面的功能一样
end
2、当你需要在一串字符串中提取出数字,或者将一串十进制的数中将每个数都提取出来时,每个数字之间使用空格分开,即a = \’12 34 45 67\’,这样的形式你怎样将他们提取出来变成一个矩阵呢?这个同样可以使用eval函数来解决这个问题:
for i = 1:4
num(i) = eval([\'hex2dec(\',\'a(3*i-2:3*i-1)\',\')\']); % 使用这个语句就可以实现将上面的字符串中的数字转换为相应的矩阵了
end
注意有坑:
1、eval函数相当于在命令行中输入命令,所以命令的形式必须要跟expression的形式要一致,否则回出错,这个就是上面代码1中为什么需要使用:eval([\’load\’,\’ \’,\’data\’,num2str(i),\’.mat\’]);在expression中间还添加了\’ \’,这个就是需要保持expression正确。
2、eval由于会直接将命令输出,所以它可以自动识别有实际数值的变量,这个就是上面代码2中直接输入i的表达式的原因:eval([\’hex2dec(\’,\’a(3i-2:3i-1)\’,\’)\’]);
3、如果在eval表达式中存在符号\’时,需要使用转义字符即需要在\’的地方添加两个\’\’才可以,这样表示他就是一个\’而不是表示字符串的意思。