1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
#include "sys-defines.h"
#include "ode.h"
#include "extern.h"
/*
* Euler's method: quick and dirty.
* Copyright Nicholas B. Tufillaro, 1982-1994. All rights reserved.
* GNU enhancements copyright (C) 1996-1997 Free Software Foundation, Inc.
*/
void
#ifdef _HAVE_PROTOS
eu (void)
#else
eu ()
#endif
{
double t;
for (it = 0, t = tstart; !STOPR; t = tstart + (++it) * tstep)
{
symtab->sy_value = symtab->sy_val[0] = t;
field();
for (fsp = dqueue; fsp != NULL; fsp = fsp->sy_link)
{
fsp->sy_val[0] = fsp->sy_value;
fsp->sy_pri[0] = fsp->sy_prime;
}
printq();
for (fsp = dqueue; fsp != NULL; fsp = fsp->sy_link)
fsp->sy_value = fsp->sy_val[0] + tstep * fsp->sy_prime;
}
}
/*
* if tstart == tstop, i.e., step nowhere, then just print current values
*/
void
#ifdef _HAVE_PROTOS
trivial (void)
#else
trivial ()
#endif
{
symtab->sy_value = symtab->sy_val[0] = tstart;
field();
for (fsp = dqueue; fsp != NULL; fsp = fsp->sy_link)
{
fsp->sy_val[0] = fsp->sy_value;
fsp->sy_pri[0] = fsp->sy_prime;
}
printq();
}
|