
北太天元中eval函数作用简单来说就是可以把字符串当作命令来执行。即将字符串自动识别并转化为北太天元命令。比如eval('x=1') 可以直接定义变量x,并为之赋值为1,即执行引号内的北太天元命令。
在北太天元的命令行窗口中输入help eval命令回车就可以看到eval函数的帮助,大概的意思就是执行北太天元中的表达式expression,计算expression表示的代码。意思是相当于在命令行中输入expression表达式命令的意思。用法:eval('y=sin(1)')与命令 y=sin(1)等价。
>>help eval对字符串解析求值 把字符串当成baltamatica命令进行解析和求值 示例: eval("3+5") eval("x=3") eval('sin(1)')一个更有趣的例子,在开始的时候x2的值是10最后把x2的值变成了20 x2=10 n=2 str=['x' num2str(n) '=20'] eval(str)需要注意的转义字符串的输入 eval('2\n ; x=3 ')上面的\n 表示一个换行符号但是如果你的n是一个变量, 就是想计算 2左除n,那么你可以输入 eval('2\\n ; x=3 ')除了\n之外,我们处理转义字符还有 \a, \b, \t, \v, \f, \r
(资料图片)
eval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要新建变量data1,data2,data3 ,并且每个变量赋值为 1x1 , 2x2, 3x3 的矩阵, 那么我们可以使用循环
for i = 1:3
str = ['data' num2str(i) '= zeros(i);'];
eval(str);
end
当然,我们可以用三行命令完成上面的任务,
data1 = zeros(1);
data2 = zeros(2);
data3 = zeros(3);
但是如果我们要新建的变量是从data1 到 data100, 那么for循环和eval 配合显然使得代码更加简洁。
下面是我收到的有朋友发过来的代码,说是在调试的时候出问题, 我没有能够重现他的问题, 我会做一个视频介绍一下 eval 的用法,同时也做这个视频与他商量,看看是不是他下载了最新的北太天元就能解决他的问题了。
%在循环里多次调用函数
ind=[1 2;3 4;5 6]
a = jiafa(ind);
a = jiafa(ind);
disp(a);
function max_size_ind=jiafa(ind) %ind是一个矩阵,此function是提取矩阵ind每一列的最大值 size_ind=size(ind) for i =1:size_ind(2) %实际上运行的命令max_indi=max(ind(1:size_ind(1),i))]); eval(['max_ind',num2str(i),'=max(ind(1:size_ind(1),',num2str(i),'));']); end max_size_ind=[]; for i = 1:size_ind(2) eval(['max_size_ind=[max_size_ind,max_ind' num2str(i) '];']); endend