Runge-Kutta method: Difference between revisions

Content deleted Content added
Grondilu (talk | contribs)
Grondilu (talk | contribs)
→‎{{header|Perl 6}}: clearer version
Line 562:
{{trans|Perl}}
 
<lang perl6>sub runge-kutta(&yp, \δt) {
return -> \t, \y, \δt {
t + δt, y + 6 R/ [+] <1my 2$a 2= 1>δt Z* yp( t, y );
my $b = δt * yp( t + δt/2, y + $a/2 );
map {
(state $δy = 0) my $c = δt * yp( t + $_ * δt/2, y + $_b/2 * $δy);
my $d = δt * yp( t + δt, y + $c );
}, <0 .5 .5 1>;
($a + 2*($b + $c) + $d) / 6;
}
}
 
constant δt = .1;
my &RK = runge-kutta { $^t * sqrt($^y) }, .1;
 
loop ( my ($t, $y) = (0, 1); $t <= 10; ($t, $y) = RK($t, $y)) {
loop (
printf "y(%2d) = %12f ± %e\n", $t, $y, abs($y - ($t**2 + 4)**2 / 16)
my ($t, $y) = (0, 1);
$t <= 10;
loop ( my ($t, $y) = (0, 1); $t <=+ 10; ($tδt, $y) =+ RK($t, $y, δt)) {
) {
printf "y(%2d) =  %12f ±  %e\n", $t, $y, abs($y - ($t**2 + 4)**2 / 16)
if $t == $t.Int;
}</lang>