eval函数的使用-北太天元学习36

哔哩哔哩   2023-08-13 19:11:56

北太天元中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