5
$\begingroup$

I am trying to apply a series expansion on a function x[t1, t2,...tn], with an expansion parameter a. For n = 2, the function is x[t1, t2], and this is my series expansion:

solRule2 = x -> (Sum[a^i Subscript[x, i][#1, #2], {i, 0, 2}] &);
x[t1, t2] /. solRule2

The result is given correctly as

Subscript[x, 0][t1, t2] + a Subscript[x, 1][t1, t2] + a^2 Subscript[x, 2][t1, t2]

This works also with derivatives, and this matters to me:

(x^(2,0))[t1,t2]/. solRule2

(Subscript[x, 0]^(2, 0))[t1, t2] + a (Subscript[x, 1]^(2,0))[t1, t2] + a^2 (Subscript[x, 2]^(2, 0))[t1, t2]

Now, I can manually extend the rule to n = 3,

solRule3 = x -> (Sum[a^i Subscript[x, i][#1, #2, #3], {i, 0, 3}] &);

but what I want to do is to extend it to the generic n. I tried this

solRuleN = x -> (Sum[a^i Subscript[x, i][##], {i, 0, Length[{##}]}] &);

This works well with the function x[t1,t2] and in general with x[t1,t2, ..., tn], but it fails with the derivatives:

(x^(1, 1))[t1, t2]/.solRuleN

gives output 0. I don't understand why this happens.

$\endgroup$
1

1 Answer 1

3
$\begingroup$

The problem boils down to the fact that

Derivative[1][f[##] &]

0 &

Which is, in my opinion unexpected. More in: Derivative of a pure function with SlotSequence


The fix is to inject a sequence of Slots (#1, #2...) of length equal to the number of arguments our function accepts:

series[n__] := With[{
    l = Length[{n}],
    slots = Array[Slot, Length[{n}]]
  },
  Sum[a^i Subscript[x, i] @@ slots, {i, 0, l}] &
]

solRuleN = {
   x[t__] :> series[t],
   Derivative[n__][x] :> Derivative[n][series[n]]
}; 


Derivative[1, 1, 1][x][t1, t2, t3] /. solRuleN
(Subscript[x, 0]^(1,1,1))[t1,t2,t3]+a (Subscript[x, 1]^(1,1,1))[t1,t2,t3]+a^2 (Subscript[x, 2]^(1,1,1))[t1,t2,t3]+a^3 (Subscript[x, 3]^(1,1,1))[t1,t2,t3]
$\endgroup$
1
  • 1
    $\begingroup$ slightly more concise: series[n__] := Length[{n}] /. l_ :> (Array[Slot, l] /. slots_ :> (Sum[a^i Subscript[x, i] @@ slots, {i, 0, l}] &)) $\endgroup$
    – Mr.Wizard
    Jul 30, 2017 at 14:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.