eu.c 1.1 KB

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