odeiv1te.pas 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. program odeiv1te;
  2. uses
  3. typ,
  4. ode;
  5. var
  6. ex, nv, i, term: ArbInt;
  7. a, b, d, ya, yb, ae: ArbFloat;
  8. function f(x, y: ArbFloat): ArbFloat;
  9. begin
  10. f := -10 * (y - sqr(x));
  11. end; {f}
  12. function g(x, y: ArbFloat): ArbFloat;
  13. begin
  14. g := -100 * (y - sin(x)) + cos(x);
  15. end; {g}
  16. function h(x, y: ArbFloat): ArbFloat;
  17. begin
  18. h := 15 * y;
  19. end; {h}
  20. function phi(x: ArbFloat): ArbFloat;
  21. begin
  22. phi := -exp(-10 * x) * 0.02 + sqr(x) - x * 0.2 + 0.02;
  23. end; {phi}
  24. begin
  25. Write(' program results odeiv1te');
  26. case sizeof(ArbFloat) of
  27. 4: writeln('(single)');
  28. 6: writeln('(real)');
  29. 8: writeln('(double)');
  30. end;
  31. Read(nv);
  32. writeln('program results odeiv1te');
  33. writeln;
  34. writeln(' number of examples: ', nv: 2);
  35. for ex := 1 to nv do
  36. begin
  37. writeln;
  38. writeln(' example number :', ex: 2);
  39. Read(a, b, ya, ae);
  40. d := b - a;
  41. writeln('a': 3, 'b': 5, 'yb': 12, 'phi(b)': 20, 'ae': 10, 'term': 9);
  42. for i := 1 to 5 do
  43. begin
  44. odeiv1(@f, a, ya, b, yb, ae, term);
  45. writeln(a: 5: 2, b: 5: 2, ' ', yb: numdig, ' ', phi(b): numdig, ae: 9, term: 3);
  46. a := b;
  47. ya := yb;
  48. b := b + d;
  49. end; {i}
  50. writeln(' -------------------------------------------------');
  51. end; {ex}
  52. a := 0;
  53. ya := 1;
  54. b := 1;
  55. ae := 1e-6;
  56. odeiv1(@g, a, ya, b, yb, ae, term);
  57. writeln(a: 5: 2, b: 5: 2, ' ', yb - sin(1): numdig, ' ', ae: 9, term: 3);
  58. a := 0;
  59. ya := 1e-3;
  60. b := 1;
  61. ae := 1e-4;
  62. odeiv1(@h, a, ya, b, yb, ae, term);
  63. writeln(a: 5: 2, b: 5: 2, ' ', yb: numdig, ' ', 1e-3 * exp(15): numdig, ae: 9, term: 3);
  64. a := 0;
  65. ya := 1e-3;
  66. b := 1;
  67. ae := 1e-6;
  68. odeiv1(@h, a, ya, b, yb, ae, term);
  69. writeln(a: 5: 2, b: 5: 2, ' ', yb: numdig, ' ', 1e-3 * exp(15): numdig, ae: 9, term: 3);
  70. a := 0;
  71. ya := 1e-3;
  72. b := a;
  73. ae := 1e-6;
  74. odeiv1(@h, a, ya, b, yb, ae, term);
  75. writeln(a: 5: 2, b: 5: 2, ' ', yb: numdig, ' ', 1e-3 * exp(15): numdig, ae: 9, term: 3);
  76. a := 0;
  77. ya := 1e-3;
  78. b := a;
  79. ae := 0;
  80. odeiv1(@h, a, ya, b, yb, ae, term);
  81. writeln(a: 5: 2, b: 5: 2, ' ', yb: numdig, ' ', 1e-3 * exp(15): numdig, ae: 9, term: 3);
  82. Close(input);
  83. Close(output);
  84. end.