MathGroup Archive 2006

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

Search the Archive

RE: Functional decomposition (solving f[f[x]] = g[x] for given g)

  • To: mathgroup at
  • Subject: [mg71839] RE: [mg71764] Functional decomposition (solving f[f[x]] = g[x] for given g)
  • From: "Ingolf Dahl" <ingolf.dahl at>
  • Date: Thu, 30 Nov 2006 06:05:45 -0500 (EST)
  • Reply-to: <ingolf.dahl at>

Hi Kelly,
Here is a rapid amateur answer (but without scary rhymes, as in my last
answer). If you are satisfied with the numerical values of the function, you
can investigate 


f[x_Real] appears to be a good solution to f[f[x]] == g[x] to approximate
machine precision. The solution is based on two observations:
1) Nest[g,x,9] is equivalent to Nest[f,x,18], and we reach very large values
when this is calculated. There g[x] is approximately equal to x^2 (to
machine precision), and f[x] can be approximated by x^Sqrt[2]. Thus we might
reach a good approximation of Nest[f,x,19] by Power[Nest[g,x,9],Sqrt[2]].
2) We can then apply the inverse function ginv of g 9 times to reach f[x].
The relative error is reduced by the application of the inverse function.

We can note that f[0.] is 0.6420945043908285` which do not appear to be a
known mathematical constant. But now it is. (If someone can check... I
cannot reach the "The Inverse Symbolic Calculator" at CESM. Is it down?)

Generalize and write  f[x] as  DecompositionPower[x,1/2] and the solution to
f[f[f[x]]]\[Equal]g[x] as DecompositionPower[x,1/3] For the given function g
then we can try


and we might for instance plot


The function DecompositionPower[x_,p_] should be quite easy to generalize to
a large set of polynomial functions g. Maybe it then should have the name

Best regards

Ingolf Dahl

-----Original Message-----
From: Kelly Jones [mailto:kelly.terry.jones at] 
Sent: 28 November 2006 12:04
To: mathgroup at
Subject: [mg71839] [mg71764] Functional decomposition (solving f[f[x]] = g[x] for
given g)

Given a function g[x], is there a standard methodology to find a
function f[x] such that:

f[f[x]] == g[x]

A "simple" example (that doesn't appear to have a closed form solution):

f[f[x]] == x^2+1

There are probably several (approximable? power-series-expressible?)
answers, but the most natural answer would be everywhere positive and
monotone increasing for x>0.

For x^2, there are at least two continuous solutions: x^Sqrt[2] and
x^-Sqrt[2], the former being more "natural". It's somewhat amazing
that x^2+1 is so much harder.

Of course, the next step would be to find f[x] such that:

f[f[f[x]]] == g[x]

for given g[x], and so on.

Thought: is there any operator that converts functional composition to
multiplication or something similar? That would reduce this problem to
find nth roots and applying the inverse operator?

Other thought: For some reason, taking the geometric average of the
identity function and g, and then iterating, seems like a good
idea. EG, Sqrt[x*g[x]], Sqrt[x*Sqrt[x*g[x]]], and so on.

We're just a Bunch Of Regular Guys, a collective group that's trying
to understand and assimilate technology. We feel that resistance to
new ideas and technology is unwise and ultimately futile.

  • Prev by Date: Re: funny question
  • Next by Date: subscript question
  • Previous by thread: Re: Functional decomposition (solving f[f[x]] = g[x] for given g)
  • Next by thread: Using Select within Map