MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Separating functions


I have a problem in identification.  In the middle of the solution of a wave propagation problem on a regular lattice using a separation-of-variables method, I get a function of the form

               F(x,y,t)= f(x,y) g(t)

in which x,y are space coordinates and t is time. Both can be very complicated and vary from problem to problem, but Mathematica' Simplify is able to factor them. Here is a fairly trivial 1D example with an F output by //InputForm:

      Bx*(-5*Em - 3*Em*=CE=BD + 2*a^2*=CF=81*=CF=89^2 - 2*a^2*=CE=BD^2*=CF=81*=CF=89^2 + 4*Em*(1 + =CE=BD)*Cos[(a*kx)/
          Sqrt[2]] - Em*(-1 + =CE=BD)*Cos[Sqrt[2]*a*kx])*(Cos[t*=CF=89] - I*Sin[t*=CF=89]))/(2*c0^2*(-1 + =CE=BD^2)*=CF=81)

Here g(t)=(Cos[t*=CF=89] - I*Sin[t*=CF=89])). For more complicated 2D cases, F(x,y,t) becomes a array of product functions, each taking 20-30 lines.

Question: is there a way to separate  f(x,y) and g(t) that does not require external intervention?


Hi, Carlos,

Your function does not seem to be a Mathematica expression. For this reason I just invent a function as an example. Assume here is your function:

F[x, y, t] = (Sin[x + y] + Exp[x*y])*(x + y)/(x^2*y^3)*
  Sin[t]*(1 + Exp[Cos[t]])

((1 + E^Cos[t]) (x + y) Sin[t] (E^(x y) + Sin[x + y]))/(x^2 y^3)

Let us first transform it into a list:

List @@ F[x, y, t]

{1 + E^Cos[t], 1/x^2, 1/y^3, x + y, Sin[t], E^(x y) + Sin[x + y]}

This list inevitably contains terms either dependent upon t or upon x and y. If one calculates its derivative with respect to t, he will receive zeros on those places, where any function of x and y stays:

D[List @@ F[x, y, t], t]

{-E^Cos[t] Sin[t], 0, 0, 0, Cos[t], 0}

Than we can get their positions:

Position[D[List @@ F[x, y, t], x], 0]

{{1}, {3}, {5}}

If we collect the terms from those positions we end up with the terms dependent only upon x and y, but not t. Let us collect everything together:

ff = Fold[Times, 1,
  Take[List @@ F[x, y, t], #] & /@
    Position[D[List @@ F[x, y, t], t], 0] // Flatten]

((x + y) (E^(x y) + Sin[x + y]))/(x^2 y^3)

This is your function f[x,y]. To het g[t] just divide:

F[x, y, t]/ff

(1 + E^Cos[t]) Sin[t]

This is g.

Have fun, Alexei

Alexei BOULBITCH, Dr., habil.
ZAE Weiergewan,
11, rue Edmond Reuter,
L-5326 Contern, LUXEMBOURG

Office phone :  +352-2454-2566
Office fax:       +352-2454-3566
mobile phone:  +49 151 52 40 66 44

e-mail: alexei.boulbitch at

  • Prev by Date: Re: Filling between lines in ListPlot not working
  • Next by Date: Tensor product of Matrices
  • Previous by thread: Re: Separating functions
  • Next by thread: Heat kernel on a mobius band in a closed form