It looks like an error. For C[1][x][y]
to make sense C[1][x]
must represent a single-variable function (and C[1]
should represent a function that produces a function). However, in the solution returned by DSolve
, C[1]
has to have a different meaning in the first term. Probably the second two parameters should be C[2]
and C[3]
. Another point of confusion is that in classical math, C[1][x][y]
would automatically be uncurried to form C[1][x, y]
. See also Curry
.
We can see that the more general expression with three functions C[1], C[2], C[3]
is a solution:
D[u3[x1, x2, x3], x1, x2, x2] == D[u3[x1, x2, x3], x1, x2, x3] /.
{u3 -> Function[{x1, x2, x3},
C[1][x2, x3] + x1 C[3][x1][x3] + x1 C[2][x1][x2 + x3]]}
(* True *)
The uncurried form is also a solution:
D[u3[x1, x2, x3], x1, x2, x2] == D[u3[x1, x2, x3], x1, x2, x3] /.
{u3 -> Function[{x1, x2, x3},
C[1][x2, x3] + x1 C[3][x1, x3] + x1 C[2][x1, x2 + x3]]}
(* True *)
Speculation: Probably the parameter generator checks the heads for unique C[n]
expressions, but the head of C[1][x1][x3]
is C[1][x1]
and doesn't match C[1]
. One can see that the order of creation with the following:
Trace[
DSolve[D[u3[x1, x2, x3], x1, x2, x2] ==
D[u3[x1, x2, x3], x1, x2, x3], u3, {x1, x2, x3}],
C[_][__],
TraceInternal -> True]
Remark: Note that DSolve
gives an unexplainable error (without examining internals):
Last::nolast: {} has zero length and no last element.