Crie variables ​​com nomes de strings

Vamos supor que eu queira criar 10 variables ​​que ficariam assim:

x1 = 1; x2 = 2; x3 = 3; x4 = 4; . . xi = i; 

Esta é uma versão simplificada do que pretendo fazer. Basicamente eu só quero salvar linhas de código criando essas variables ​​de maneira automatizada. Existe a possibilidade de construir um nome de variável no Matlab? O padrão no meu exemplo seria ["x", num2str(i)] . Mas eu não consigo encontrar uma maneira de criar uma variável com esse nome.

Você pode fazer isso com eval mas você realmente não deveria

 eval(['x', num2str(i), ' = ', num2str(i)]); %//Not recommended 

Em vez disso, use uma matriz de células:

 x{i} = i 

Eu também recomendo fortemente o uso de uma matriz de células ou uma estrutura para tais casos. Eu acho que vai te dar algum aumento de desempenho.

Se você realmente precisa fazer isso, Dan disse como. Mas eu também gostaria de apontar para a function genvarname . Isso fará com que sua string seja um nome de variável válido.

EDIT: genvarname é parte do núcleo matlab e não da checkbox de ferramentas de statistics

 for k=1:10 assignin('base', ['x' num2str(k)], k) end 

Se alguém estiver interessado, a syntax correta da resposta de Dan seria:

 eval(['x', num2str(i), ' = ', num2str(i)]); 

Minha pergunta já continha a syntax errada, então é minha culpa.

Embora esteja muito atrasado, eu queria adicionar outra resposta.

a function genvarname é exatamente para esses casos

e se você usá-lo com uma matriz de estrutura tmp você não precisa do cmd eval

o exemplo 4 deste link é como fazer isso 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 

muito bem sucedida

ceu

Eu precisava de algo assim, já que você não pode referenciar estruturas (ou matrizes de células que eu presumo) do espaço de trabalho em blocos Simulink se você quiser alterá-las durante a simulação.

De qualquer forma, para mim isso funcionou melhor

 assignin('base',['string' 'parts'],values);