## Proper use of arbitrary number of variables

10

2

So, I'm working on a project where the number of independent variables is not fixed.

Consider a problem of $N$ independent variables, $\boldsymbol{r}$.

I want to perform different things with them. Amongst them, I want to consider (multidimensional) integration, etc.

## Variables definition

My first question regarding this topic, is the definition of the variables to perform algebraic manipulation. My first though was to use

variables[N_]:=Table[x[i],{i,1,N}]


However, in some situations, (e.g. with Block), I cannot use these variables as I use x1,x2,.... e.g.

Block[{x[1]=2},x[1]^2]


gives an error.

(my current naive solution is to use):

variables[N_] := Table[ToExpression["x" <> ToString[i]], {i, 1, N}];


Is there any more standard solution?

### Sums, integrals

This question also holds for the problem of computing integrals for arbitrary dimensions.

How can I tell Mathematica to compute

Integrate[f[{r1,r2,...,rn}], {r1, 0, 1}, {r2, 0, g[r1]},...,{rN, 0, h[{r1,r2,...,"rN-1"}]}]


Most of the times I will be interested in numerically compute the integral, but nevertheless, how do I tell Mathematica? I tried the simple "naive"

Integrate[1, Table[{i, 0, 1}, {i, variables[3]}]]


but it gives an error.

2Try Integrate[1, Sequence @@ Table[{i, 0, 1}, {i, variables[3]}]]. – b.gates.you.know.what – 2013-02-25T10:53:13.743

1You can use something like Table[Unique["x"], {5}] to create variables. – Silvia – 2013-02-25T11:06:50.933

You might find some useful ideas in this previous question and its answers. Also, in this one.

– m_goldberg – 2013-02-25T11:57:11.513

Thank you all for the suggestions. @b.gatessucks: The Sequence works for Integrals, but not for sums. – Jorge Leitao – 2013-02-25T18:08:08.553

@J.C.Leitão: dump: because it has an holdall attribute – Jorge Leitao – 2013-02-25T18:09:48.693

7

You might use:

variables[n_, sym_String: "x"] := Unique @ Table[sym, {n}]

variables[5]

variables[5]

variables[3, "Q"]

{x1, x2, x3, x4, x5}

{x6, x7, x8, x9, x10}

{Q1, Q2, Q3}


Note the difference on the second call.

For work in Sum et al. you can leverage the fact that a plain Function evaluates its arguments:

vars = variables[7, "z"];

Sum[Multinomial @@ vars, ##] & @@ ({#, 0, 1} & /@ vars)

13700