# sequence of functions

How do I define a sequence of functions in Sage?

I'd like to do something like

f(0)(a, b) = a * b
f(n)(a, b) = a + b * f(n-1)(a+b, a-b)


Such that when I use it, I could e.g. solve for x in

f(3)(x, x+1) = 1

edit retag close merge delete

Sort by ยป oldest newest most voted

instead of symbolic functions, you could just use a (recursive) Python function:

def f(n):
if n == 0:
return lambda a,b : a*b
else:
return lambda a,b : a + b * f(n-1)(a+b, a-b)


Then you can do:

sage: f(0)(2,3)
6
sage: f(3)(x, x+1)
(8*(2*x + 1)*(x + 1) + 1)*(x + 1) + x

sage: solve(f(3)(x, x+1)==1, x)
[x == -1/2*(1/288*sqrt(89)*sqrt(3) + 49/864)^(1/3)*(I*sqrt(3) + 1) - 1/144*(I*sqrt(3) - 1)/(1/288*sqrt(89)*sqrt(3) + 49/864)^(1/3) - 5/6, x == -1/2*(1/288*sqrt(89)*sqrt(3) + 49/864)^(1/3)*(-I*sqrt(3) + 1) + 1/144*(I*sqrt(3) + 1)/(1/288*sqrt(89)*sqrt(3) + 49/864)^(1/3) - 5/6, x == (1/288*sqrt(89)*sqrt(3) + 49/864)^(1/3) - 1/72/(1/288*sqrt(89)*sqrt(3) + 49/864)^(1/3) - 5/6]


For the latter, if you want algrbraic numbers, you can define x not to be just a symbol (leading to f(3)(x, x+1) being a symbolic expression) but a polynomial indeterminate:

sage: R.<x> = ZZ[]
sage: (f(3)(x, x+1)-1).roots() # no integrer root
[]
sage: (f(3)(x, x+1)-1).roots(QQbar) # 3 algebraic roots, each with multiplicity 1
[(-0.3779244420252417?, 1),
(-1.061037778987380? - 0.4440885163776650?*I, 1),
(-1.061037778987380? + 0.4440885163776650?*I, 1)]

more