Runge-Kutta method: Difference between revisions
Content added Content deleted
(Added XPL0 example.) |
mNo edit summary |
||
Line 3,725: | Line 3,725: | ||
y(9.0) = 451.56245928 Error: 4.07231581e-05 |
y(9.0) = 451.56245928 Error: 4.07231581e-05 |
||
y(10.0) = 675.99994902 Error: 5.09832864e-05</pre> |
y(10.0) = 675.99994902 Error: 5.09832864e-05</pre> |
||
=={{header|V (Vlang)}}== |
|||
{{trans|Ring}} |
|||
<syntaxhighlight lang="Zig"> |
|||
import math |
|||
fn main() { |
|||
mut t, mut k1, mut k2, mut k3, mut k4, mut y := 0.0, 0.0, 0.0, 0.0, 0.0, 1.0 |
|||
for i in 0..101 { |
|||
t = i / 10.0 |
|||
if t == math.floor(t) { |
|||
actual := math.pow((math.pow(t, 2) + 4), 2)/16 |
|||
println("y(${t:.0}) = ${y:.8f} error = ${(actual - y):.8f}") |
|||
} |
|||
k1 = t * math.sqrt(y) |
|||
k2 = (t + 0.05) * math.sqrt(y + 0.05 * k1) |
|||
k3 = (t + 0.05) * math.sqrt(y + 0.05 * k2) |
|||
k4 = (t + 0.10) * math.sqrt(y + 0.10 * k3) |
|||
y += 0.1 * (k1 + 2 * (k2 + k3) + k4) / 6 |
|||
} |
|||
} |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
y(0) = 1.00000000 error = 0.00000000 |
|||
y(1) = 1.56249985 error = 0.00000015 |
|||
y(2) = 3.99999908 error = 0.00000092 |
|||
y(3) = 10.56249709 error = 0.00000291 |
|||
y(4) = 24.99999377 error = 0.00000623 |
|||
y(5) = 52.56248918 error = 0.00001082 |
|||
y(6) = 99.99998341 error = 0.00001659 |
|||
y(7) = 175.56247648 error = 0.00002352 |
|||
y(8) = 288.99996843 error = 0.00003157 |
|||
y(9) = 451.56245928 error = 0.00004072 |
|||
y(10) = 675.99994902 error = 0.00005098 |
|||
</pre> |
|||
=={{header|Wren}}== |
=={{header|Wren}}== |