odeiv2te.pas 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. program odeiv2te;
  2. uses
  3. typ,
  4. ode;
  5. const
  6. n1 = 3;
  7. n2 = 4;
  8. n3 = 6;
  9. n = n2 - n1 + 1;
  10. n4 = n3 + n - 1;
  11. var
  12. ex, nv, i, j, k, h, term: ArbInt;
  13. a, b, d, ae: ArbFloat;
  14. ya: array[n1..n2] of ArbFloat;
  15. yb: array[n3..n4] of ArbFloat;
  16. procedure f(x: ArbFloat; var y, y1: ArbFloat);
  17. var
  18. yloc: array[1..n] of ArbFloat absolute y;
  19. y1loc: array[1..n] of ArbFloat absolute y1;
  20. begin
  21. y1loc[1] := 2 * x * yloc[1] + yloc[2];
  22. y1loc[2] := -yloc[1] + 2 * x * yloc[2];
  23. end; {f}
  24. function phi1(x: ArbFloat): ArbFloat;
  25. begin
  26. phi1 := exp(x * x) * sin(x);
  27. end; {phi1}
  28. function phi2(x: ArbFloat): ArbFloat;
  29. begin
  30. phi2 := exp(x * x) * cos(x);
  31. end; {phi2}
  32. begin
  33. Write(' program results odeiv2te');
  34. case sizeof(ArbFloat) of
  35. 4: writeln('(single)');
  36. 6: writeln('(real)');
  37. 8: writeln('(double)');
  38. end;
  39. Read(nv);
  40. writeln;
  41. writeln(' number of examples: ', nv: 2);
  42. k := numdig;
  43. h := k div 2;
  44. for ex := 1 to nv do
  45. begin
  46. writeln;
  47. writeln(' example number :', ex: 2);
  48. Read(a, b);
  49. for j := n1 to n2 do
  50. Read(ya[j]);
  51. Read(ae);
  52. d := b - a;
  53. writeln;
  54. writeln(' ae =', ae: 10);
  55. writeln;
  56. writeln('b': 3, 'yb1': h + 4, 'yb2': k, 'phi1(x)': k + 3, 'phi2(x)': k - 2, 'term': h + 2);
  57. for i := 1 to 5 do
  58. begin
  59. odeiv2(@f, a, ya[n1], b, yb[n3], n, ae, term);
  60. writeln(b: 5: 2, yb[n3]: k, yb[n3 + 1]: k, phi1(b): k, phi2(b): k, term: 3);
  61. a := b;
  62. for j := n1 to n2 do
  63. ya[j] := yb[n3 - n1 + j];
  64. b := b + d;
  65. end; {i}
  66. writeln(' -------------------------------------------------');
  67. end; {ex}
  68. Close(input);
  69. Close(output);
  70. end.