the output..why does it iterates starting from 8.4 and not 0.0? why the introductions," RK4_PRB:Code:# include <stdlib.h> # include <stdio.h> # include <math.h> # include <time.h> int main ( ); void test01 ( ); double test01_f ( double t, double u ); double rk4 ( double t0, double u0, double dt, double f ( double t, double u ) ); void timestamp ( void ); /******************************************************************************/ int main ( ) /******************************************************************************/ { timestamp ( ); printf ( "\n" ); printf ( "RK4_PRB:\n" ); printf ( " C version\n" ); printf ( " Test the RK4 library.\n" ); test01 ( ); /* Terminate. */ printf ( "\n" ); printf ( "RK4_PRB:\n" ); printf ( " Normal end of execution.\n" ); printf ( "\n" ); timestamp ( ); system ("pause"); return 0; } /******************************************************************************/ void test01 ( ) /******************************************************************************/ { double dt = 0.1; double pi = 3.14159265; double t0 = 0.0; double t1; double tmax = 12.0 * pi; double u0 = 0.5; double u1; //double rk4 ( double t0, double u0, double dt, double f ( double t, double u ) ); printf ( "\n" ); printf ( "TEST01\n" ); printf ( " RK4 takes a Runge-Kutta step for a scalar ODE.\n" ); printf ( "\n" ); printf ( " T U(T)\n" ); printf ( "\n" ); while ( 1 ) { /* Print (T0,U0). */ printf ( " %g %g\n", t0, u0 ); /* Stop if we've exceeded TMAX. */ if ( tmax <= t0 ) { break; } /* Otherwise, advance to time T1, and have RK4 estimate the solution U1 there. */ t1 = t0 + dt; u1 = rk4 ( t0, u0, dt, test01_f ); /* Shift the data to prepare for another step. */ t0 = t1; u0 = u1; } return; } /******************************************************************************/ double test01_f ( double t, double u ) /******************************************************************************/ { double dudt; dudt = u * cos ( t ); return dudt; } /******************************************************************************/ double rk4 ( double t0, double u0, double dt, double f ( double t, double u ) ) { double f0; double f1; double f2; double f3; double t1; double t2; double t3; double u; double u1; double u2; double u3; /* Get four sample values of the derivative. */ f0 = f ( t0, u0 ); t1 = t0 + dt / 2.0; u1 = u0 + dt * f0 / 2.0; f1 = f ( t1, u1 ); t2 = t0 + dt / 2.0; u2 = u0 + dt * f1 / 2.0; f2 = f ( t2, u2 ); t3 = t0 + dt; u3 = u0 + dt * f2; f3 = f ( t3, u3 ); /* Combine them to estimate the solution. */ u = u0 + dt * ( f0 + 2.0 * f1 + 2.0 * f2 + f3 ) / 6.0; return u; } void timestamp ( void ) { # define TIME_SIZE 40 static char time_buffer[TIME_SIZE]; const struct tm *tm; size_t len; time_t now; now = time ( NULL ); tm = localtime ( &now ); len = strftime ( time_buffer, TIME_SIZE, "%d %B %Y %I:%M:%S %p", tm ); fprintf ( stdout, "%s\n", time_buffer ); return; # undef TIME_SIZE }
C version
Test the RK4 library.", not appear in the output?