Observation:  the following variant of Ric's contribution gains in speed 
by using a one-line 'pseudo fold' for the loop calculations.

Here are the timings:

    ts@(,&' args')&> 'fyp rk4';'fyp rk42' [args=. 1 0 10 0.001
0.551397 527936
0.449719 527936

rk42 is almost as fast (?) as my rk4M.

mind line wrapping

rk42=: 1 :0
Y=.Yt=.{. 'Y0 a b h'=. 4{. y
T=. a + i.@>:&.(%&h) b - a
for_t. }: T do.
   Y=.Y,Yt=.Yt+6%~+/1 2 2 1*k1,k2,k3,k4=.h*u ty+h,k3=.h*u ty+-:h,k2=.h*u 
ty+-:h,k1=.h*u ty=.t,Yt
end.
T ,. Y
)



On 10-05-12 22:52, Ric Sherlock wrote:
> Yes thanks for this. I wasn't especially happy with the existing
> solution. I agree with Raul that it would be nicer to be consistent
> with the definition style.
> I'll try to have a go over the weekend but if it is possible to break
> either of those long lines up into more recognizable (to non tacit J
> users) chunks. I think that would be worthwhile.
>
> On Fri, May 11, 2012 at 8:12 AM, Raul Miller<rauldmil...@gmail.com>  wrote:
>> On Thu, May 10, 2012 at 1:46 PM, Aai<agroeneveld...@gmail.com>  wrote:
>>> The J contribution on Rosetta Code
>>> http://rosettacode.org/wiki/Runge-Kutta_method#J  for subject is a loopy
>>> one. My goal is to change that into a more functional and J-ish one.
>>>
>>> Here's my attempt for that particular task:
>>>
>>> p4=: 1 :(':';'({:y)+6%~+/1 2 2 1*(x*[: u y+(*x&,@{:))/\.1 0.5 0.5,x*u y')
>>>
>>> rk4M=: 1 :0
>>>   'Y0 a b h'=. 4{. y
>>>   (,.[:h&(u p4)@(,{:)/\.Y0,~}.)&.|. a+i.@>:&.(%&h) b-a
>>> )
>>>
>>>     (fyp rk4 -: fyp rk4M) 1 0 10 0.001
>>> 1
>> As a minor point, I think I would change the definition of p4
>> to use the same definition format as rk4M
>>
>> p4=: 1 :0
>> :
>>   ({:y)+6%~+/1 2 2 1*(x*[: u y+(*x&,@{:))/\.1 0.5 0.5,x*u y
>> )
>>
>> But I do not have the time to focus on this one.
>>
>> I hope I'm not overlooking anything important.
>> (I wonder if the parenthesized expressions deserve names?)
>>
>> Thanks for tackling this!
>>
>> --
>> Raul
>> ----------------------------------------------------------------------
>> For information about J forums seehttp://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums seehttp://www.jsoftware.com/forums.htm

-- 
Met vriendelijke groet,
@@i = Arie Groeneveld

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

Reply via email to