# How can I recurse a power series in two variables?

I would like very much to express, for example,

R.<x, y> = PowerSeriesRing(QQ, default_prec = 20)
g(x, g(x, g(x, x)))


Or,

f(x, f(x, f(x, f(x, f(x, f(x, f(x, f(x, f(x, f(x, f(x, f(x, (f(x, (f(x, f(x,y))))))))))))))))).expand()


In a more elegant way, for a specified number of self-compositions in one variable. I have only been able to find the sage function of composition for one variable polynomials, not for nesting two variable power series.

edit retag close merge delete

Could you provide a definition of f and g that one could use to explore your question?

( 2017-12-06 08:29:35 +0200 )edit

Note: with R as in the question, R.random_element() gave a starting point for exploration.

( 2017-12-08 16:03:27 +0200 )edit

In general though, providing a working example helps other Ask Sage users to explore a question. This question had g(x, g(x, g(x, x))) but no definition of g to make that work.

( 2017-12-08 16:06:39 +0200 )edit

Sort by » oldest newest most voted

Defining a function would give you a nice syntax for this kind of iteration.

For example, let us define right_iterate as follows.

def right_iterate(n, g):
x, y = g.parent().gens()
gg = y
for k in xrange(n):
gg = g(x, gg)
return gg


Suppose we defined

sage: g = x*y^3 + x^3*y^11 - 1/21*x^11*y^5 - 2/5*x^3*y^13 + O(x, y)^60


sage: g(x, g(x, g(x, y)))
x^13*y^27 + 9*x^15*y^35 - 3/7*x^23*y^29 - 18/5*x^15*y^37 - 1/7*x^25*y^33 + O(x, y)^60


one can write

sage: right_iterate(3, g)
x^13*y^27 + 9*x^15*y^35 - 3/7*x^23*y^29 - 18/5*x^15*y^37 - 1/7*x^25*y^33 + O(x, y)^60


sage: g(x, g(x, g(x, x)))
x^40 + 9*x^50 - 141/35*x^52 - 1/7*x^58 + O(x, y)^60


one can write

sage: right_iterate(3, g)(x, x)
x^40 + 9*x^50 - 141/35*x^52 - 1/7*x^58 + O(x, y)^60


Of course, you could modify the function to directly use (x, x) if you always want that.

more