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.
Answer
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
Comments
Post a Comment