Crear variables con nombres de cadenas

Supongamos que quiero crear 10 variables que se verían así:

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

Esta es una versión simplificada de lo que pretendo hacer. Básicamente solo quiero guardar líneas de código creando estas variables de forma automática. ¿Existe la posibilidad de construir un nombre de variable en Matlab? El patrón en mi ejemplo sería ["x", num2str(i)] . Pero no puedo encontrar una forma de crear una variable con ese nombre.

Puedes hacerlo con eval pero realmente no deberías

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

Más bien use una matriz de celdas:

 x{i} = i 

También recomiendo usar una matriz de celdas o una estructura para tales casos. Creo que incluso te dará un impulso de rendimiento.

Si realmente necesita hacerlo, Dan le dijo cómo hacerlo. Pero también me gustaría apuntar a la función genvarname . Se asegurará de que su cadena sea un nombre de variable válido.

EDITAR: genvarname es parte del núcleo de Matlab y no de la caja de herramientas de estadísticas

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

Si alguien más está interesado, la syntax correcta de la respuesta de Dan sería:

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

Mi pregunta ya contenía la syntax incorrecta, así que es mi culpa.

A pesar de que hace tiempo que vengo, justed quería agregar otra respuesta.

la función genvarname es exactamente para estos casos

y si lo usa con una matriz de estructura tmp no necesita el cmd de evaluación

el ejemplo 4 de este enlace es cómo hacerlo 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 

todo lo mejor

eyal

Necesitaba algo como esto ya que no puede hacer referencia a estructuras (o matrices de celdas, supongo) desde el espacio de trabajo en bloques Simulink si desea poder cambiarlas durante la simulación.

De todos modos, para mí esto funcionó mejor

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