我正在使用Matlab中的一个项目,我必须修改一个预先存在的代码。
在开始工作之前,我想了解如何使用eval功能。
首先,有参数struct definition(查看eval函数):
function [ descriptor ] = parameter ( name, nominal, mode, range )
descriptor = struct (
'name', name, % Parameter name inside Simulink schematic
'nominal', nominal, % Nominal parameter value
'mode', mode, % Range mode name in { 'Range', 'Percentage', 'PlusMinus' }
'range', range % Range boundaries, 1x2 vector
);
eval([ name '=' num2str(nominal) ';' ]); % Initialize with nominal value
end
仅为完成,参数单元阵列定义如下:
parameters = {}; % Simulation parameter declarations
parameters{end+1} = parameter( 'simulink_Imm(1,1)', simulink_Imm(1,1), 'Percentage', [-10, 10] );
parameters{end+1} = parameter( 'simulink_q0(1)', 0, 'Range', [-1, 1] );
etc...
最后我们有这个for循环(总是看一下eval函数):
for i = 1 : numParameters
p = parameters(i); p = p{1};
value = urealvalue( p.nominal, p.mode, p.range ); % Generate random real value
eval([ p.name '=' num2str(value) ';' ]); % Assign the generated value
该功能使用了两次,老实说,我不知道它是如何工作的。感谢评论,我理解它的作用,但我不明白它是如何分配价值的。
我也在matlab文档中搜索过,但它没有帮助。
有人可以对此有所了解吗?
答案 0 :(得分:4)
eval
计算一个由字符串定义的有效Matlab表达式。
想象一下:
name = 'myVar';
nominal = 42;
现在打电话:
eval([ name '=' num2str(nominal) ';' ]);
与...相同:
eval([ 'myVar = 42;' ]);
您在工作区中得到一个变量myVar
,其值 42 。
当您输入
时也会发生同样的情况myVar = 42;
直接。因此,您不必在脚本中使用一行代码,而只需从任何地方评估代码字符串。在你的情况下,它用于从两个struct字段创建一个变量,第一个是变量名,第二个是它的值。
另一个例子,你想要一个以它的实际值命名的变量。但你以前不知道它的名字:
value = randi(10);
eval([ 'var' num2str(value) '=' num2str(value) ';' ]);
执行此操作的唯一方法是使用eval
,因为您需要根据随机生成的值创建代码行字符串。 Eval然后"写"它。例如,如果value = 9
,则会在下一步中将其存储到变量var9
。