Runge-Kutta method: Difference between revisions

Added Wren
(Added Wren)
Line 3,291:
y(9.0) = 451.56245928 Error: 4.07231581e-05
y(10.0) = 675.99994902 Error: 5.09832864e-05</pre>
 
=={{header|Wren}}==
{{trans|Kotlin}}
{{libheader|Wren-fmt}}
<lang ecmascript>import "/fmt" for Fmt
 
var rungeKutta4 = Fn.new { |t0, tz, dt, y, yd|
var tn = t0
var yn = y.call(tn)
var z = ((tz - t0)/dt).truncate
for (i in 0..z) {
if (i % 10 == 0) {
var exact = y.call(tn)
var error = yn - exact
Fmt.print("$4.1f $10f $10f $9f", tn, yn, exact, error)
}
if (i == z) break
var dy1 = dt * yd.call(tn, yn)
var dy2 = dt * yd.call(tn + 0.5 * dt, yn + 0.5 * dy1)
var dy3 = dt * yd.call(tn + 0.5 * dt, yn + 0.5 * dy2)
var dy4 = dt * yd.call(tn + dt, yn + dy3)
yn = yn + (dy1 + 2.0 * dy2 + 2.0 * dy3 + dy4) / 6.0
tn = tn + dt
}
}
 
System.print(" T RK4 Exact Error")
System.print("---- --------- ---------- ---------")
var y = Fn.new { |t|
var x = t * t + 4.0
return x * x / 16.0
}
var yd = Fn.new { |t, yt| t * yt.sqrt }
rungeKutta4.call(0, 10, 0.1, y, yd)</lang>
 
{{out}}
<pre>
T RK4 Exact Error
---- --------- ---------- ---------
0.0 1.000000 1.000000 0.000000
1.0 1.562500 1.562500 -0.000000
2.0 3.999999 4.000000 -0.000001
3.0 10.562497 10.562500 -0.000003
4.0 24.999994 25.000000 -0.000006
5.0 52.562489 52.562500 -0.000011
6.0 99.999983 100.000000 -0.000017
7.0 175.562476 175.562500 -0.000024
8.0 288.999968 289.000000 -0.000032
9.0 451.562459 451.562500 -0.000041
10.0 675.999949 676.000000 -0.000051
</pre>
 
=={{header|zkl}}==
9,482

edits