Runge-Kutta method: Difference between revisions

m
→‎{{header|C++}}: minor stylistic changes
(→‎{{header|C++}}: simplifying integer test, using ceilf)
m (→‎{{header|C++}}: minor stylistic changes)
Line 416:
# include <iostream>
# include <math.h>
# include <limits>
auto rk4(double f(double, double))
{
return [f](double t, double y, double dt) -> double {
double dy1 { dt * f( t , y ) },
dy2 { dt * f( t+dt/2, y+dy1/2 ) },
dy3 { dt * f( t+dt/2, y+dy2/2 ) },
Line 430 ⟶ 431:
int main(void)
{
constexpr double TIME_MAXIMUM = 10.0,
double TIME_MAXIMUM { T_START = 010.0 },
T_START Y_START = 1 { 0.0 },
Y_START DT = 0 { 1.100 },
DT WHOLE_TOLERANCE = 1e-12; { 0.1 },
WHOLE_TOLERANCE { 1e-12 };
 
auto dy = rk4( [](double t, double y) -> double { return t*sqrt(y); } ) ;
for (
double y ={ Y_START }, t ={ T_START };
t <= TIME_MAXIMUM;
y += dy(t,y,DT), t += DT
)
if (ceilf(t) - t < WHOLE_TOLERANCE)
printf("y(%4.1f)\t=%12.6f \t error: %12.6e\n", t, y, std::fabs(y - pow(t*t+4,2)/16));
return 0;
}</lang>
}
</lang>
 
=={{header|Common Lisp}}==
1,934

edits