roofnrte.pas 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. program roofnrte;
  2. uses
  3. typ,
  4. spe,
  5. roo;
  6. const
  7. num = 3;
  8. nmax = 3;
  9. var
  10. term, i, j, k, l, n: ArbInt;
  11. re, residu: ArbFloat;
  12. x: array[1..nmax] of ArbFloat;
  13. procedure f(var x0, fx: ArbFloat; var deff: boolean);
  14. var
  15. xloc: array[1..nmax] of ArbFloat absolute x0;
  16. f: array[1..nmax] of ArbFloat absolute fx;
  17. x, y, z: ArbFloat;
  18. begin
  19. x := xloc[1];
  20. y := xloc[2];
  21. if n = 3 then
  22. z := xloc[3];
  23. case i of
  24. 1:
  25. begin
  26. if j * 2 <= k then
  27. deff := x >= 0
  28. else
  29. deff := y >= 0;
  30. f[1] := x * x - y * y - 2;
  31. f[2] := x + y - 1;
  32. end;
  33. 2:
  34. begin
  35. f[1] := exp(x) + exp(y) - exp(z);
  36. f[2] := sin(x) + cos(y) - z;
  37. f[3] := x * y - sqr(z);
  38. end;
  39. 3: if (x > 0) and (y > 0) then
  40. begin
  41. f[1] := spepow(x, y) - spepow(y, x);
  42. f[2] := sin(x) - cos(y);
  43. end
  44. else
  45. deff := False
  46. end;
  47. end;
  48. begin
  49. Write(' program results roofnrte');
  50. case sizeof(ArbFloat) of
  51. 4: writeln('(single)');
  52. 6: writeln('(real)');
  53. 8: writeln('(double)');
  54. end;
  55. writeln;
  56. writeln(' number of examples:', num: 3);
  57. for i := 1 to num do
  58. begin
  59. writeln;
  60. writeln('Locating the root of the equations ');
  61. case i of
  62. 1:
  63. begin
  64. n := 2;
  65. writeln('x + y = 1');
  66. writeln('xý + yý = 2');
  67. end;
  68. 2:
  69. begin
  70. n := 3;
  71. writeln('exp(x) + exp(y) = exp(z)');
  72. writeln('sin(x) + cos(y) = z');
  73. writeln('xy = zý');
  74. end;
  75. 3:
  76. begin
  77. n := 2;
  78. writeln('xy = yx');
  79. writeln('sin(x) = cos(y)');
  80. end
  81. end;
  82. Read(k);
  83. for j := 1 to k do
  84. begin
  85. for l := 1 to n do
  86. Read(x[l]);
  87. Read(re);
  88. writeln(' starting values: (n=', n: 1, ')');
  89. for l := 1 to n do
  90. Write(x[l]: numdig, ' ');
  91. writeln(' re =', re: 8);
  92. roofnr(@f, n, x[1], residu, re, term);
  93. writeln;
  94. writeln(' term =', term: 2);
  95. if term < 3 then
  96. begin
  97. writeln(' solution vector');
  98. for l := 1 to n do
  99. Write(x[l]: numdig, ' ');
  100. writeln;
  101. writeln(' residu = ', residu: 8);
  102. end;
  103. writeln('-------------------------------------------------');
  104. end;
  105. writeln('======================================================');
  106. end;
  107. Close(input);
  108. Close(output);
  109. end.
  110. program roofnrte;
  111. uses
  112. typ,
  113. spe,
  114. roo;
  115. const
  116. num = 3;
  117. nmax = 3;
  118. var
  119. term, i, j, k, l, n: ArbInt;
  120. re, residu: ArbFloat;
  121. x: array[1..nmax] of ArbFloat;
  122. procedure f(var x0, fx: ArbFloat; var deff: boolean);
  123. var
  124. xloc: array[1..nmax] of ArbFloat absolute x0;
  125. f: array[1..nmax] of ArbFloat absolute fx;
  126. x, y, z: ArbFloat;
  127. begin
  128. x := xloc[1];
  129. y := xloc[2];
  130. if n = 3 then
  131. z := xloc[3];
  132. case i of
  133. 1:
  134. begin
  135. if j * 2 <= k then
  136. deff := x >= 0
  137. else
  138. deff := y >= 0;
  139. f[1] := x * x - y * y - 2;
  140. f[2] := x + y - 1;
  141. end;
  142. 2:
  143. begin
  144. f[1] := exp(x) + exp(y) - exp(z);
  145. f[2] := sin(x) + cos(y) - z;
  146. f[3] := x * y - sqr(z);
  147. end;
  148. 3: if (x > 0) and (y > 0) then
  149. begin
  150. f[1] := spepow(x, y) - spepow(y, x);
  151. f[2] := sin(x) - cos(y);
  152. end
  153. else
  154. deff := False
  155. end;
  156. end;
  157. begin
  158. Write(' program results roofnrte');
  159. case sizeof(ArbFloat) of
  160. 4: writeln('(single)');
  161. 6: writeln('(real)');
  162. 8: writeln('(double)');
  163. end;
  164. writeln;
  165. writeln(' number of examples:', num: 3);
  166. for i := 1 to num do
  167. begin
  168. writeln;
  169. writeln('Locating the root of the equations ');
  170. case i of
  171. 1:
  172. begin
  173. n := 2;
  174. writeln('x + y = 1');
  175. writeln('xý + yý = 2');
  176. end;
  177. 2:
  178. begin
  179. n := 3;
  180. writeln('exp(x) + exp(y) = exp(z)');
  181. writeln('sin(x) + cos(y) = z');
  182. writeln('xy = zý');
  183. end;
  184. 3:
  185. begin
  186. n := 2;
  187. writeln('xy = yx');
  188. writeln('sin(x) = cos(y)');
  189. end
  190. end;
  191. Read(k);
  192. for j := 1 to k do
  193. begin
  194. for l := 1 to n do
  195. Read(x[l]);
  196. Read(re);
  197. writeln(' starting values: (n=', n: 1, ')');
  198. for l := 1 to n do
  199. Write(x[l]: numdig, ' ');
  200. writeln(' re =', re: 8);
  201. roofnr(@f, n, x[1], residu, re, term);
  202. writeln;
  203. writeln(' term =', term: 2);
  204. if term < 3 then
  205. begin
  206. writeln(' solution vector');
  207. for l := 1 to n do
  208. Write(x[l]: numdig, ' ');
  209. writeln;
  210. writeln(' residu = ', residu: 8);
  211. end;
  212. writeln('-------------------------------------------------');
  213. end;
  214. writeln('======================================================');
  215. end;
  216. Close(input);
  217. Close(output);
  218. end.