On Sat, Sep 19, 2009 at 9:26 PM, Craig Citro <[email protected]> wrote:
>
>> Is it possible to compose/iterate functions in sage by a functional way
>> without any loop for or while.
>>
>
> Why don't you want to use a loop? I think it's the most natural way to
> do this in Python.
>
>> When I used mupad I could get the u(100) term of this sequence by :
>>
>> (sin@@100) (1) # u(0)=1 and u(n+1)=sin (u(n))
>>
>
> There's no default syntax for doing this kind of thing, but you could
> always add a function that does it. This isn't perfect, but it does
> what you want in one line:
>
> reduce(lambda x,y: y(x), [sin for _ in xrange(100)], 1)

This is equivalent to the cleaner and more concise:

sage: reduce(lambda x,y: y(x), [sin]*100, 1)

 -- William

>
> Of course, it's going to return something symbolic: you could use the
> .n() method to get an approximation. Or apply it to something inexact.
>
> sage: reduce(lambda x,y: y(x), [sin for _ in xrange(100)], 1)
> sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(1))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
>
> sage: reduce(lambda x,y: y(x), [sin for _ in xrange(100)], 1).n()
> 0.168852488727981
>
> sage: reduce(lambda x,y: y(x), [sin for _ in xrange(100)], 1.0)
> 0.168852488727981
>
> Of course, I really don't think any of those (including the mupad
> example) is nearly as clear as
>
> sage: x = 1
> sage: for _ in xrange(100):
>   ....:     x = sin(x)
>   ....:
> sage: x
> sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(1))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
> sage: x.n()
> 0.168852488727981
>
> A nicer fix would be to create a new class for recurrence relations --
> so you could do something like this:
>
> sage: my_sequence = RecurrenceRelation(relation=lambda previous_term:
> sin(previous_term), initial_value=1)
> sage: my_sequence[100]
> sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(1))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
> sage: my_sequence[100].n()
> 0.168852488727981
>
> -cc
>
> >
>



-- 
William Stein
Associate Professor of Mathematics
University of Washington
http://wstein.org

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to