eval函数在这个matlab代码中做了什么?

时间:2014-03-25 23:36:20

标签: matlab eval

我正在使用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文档中搜索过,但它没有帮助。

有人可以对此有所了解吗?

1 个答案:

答案 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