让我们假设我要创建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
我还强烈建议使用细胞阵列或用于这种情况下的结构体。 我认为它甚至会给你一些性能提升。
如果你真的需要这样做丹告知如何。 但我也想指出的genvarname
功能。 这将确保您的字符串是一个有效的变量名。
编辑:genvarname是核心MATLAB的一部分,而不是统计工具箱
for k=1:10
assignin('base', ['x' num2str(k)], k)
end
如果任何人有兴趣,从丹的回答正确的语法是:
eval(['x', num2str(i), ' = ', num2str(i)]);
我的问题已经包含了错误的语法,所以这是我的错。
虽然姗姗来迟,我justed想添加另一种答案。
功能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
祝一切顺利
的Eyal
我需要这样的事情,因为如果你希望能够在仿真过程中改变他们,你无法从工作区引用结构(或电池阵列我相信)在Simulink模块。
无论如何,这对我来说最好的工作
assignin('base',['string' 'parts'],values);