eval函数的使用-北太天元学习36
北太天元中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) '];']);
end
end