# Table of Variables

I use a list of variables {x1, x2, x3} to Solve a particular set of equations.

I am now trying to generalise this depending on the number of equations.

I need something along the lines of Table[{"x" i}, {i,1,Length[equations]}] which prints {x1, x2, x3, x4,...} etc.

However, "x" i obviously does not work. Nor does x[[i]] as {x[], x[], x[]} won't work in Solve.

Any quick thoughts?

Thank you.

• Closely related, perhaps duplicate?: (6623), (20160) – Mr.Wizard Feb 15 '17 at 15:13

Use Symbol to convert a string into a symbol...

Table[Symbol["$x" <> ToString@i], {i, 5}]  {$x1, $x2,$x3, $x4,$x5}

One word of caution. I tend to keep programmatically generated variables prepended with a $ to avoid any collisions with any other variables I might've defined. Just from experience. • Perfect! Thanks! – LBogaardt Nov 12 '13 at 16:49 • Unique can also be helpful. – ybeltukov Nov 12 '13 at 16:52 • I admit I also use leading $ for variable names but I think it is important to reminde people that this has the danger to conflict with Module local variable names, especially when they end -- as in this case -- with digits... – Albert Retey Nov 13 '13 at 13:36
• Is it possible to use this within a Control environment, in a Manipulate? I tried it, but it doesn't seem to work. Somehow Control[{{a1, 0, ""}, {1, 0}}] is not the same as Control[{{Symbol["\$a" <> ToString@1], 0, ""}, {1, 0}}]. Any idea how to fix this? – sam wolfe Mar 2 at 15:14

You almost have found a simple solution: try x[i] instead of x[[i]]

Solve[{x + x == 2, x - x == 1}, {x, x}]


{{x -> 3/2, x -> 1/2}}

List of this variables:

Array[x,2]


{x, x}

• So close :P Thanks! – LBogaardt Nov 12 '13 at 16:49
• I actually think that this is in a lot of cases the better solution: it is much easier to access these variables in a programmatic way and many functions as Solve, NDSolve,... do accept "nonatomic" variable names, so at least for them it isn't necessary to create those symbols programmatically... – Albert Retey Nov 13 '13 at 13:39

Or you could make a function to add a range of numbers to a predefined string("x")

f2 := Function[{i}, ToExpression["x" <> ToString[#]] & /@ Range[i]]

f2


{x1,x2,x3,x4,x5}

Or a function to add a range of numbers to any string

f3 := Function[{i, s}, ToExpression[s <> ToString[#]] & /@ Range[i]]

f3[5, "y"]


{y1,y2,y3,y4,y5}