If your V is defined a bit different you can use (the new) M. and get quite
a performance improvement.

V1=: ((>@:{.(V_ltk;V_gtk)>@:{:)@:V1@:<:)`
((b$~+/S<:k);(b$~16,~+/S>k)"0)@.(0=]) M.        NB. J602; line wrap!

   ts'V1 3000'
0.0011774627 4692672

much faster than

   ts'(>@:{.(V_ltk;V_gtk)>@:{:)^:3000 ((b$~+/S<:k);(b$~16,~+/S>k)"0)0'
0.37991681 57280

       (V1 3000)-:(>@:{.(V_ltk;V_gtk)>@:{:)^:3000
((b$~+/S<:k);(b$~16,~+/S>k)"0)0         NB. line wrap!
1

The stack problem also disappeared!

   ts'V 3000'
|stack error: V
|       V 3000

It seems M. changes performance programming drastically.


R.E. Boss



> -----Oorspronkelijk bericht-----
> Van: [EMAIL PROTECTED] [mailto:programming-
> [EMAIL PROTECTED] Namens Alistair Tucker
> Verzonden: dinsdag 11 september 2007 15:24
> Aan: Programming forum
> Onderwerp: Re: [Jprogramming] stack overflow
> 
> I think that's it!  Fantastic, thank you.
> I'm not getting any stack overflows at all with this method :) even for
> much longer time periods.
> Alistair
> 
> ----- Original Message ----
> From: R.E. Boss <[EMAIL PROTECTED]>
> To: Programming forum <[email protected]>
> Sent: Tuesday, 11 September, 2007 1:47:51 PM
> Subject: RE: [Jprogramming] stack overflow
> 
> IMO, your V is defined by:
> 
> V=: 3 : 0
> if.y=0 do. ((b$~+/S<:k);(b$~16,~+/S>k)"0) 0
> else. (>@:{.(V_ltk;V_gtk)>@:{:)@:V@:<:
> end.
> )
> 
> But this is equivalent to
> 
> V1=: 3 : 0
> (>@:{.(V_ltk;V_gtk)>@:{:)^:y ((b$~+/S<:k);(b$~16,~+/S>k)"0)0
> )
> 
> as is shown by:
>    (V 1000)-:(>@:{.(V_ltk;V_gtk)>@:{:)^:1000
> ((b$~+/S<:k);(b$~16,~+/S>k)"0)0
> 1
>    (V 2000)-:(>@:{.(V_ltk;V_gtk)>@:{:)^:2000
> ((b$~+/S<:k);(b$~16,~+/S>k)"0)0
> 1
> 
>    ts'V 2000'
> 0.28364355 587648
>    ts'(>@:{.(V_ltk;V_gtk)>@:{:)^:2000 ((b$~+/S<:k);(b$~16,~+/S>k)"0)0'
> 0.2691088 57280
> 
>    a little faster, but look at higher values of y:
> 
>    ts'(>@:{.(V_ltk;V_gtk)>@:{:)^:3000 ((b$~+/S<:k);(b$~16,~+/S>k)"0)0'
> 0.40596979 57280
> 
>    ts'V 3000'
> |stack error: V
> |       V 3000
> 
> 
> Hope this helps.
> 
> 
> R.E. Boss
> 
> 
> 
> > -----Oorspronkelijk bericht-----
> > Van: [EMAIL PROTECTED] [mailto:programming-
> > [EMAIL PROTECTED] Namens Alistair Tucker
> > Verzonden: dinsdag 11 september 2007 14:19
> > Aan: Programming forum
> > Onderwerp: Re: [Jprogramming] stack overflow
> >
> > Yes that's right, the argument for V is the iteration count.
> > So V 2496 translates to about 1.4 years.
> > The step size dt *is* very small to satisfy convergence criteria
> (actually
> > it maybe should be even smaller).
> > I could have a larger dt if I were to implement the finite difference
> > scheme implicitly rather than explicitly.
> > But that's quite a bit more work which I'd like to avoid if possible!
> > So if there's some way to get around this limitation in J, I'd be very
> > pleased to hear it...
> > Alistair
> >
> >
> > ----- Original Message ----
> > From: Devon McCormick <[EMAIL PROTECTED]>
> > To: Programming forum <[email protected]>
> > Sent: Tuesday, 11 September, 2007 12:36:49 PM
> > Subject: Re: [Jprogramming] stack overflow
> >
> > I see that it looks like an iteration count.  It fails for me thusly:
> >
> >    6!:2 'rr=. V 2496'
> > 0.50126902
> >    6!:2 'rr=. V 2497'
> > |stack error: Gamma
> > | rr=. V 2497
> >
> >
> > On 9/11/07, Devon McCormick <[EMAIL PROTECTED]> wrote:
> > >
> > > What does an argument to "V" look like?
> > >
> > > On 9/11/07, Alistair Tucker <[EMAIL PROTECTED] > wrote:
> > > >
> > > > Hi
> > > > I'm a little disconcerted to find that I'm getting stack overflows
> for
> > > > more than two thousand iterations of my recursive function.
> > > > This is a problem.  As it stands, my program (below) is unable to
> > price
> > > > a convertible bond with more than about a year to maturity.
> > > > Is there some way round this?  Perhaps I should be implementing the
> > > > iteration in some other way?
> > > > Alistair
> > > >
> > > > NAS=: 100
> > > > dS=: 2
> > > > S=: dS*i.NAS
> > > > k=: 135
> > > > r=: 0.05
> > > > b=: 113.22
> > > > dL=: %365
> > > > sigma=: 0.4
> > > > dt=: 0.9%*:sigma*NAS
> > > >
> > > > Sgtk=: S#~S>k
> > > > Sltk=: S#~S<:k
> > > >
> > > > Delta=: (2*dS)%~2&}.-_2&}.
> > > > Gamma=: (*:dS)%~2&}.+_2&}.-2*}.@:}:
> > > > dV_dL=: dL%~}."_1-}:"_1
> > > >
> > > > negTheta_ltk=: ([:-r*{.@:[),(((r*}.Sltk)*Delta)+( 0.5**:sigma*
> > > > }.Sltk)*Gamma)@:([,{.@:{.@:])-r*}.@:[
> > > >
> > > > step_gtk=: ((}:@:]+dt*(((r*}:Sgtk)*Delta)+(0.5**:sigma*
> > > > }:Sgtk)*Gamma)@:({:@:[,])-r*}:@:])(}:"_1@:]))+(dt*dV_dL@:}:@:])
> > > >
> > > > V_ltk=: Sltk>.[+dt*negTheta_ltk
> > > > V_gtk=: (Sgtk>.b,.~],({.-~2*{:)@:(_2&{.))@:step_gtk
> > > >
> > > > Vrec=: (>@:{.(V_ltk;V_gtk)>@:{:)@:V@:<:
> > > > V=: Vrec`((b$~+/S<:k);(b$~16,~+/S>k)"0)@.(0=])
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >       ___________________________________________________________
> > > > Want ideas for reducing your carbon footprint? Visit Yahoo! For Good
> > > > http://uk.promotions.yahoo.com/forgood/environment.html
> > > > --------------------------------------------------------------------
> --
> > > > For information about J forums see
> http://www.jsoftware.com/forums.htm
> > > >
> > >
> > >
> > >
> > > --
> > > Devon McCormick, CFA
> > > ^me^ at acm.
> > > org is my
> > > preferred e-mail
> >
> >
> >
> >
> > --
> > Devon McCormick, CFA
> > ^me^ at acm.
> > org is my
> > preferred e-mail
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> >
> >
> >
> >
> >
> >
> >
> >       ___________________________________________________________
> > Yahoo! Answers - Got a question? Someone out there knows the answer. Try
> > it
> > now.
> > http://uk.answers.yahoo.com/
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> 
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
> 
> 
> 
> 
> 
> 
> 
>       ___________________________________________________________
> Want ideas for reducing your carbon footprint? Visit Yahoo! For Good
> http://uk.promotions.yahoo.com/forgood/environment.html
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to