I can not reproduce your timings.  The following is what I got:

EMA=:((2 % [:>: #) $: ])  : (4 :'(((x * [) +  (-.x) * ])/\.)&.|. y')
EMA1=:((<a:;1)&{)@:((([EMAIL PROTECTED] , (*/@[) + (1- [EMAIL PROTECTED]) * 
{:@])/\.)&.|.)@:,.
recur=:[ (] * [:+/\ [ % ]) [: */\ ]
EMA2=:([EMAIL PROTECTED] , [ * [EMAIL PROTECTED]) recur (1, (<:@[EMAIL 
PROTECTED]) $ [EMAIL PROTECTED])

   ts=: 6!:2 , 7!:[EMAIL PROTECTED]

   ts '0.1 EMA i.1e6'
3.74642 1.61362e8
   ts '0.1 EMA1 i.1e6'
4.75599 6.29162e7
   ts '0.1 EMA2 i.1e6'
2.41342 4.61384e7

EMA2 is faster, but not by a factor of 10.



----- Original Message -----
From: Xu Zuoqian <[EMAIL PROTECTED]>
Date: Saturday, March 8, 2008 20:34
Subject: Re: [Jprogramming] Is there a tacit version EMA?
To: Programming forum <[email protected]>

> Oh,Mike,your solution is so beautiful!
> 
> recur=:[ (] * [:+/\ [ % ]) [: */\ ]
> EMA2=:([EMAIL PROTECTED] , [ * [EMAIL PROTECTED]) recur (1, (<:@[EMAIL 
> PROTECTED]) $ [EMAIL PROTECTED])
> 
> (0.1&EMA -: 0.1&EMA2) p:i.10
> 1
> 
>     6!:2 '0.1&EMA i.1e6'
> 2.80876
> 
>     6!:2 '0.1&EMA1 i.1e6'
> 3.781998
> 
>     6!:2 '0.1&EMA2 i.1e6'
> 0.314285
> 
> 2008/3/9, Mike Powell <[EMAIL PROTECTED]>:
> > Xu,
> >
> >  Your EMA question is related to algorithms for linear 
> recurrence>  relations. There is a much loved algorithm 
> (probably because it's
> >  usually found to be lean and mean) that I first 
> encountered at IP
> >  Sharp in a newsletter quiz. We used it all over the place,
> >  particularly wherever a present value or discounted cash 
> flow was in
> >  play. Where it came from before that, I know not. It 
> goes like this.
> >
> >  If you have a linear recurrence relation of the form:
> >
> >  r[0] is m[0] times a[0]
> >  r[i] is a[i] + m[i] times r[i-
> 1]          (i >0)
> >
> >  then this can be calculated in vector languages in the 
> following way:
> >
> >  a recur m;t
> >  t is timesscan m
> >  r is t times plusscan a div t
> >
> >  I'd be most interested to see a J algorithm for this, 
> particularly a
> >  tacit one. I note that we have a reflexive piece (t) and 
> that there
> >  may be an opportunity for an inverse (* and %).
> >
> >  As far as the EMA is concerned, I suggest Xu's original 
> requirement is
> >  solved with:
> >
> >  (y[0] , k times 1 drop y) recur (length y) replicate 1 - k
> >
> >
> >  Mike Powell
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to