HP Prime and TI-84 Plus:
Runge Kutta 4th Order
The Runge Kutta 4th Order is a method for
solving differential equations involving the form: dy/dx = f(x,y), where:
x_n+1 = x_n + h
y_n+1 = y_n + (k1 + 2*k2 + 2*k3 + k4)/6
Where:
k1 = h * f(x_n, y_n)
k2 = h * f(x_n + h/2, y_n + k1/2)
k3 = h * f(x_n + h/2, y_n + k2/2)
k4 = h * f(x_n + h, y_n + k3)
Variables used:
y_n+1 = y_n + (k1 + 2*k2 + 2*k3 + k4)/6
Where:
k1 = h * f(x_n, y_n)
k2 = h * f(x_n + h/2, y_n + k1/2)
k3 = h * f(x_n + h/2, y_n + k2/2)
k4 = h * f(x_n + h, y_n + k3)
Variables used:
A = x_n
B = y_n
C = x_n+1
D = y_n+1
H = step
K = k1
L = k2
M = k3
N = k4
Results are stored in lists L1 and L2. L1 represents the x coordinates, L2
represents the y coordinates.
This adopts the RK4 method that I programmed for the
Casio fx-5800p, which you can see here: http://edspi31415.blogspot.com/2015/01/fx-5800p-runge-kutta-4th-order-method.html
The screen shots show the example dy/dx = x^2 + y^2/3,
with initial conditions y(0) = 1. 10
steps are plotted with step size 0.1.
HP Prime: DIFFTBL
and RK4
Both DIFFTBL and RK4 return the same output. The difference is that DIFFTBL uses an Input
box and no-pass through arguments and RK4 uses five pass-through
arguments. This way, RK4 could be used
as a subroutine.
Both return the results in a matrix, M1. Rev. 7820 firmware is used.
DIFFTBL:
EXPORT DIFFTBL()
BEGIN
//
EWS 2015-05-29
//
Radian
HAngle:=0;
//
Input
LOCAL
f;
INPUT({{f,[8]},A,B,H,S},"Data
Input",
{"dy/dx=","x0=","y0=","Step=",
"#
Steps="});
L1:={A};
L2:={B};
//
Main Loop
FOR
I FROM 1 TO S DO
//
k1
X:=A;
Y:=B;
K:=H*EVAL(f);
//
k2
X:=A+H/2;
Y:=B+K/2;
L:=H*EVAL(f);
//
k3
Y:=B+L/2;
M:=H*EVAL(f);
//
k4
X:=A+H;
Y:=B+M;
N:=H*EVAL(f);
//
point
A:=A+H;
B:=B+(K+2*L+2*M+N)/6;
L1:=CONCAT(L1,{A});
L2:=CONCAT(L2,{B});
END;
M1:=list2mat(CONCAT(L1,L2),
SIZE(L1));
M1:=TRN(M1);
RETURN
M1;
END;
RK4:
EXPORT RK4(f,A,B,H,S)
BEGIN
// EWS 2015-05-29
// Radian
HAngle:=0;
// Input
L1:={A}; L2:={B};
// Main Loop
FOR I FROM 1 TO S DO
// k1
X:=A;
Y:=B;
K:=H*EVAL(f);
// k2
X:=A+H/2;
Y:=B+K/2;
L:=H*EVAL(f);
// k3
Y:=B+L/2;
M:=H*EVAL(f);
// k4
X:=A+H;
Y:=B+M;
N:=H*EVAL(f);
// point
A:=A+H;
B:=B+(K+2*L+2*M+N)/6;
L1:=CONCAT(L1,{A});
L2:=CONCAT(L2,{B});
END;
M1:=list2mat(CONCAT(L1,L2),
SIZE(L1));
M1:=TRN(M1);
RETURN M1;
END;
TI-84 Plus:
DIFFPLOT
DIFFPLOT plots the results in a statistics xy-plot. The equation variable Y0 is used, but
subsequently deleted. I left out any
color commands to make this easily adoptable for both the monochrome and color
TI-84 Plus calculators.
Do not forget to enclose dy/dx in quotes, unless an input
error occurs
Radian:FnOff :PlotsOff
Disp "DIFF. EQUATION"
Disp "Y₀=DY/DX"
Disp "USE QUOTES"
Input Y₀
Input "X0=",A
Input "Y0=",B
Input "STEP=",H
Input "NO. STEPS=",S
{A}→L₁
{B}→L₂
For(I,1,S)
A→X:B→Y
H*Y₀→K
A+H/2→X:B+K/2→Y
H*Y₀→L
B+L/2→Y
H*Y₀→M
A+H→X:B+M→Y
H*Y₀→N
A+H→A
B+(K+2*L+2*M+N)/6→B
augment(L₁,{A})→L₁
augment(L₂,{B})→L₂
End
FnOff 0
PlotsOn 1
Plot1(xyLine,L₁,L₂)
ZoomStat
This blog is property of Edward Shore. 2015.