odeiv2te.pas 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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.
  71. program odeiv2te;
  72. uses
  73. typ,
  74. ode;
  75. const
  76. n1 = 3;
  77. n2 = 4;
  78. n3 = 6;
  79. n = n2 - n1 + 1;
  80. n4 = n3 + n - 1;
  81. var
  82. ex, nv, i, j, k, h, term: ArbInt;
  83. a, b, d, ae: ArbFloat;
  84. ya: array[n1..n2] of ArbFloat;
  85. yb: array[n3..n4] of ArbFloat;
  86. procedure f(x: ArbFloat; var y, y1: ArbFloat);
  87. var
  88. yloc: array[1..n] of ArbFloat absolute y;
  89. y1loc: array[1..n] of ArbFloat absolute y1;
  90. begin
  91. y1loc[1] := 2 * x * yloc[1] + yloc[2];
  92. y1loc[2] := -yloc[1] + 2 * x * yloc[2];
  93. end; {f}
  94. function phi1(x: ArbFloat): ArbFloat;
  95. begin
  96. phi1 := exp(x * x) * sin(x);
  97. end; {phi1}
  98. function phi2(x: ArbFloat): ArbFloat;
  99. begin
  100. phi2 := exp(x * x) * cos(x);
  101. end; {phi2}
  102. begin
  103. Write(' program results odeiv2te');
  104. case sizeof(ArbFloat) of
  105. 4: writeln('(single)');
  106. 6: writeln('(real)');
  107. 8: writeln('(double)');
  108. end;
  109. Read(nv);
  110. writeln;
  111. writeln(' number of examples: ', nv: 2);
  112. k := numdig;
  113. h := k div 2;
  114. for ex := 1 to nv do
  115. begin
  116. writeln;
  117. writeln(' example number :', ex: 2);
  118. Read(a, b);
  119. for j := n1 to n2 do
  120. Read(ya[j]);
  121. Read(ae);
  122. d := b - a;
  123. writeln;
  124. writeln(' ae =', ae: 10);
  125. writeln;
  126. writeln('b': 3, 'yb1': h + 4, 'yb2': k, 'phi1(x)': k + 3, 'phi2(x)': k - 2, 'term': h + 2);
  127. for i := 1 to 5 do
  128. begin
  129. odeiv2(@f, a, ya[n1], b, yb[n3], n, ae, term);
  130. writeln(b: 5: 2, yb[n3]: k, yb[n3 + 1]: k, phi1(b): k, phi2(b): k, term: 3);
  131. a := b;
  132. for j := n1 to n2 do
  133. ya[j] := yb[n3 - n1 + j];
  134. b := b + d;
  135. end; {i}
  136. writeln(' -------------------------------------------------');
  137. end; {ex}
  138. Close(input);
  139. Close(output);
  140. end.