odeiv1te.pas 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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.
  85. program odeiv1te;
  86. uses
  87. typ,
  88. ode;
  89. var
  90. ex, nv, i, term: ArbInt;
  91. a, b, d, ya, yb, ae: ArbFloat;
  92. function f(x, y: ArbFloat): ArbFloat;
  93. begin
  94. f := -10 * (y - sqr(x));
  95. end; {f}
  96. function g(x, y: ArbFloat): ArbFloat;
  97. begin
  98. g := -100 * (y - sin(x)) + cos(x);
  99. end; {g}
  100. function h(x, y: ArbFloat): ArbFloat;
  101. begin
  102. h := 15 * y;
  103. end; {h}
  104. function phi(x: ArbFloat): ArbFloat;
  105. begin
  106. phi := -exp(-10 * x) * 0.02 + sqr(x) - x * 0.2 + 0.02;
  107. end; {phi}
  108. begin
  109. Write(' program results odeiv1te');
  110. case sizeof(ArbFloat) of
  111. 4: writeln('(single)');
  112. 6: writeln('(real)');
  113. 8: writeln('(double)');
  114. end;
  115. Read(nv);
  116. writeln('program results odeiv1te');
  117. writeln;
  118. writeln(' number of examples: ', nv: 2);
  119. for ex := 1 to nv do
  120. begin
  121. writeln;
  122. writeln(' example number :', ex: 2);
  123. Read(a, b, ya, ae);
  124. d := b - a;
  125. writeln('a': 3, 'b': 5, 'yb': 12, 'phi(b)': 20, 'ae': 10, 'term': 9);
  126. for i := 1 to 5 do
  127. begin
  128. odeiv1(@f, a, ya, b, yb, ae, term);
  129. writeln(a: 5: 2, b: 5: 2, ' ', yb: numdig, ' ', phi(b): numdig, ae: 9, term: 3);
  130. a := b;
  131. ya := yb;
  132. b := b + d;
  133. end; {i}
  134. writeln(' -------------------------------------------------');
  135. end; {ex}
  136. a := 0;
  137. ya := 1;
  138. b := 1;
  139. ae := 1e-6;
  140. odeiv1(@g, a, ya, b, yb, ae, term);
  141. writeln(a: 5: 2, b: 5: 2, ' ', yb - sin(1): numdig, ' ', ae: 9, term: 3);
  142. a := 0;
  143. ya := 1e-3;
  144. b := 1;
  145. ae := 1e-4;
  146. odeiv1(@h, a, ya, b, yb, ae, term);
  147. writeln(a: 5: 2, b: 5: 2, ' ', yb: numdig, ' ', 1e-3 * exp(15): numdig, ae: 9, term: 3);
  148. a := 0;
  149. ya := 1e-3;
  150. b := 1;
  151. ae := 1e-6;
  152. odeiv1(@h, a, ya, b, yb, ae, term);
  153. writeln(a: 5: 2, b: 5: 2, ' ', yb: numdig, ' ', 1e-3 * exp(15): numdig, ae: 9, term: 3);
  154. a := 0;
  155. ya := 1e-3;
  156. b := a;
  157. ae := 1e-6;
  158. odeiv1(@h, a, ya, b, yb, ae, term);
  159. writeln(a: 5: 2, b: 5: 2, ' ', yb: numdig, ' ', 1e-3 * exp(15): numdig, ae: 9, term: 3);
  160. a := 0;
  161. ya := 1e-3;
  162. b := a;
  163. ae := 0;
  164. odeiv1(@h, a, ya, b, yb, ae, term);
  165. writeln(a: 5: 2, b: 5: 2, ' ', yb: numdig, ' ', 1e-3 * exp(15): numdig, ae: 9, term: 3);
  166. Close(input);
  167. Close(output);
  168. end.