Runge-Kutta method: Difference between revisions
→{{header|J}}: improve documentation
(→{{header|J}}: edit alternative version for clarity) |
(→{{header|J}}: improve documentation) |
||
Line 304:
<lang j>NB.*rk4 a Solve function using Runge-Kutta method
NB. y is: y(ta) , ta , tb , tstep
NB. u is: function to solve
NB. eg: fyp rk4 1 0 10 0.1
rk4=: adverb define
Line 341 ⟶ 342:
The following solution replaces the for loop as well as the calculation of the increments (ks) with an accumulating suffix.
<lang j>
'Y0 a b h'=. 4{. y▼
T=. a + i.@>:&.(%&h) b-a▼
(,. [: h&(u nextY)@,/\. Y0 ,~ }.)&.|. T▼
)▼
NB. nextY a Calculate Yn+1 of a function using Runge-Kutta method
NB. y is: 2-item numeric list of time t and y(t)
NB. u is: function to use
NB. x is: step size
NB. eg: 0.001 fyp nextY 0 1
:
tableau=. 1 0.5 0.5, x * u y
ks=. (x * [: u y + (* x&,))/\. tableau
({:y) + 6 %~ +/ 1 2 2 1 * ks
▲)
▲rk4=: adverb define
▲ 'Y0 a b h'=. 4{. y
▲ T=. a + i.@>:&.(%&h) b-a
▲ (,. [: h&(u nextY)@,/\. Y0 ,~ }.)&.|. T
)</lang>
|