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 {
T_START
Y_START
DT
WHOLE_TOLERANCE { 1e-12 };
auto dy = rk4( [](double t, double y) -> double { return t*sqrt(y); } ) ;
for (
double y
t <= TIME_MAXIMUM;
y += dy(t,y,DT), t += DT
)
if (ceilf(t)
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}}==
|