假设我想创建 10 个如下所示的变量:
x1 = 1;
x2 = 2;
x3 = 3;
x4 = 4;
.
.
xi = i;
这是我打算做的简化版本。基本上我只想通过自动创建这些变量来节省代码行。是否有可能在 Matlab 中构造变量名?我的示例中的模式是["x", num2str(i)]
. 但我找不到用该名称创建变量的方法。
假设我想创建 10 个如下所示的变量:
x1 = 1;
x2 = 2;
x3 = 3;
x4 = 4;
.
.
xi = i;
这是我打算做的简化版本。基本上我只想通过自动创建这些变量来节省代码行。是否有可能在 Matlab 中构造变量名?我的示例中的模式是["x", num2str(i)]
. 但我找不到用该名称创建变量的方法。
你可以用eval来做,但你真的不应该
eval(['x', num2str(i), ' = ', num2str(i)]); %//Not recommended
而是使用单元格数组:
x{i} = i
我也强烈建议在这种情况下使用元胞数组或结构。我认为它甚至会给你一些性能提升。
如果你真的需要这样做,Dan 会告诉你怎么做。但我也想指出该genvarname
功能。它将确保您的字符串是有效的变量名。
编辑: genvarname 是核心 matlab 的一部分,而不是统计工具箱的一部分
for k=1:10
assignin('base', ['x' num2str(k)], k)
end
虽然早就应该了,但我只是想添加另一个答案。
函数 genvarname 正是针对这些情况
如果您将它与 tmp 结构数组一起使用,则不需要 eval cmd
此链接中的示例 4 是如何做到的http://www.mathworks.co.uk/help/matlab/ref/genvarname.html
for k = 1:5
t = clock;
pause(uint8(rand * 10));
v = genvarname('time_elapsed', who);
eval([v ' = etime(clock,t)'])
end
一切顺利
埃亚尔
如果其他人有兴趣,丹的答案的正确语法是:
eval(['x', num2str(i), ' = ', num2str(i)]);
我的问题已经包含错误的语法,所以这是我的错。
我需要这样的东西,因为如果您希望能够在仿真期间更改它们,您不能从 Simulink 块中的工作区引用结构(或我认为的单元数组)。
无论如何,对我来说这效果最好
assignin('base',['string' 'parts'],values);