RosettaCodeData/Task/Runge-Kutta-method/APL/runge-kutta-method.apl

22 lines
626 B
APL
Raw Permalink Normal View History

2016-12-05 22:15:40 +01:00
RK4[]
[0] ZR( RK4)Y;T;YN;TN;∆T;∆Y1;∆Y2;∆Y3;∆Y4
[1] (T R ∆T)R
[2] LOOP:(RTN¯1T)/EXIT
[3] ∆Y1∆T×TN YN¯1Y
[4] ∆Y2∆T×(TN+∆T÷2) YN+∆Y1÷2
[5] ∆Y3∆T×(TN+∆T÷2) YN+∆Y2÷2
[6] ∆Y4∆T×(TN+∆T) YN+∆Y3
[7] YY,YN+(∆Y1+(2×∆Y2)+(2×∆Y3)+∆Y4)÷6
[8] TT,TN+∆T
[9] LOOP
[10] EXIT:ZT,[⎕IO+.5]Y
PRINT[]
[0] PRINT;TABLE
[1] TABLE0 10 .1({×*.5}RK4)1
[2] 'T' 'RK4 Y' 'ERROR'TABLE,TABLE[;2]-{((4+*2)*2)÷16}TABLE[;1]