使用string中的名称创buildvariables
假设我想创build10个variables,如下所示:
x1 = 1; x2 = 2; x3 = 3; x4 = 4; . . xi = i;
这是我打算做的简化版本。 基本上我只想通过以自动方式创build这些variables来节省代码行。 有没有可能在Matlab中构造一个variables名? 我的例子中的模式是["x", num2str(i)]
。 但我不能find一种方法来创build一个名称的variables。
你可以用eval来做,但你真的不应该这样做
eval(['x', num2str(i), ' = ', num2str(i)]); %//Not recommended
而是使用单元格数组:
x{i} = i
我也强烈build议使用单元格数组或结构来处理这种情况。 我想这甚至会给你一些提升。
如果你真的需要这样做丹告诉过如何。 但是我也想指向genvarname
函数。 这将确保您的string是一个有效的variables名称。
编辑:genvarname是核心matlab的一部分,而不是统计工具箱的一部分
for k=1:10 assignin('base', ['x' num2str(k)], k) end
如果其他人有兴趣,丹的答案正确的语法是:
eval(['x', num2str(i), ' = ', num2str(i)]);
我的问题已经包含了错误的语法,所以这是我的错。
虽然早该迟了,但我还是想补充一点。
函数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块的工作区中引用结构(或者我设想的单元arrays)。
无论如何,对我来说,这是最好的
assignin('base',['string' 'parts'],values);