eiggg4te.pas 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. program eiggg4te;
  2. uses
  3. typ,
  4. iom,
  5. omv,
  6. eig;
  7. const
  8. p1 = -9;
  9. p2 = 5;
  10. n1 = -10;
  11. n2 = 8;
  12. p3 = -10;
  13. p4 = 7;
  14. n3 = -11;
  15. n4 = 9;
  16. p5 = -8;
  17. p6 = 11;
  18. n5 = -12;
  19. n6 = 12;
  20. rwa = n2 - n1 + 1;
  21. rwb = n4 - n3 + 1;
  22. rwx = n6 - n5 + 1;
  23. var
  24. i, j, l, m2, k1, k2, nex, n, term, k, m, i1, j1, i2, j2, i3, j3: ArbInt;
  25. r, s: ArbFloat;
  26. a: array[p1..p2, n1..n2] of ArbFloat;
  27. b: array[p3..p4, n3..n4] of ArbFloat;
  28. x, xt, xtb, xtbx: array[p5..p6, n5..n6] of ArbFloat;
  29. lam: array[p1..p2] of ArbFloat;
  30. begin
  31. Write(' program results eiggg4te');
  32. case sizeof(ArbFloat) of
  33. 4: writeln('(single)');
  34. 6: writeln('(real)');
  35. 8: writeln('(double)');
  36. end;
  37. Read(nex);
  38. writeln;
  39. writeln('number of examples', nex: 2);
  40. writeln;
  41. for l := 1 to nex do
  42. begin
  43. writeln('example number', l: 3);
  44. Read(i1, j1, i2, j2, i3, j3, n, k1, k2);
  45. for i := 1 to n do
  46. for j := 1 to i do
  47. Read(a[i1 + i - 1, j1 + j - 1]);
  48. for i := 1 to n do
  49. for j := 1 to i do
  50. Read(b[i2 + i - 1, j2 + j - 1]);
  51. eiggg4(a[i1, j1], n, rwa, k1, k2, b[i2, j2], rwb, lam[i1 + k1 - 1],
  52. x[i3, j3 + k1 - 1], rwx, m2, term);
  53. writeln;
  54. writeln('A=');
  55. writeln;
  56. for i := 1 to n do
  57. iomwrv(output, a[i1 + i - 1, j1], i, numdig);
  58. writeln;
  59. writeln('B=');
  60. writeln;
  61. for i := 1 to n do
  62. iomwrv(output, b[i2 + i - 1, j2], i, numdig);
  63. writeln;
  64. writeln(' k1=', k1: 2, ' k2=', k2: 2);
  65. writeln;
  66. writeln('term=', term: 2);
  67. writeln;
  68. if (term = 1) or (term = 4) then
  69. begin
  70. writeln('lambda=', k1: 2, ' t/m', k2: 2, ' = ');
  71. iomwrv(output, lam[i1 + k1 - 1], k2 - k1 + 1, numdig);
  72. writeln;
  73. writeln(' m2 =', m2: 2);
  74. writeln;
  75. if m2 = k1 - 1 then
  76. writeln(' eigenvectors can not be determined')
  77. else
  78. begin
  79. writeln('eigenvectors', k1: 2, ' t/m', m2: 2, ':');
  80. iomwrm(output, x[i3, j3 + k1 - 1], n, m2 - k1 + 1, rwx, numdig);
  81. for i := 1 to n do
  82. for j := 1 to i - 1 do
  83. a[i1 + j - 1, j1 + i - 1] := a[i1 + i - 1, j1 + j - 1];
  84. for i := 1 to n do
  85. for j := 1 to i - 1 do
  86. b[i2 + j - 1, j2 + i - 1] := b[i2 + i - 1, j2 + j - 1];
  87. writeln('residuals:');
  88. for j := k1 to m2 do
  89. begin
  90. writeln('residual nr', j: 2);
  91. for i := 1 to n do
  92. begin
  93. r := 0;
  94. for k := 1 to n do
  95. r := r + a[i1 + i - 1, j1 + k - 1] * x[i3 + k - 1, j3 + j - 1];
  96. s := 0;
  97. for k := 1 to n do
  98. s := s + b[i2 + i - 1, j2 + k - 1] * x[i3 + k - 1, j3 + j - 1];
  99. r := r - s * lam[i1 + j - 1];
  100. Write(r: numdig, ' ');
  101. end; {i}
  102. writeln;
  103. end; {j}
  104. m := m2 - k1 + 1;
  105. writeln('xtbx =');
  106. omvtrm(x[i3, j3 + k1 - 1], n, m, rwx, xt[i3, j3], rwx);
  107. omvmmm(xt[i3, j3], m, n, rwx, b[i2, j2], n, rwb, xtb[i3, j3], rwx);
  108. omvmmm(xtb[i3, j3], m, n, rwx, x[i3, j3 + k1 - 1], m, rwx,
  109. xtbx[i3, j3], rwx);
  110. iomwrm(output, xtbx[i3, j3], m, m, rwx, numdig);
  111. end; {m2 > k1-1}
  112. end; {term=1 or term=4}
  113. writeln('----------------------------------------------------------');
  114. end; {l}
  115. Close(input);
  116. Close(output);
  117. end.
  118. program eiggg4te;
  119. uses
  120. typ,
  121. iom,
  122. omv,
  123. eig;
  124. const
  125. p1 = -9;
  126. p2 = 5;
  127. n1 = -10;
  128. n2 = 8;
  129. p3 = -10;
  130. p4 = 7;
  131. n3 = -11;
  132. n4 = 9;
  133. p5 = -8;
  134. p6 = 11;
  135. n5 = -12;
  136. n6 = 12;
  137. rwa = n2 - n1 + 1;
  138. rwb = n4 - n3 + 1;
  139. rwx = n6 - n5 + 1;
  140. var
  141. i, j, l, m2, k1, k2, nex, n, term, k, m, i1, j1, i2, j2, i3, j3: ArbInt;
  142. r, s: ArbFloat;
  143. a: array[p1..p2, n1..n2] of ArbFloat;
  144. b: array[p3..p4, n3..n4] of ArbFloat;
  145. x, xt, xtb, xtbx: array[p5..p6, n5..n6] of ArbFloat;
  146. lam: array[p1..p2] of ArbFloat;
  147. begin
  148. Write(' program results eiggg4te');
  149. case sizeof(ArbFloat) of
  150. 4: writeln('(single)');
  151. 6: writeln('(real)');
  152. 8: writeln('(double)');
  153. end;
  154. Read(nex);
  155. writeln;
  156. writeln('number of examples', nex: 2);
  157. writeln;
  158. for l := 1 to nex do
  159. begin
  160. writeln('example number', l: 3);
  161. Read(i1, j1, i2, j2, i3, j3, n, k1, k2);
  162. for i := 1 to n do
  163. for j := 1 to i do
  164. Read(a[i1 + i - 1, j1 + j - 1]);
  165. for i := 1 to n do
  166. for j := 1 to i do
  167. Read(b[i2 + i - 1, j2 + j - 1]);
  168. eiggg4(a[i1, j1], n, rwa, k1, k2, b[i2, j2], rwb, lam[i1 + k1 - 1],
  169. x[i3, j3 + k1 - 1], rwx, m2, term);
  170. writeln;
  171. writeln('A=');
  172. writeln;
  173. for i := 1 to n do
  174. iomwrv(output, a[i1 + i - 1, j1], i, numdig);
  175. writeln;
  176. writeln('B=');
  177. writeln;
  178. for i := 1 to n do
  179. iomwrv(output, b[i2 + i - 1, j2], i, numdig);
  180. writeln;
  181. writeln(' k1=', k1: 2, ' k2=', k2: 2);
  182. writeln;
  183. writeln('term=', term: 2);
  184. writeln;
  185. if (term = 1) or (term = 4) then
  186. begin
  187. writeln('lambda=', k1: 2, ' t/m', k2: 2, ' = ');
  188. iomwrv(output, lam[i1 + k1 - 1], k2 - k1 + 1, numdig);
  189. writeln;
  190. writeln(' m2 =', m2: 2);
  191. writeln;
  192. if m2 = k1 - 1 then
  193. writeln(' eigenvectors can not be determined')
  194. else
  195. begin
  196. writeln('eigenvectors', k1: 2, ' t/m', m2: 2, ':');
  197. iomwrm(output, x[i3, j3 + k1 - 1], n, m2 - k1 + 1, rwx, numdig);
  198. for i := 1 to n do
  199. for j := 1 to i - 1 do
  200. a[i1 + j - 1, j1 + i - 1] := a[i1 + i - 1, j1 + j - 1];
  201. for i := 1 to n do
  202. for j := 1 to i - 1 do
  203. b[i2 + j - 1, j2 + i - 1] := b[i2 + i - 1, j2 + j - 1];
  204. writeln('residuals:');
  205. for j := k1 to m2 do
  206. begin
  207. writeln('residual nr', j: 2);
  208. for i := 1 to n do
  209. begin
  210. r := 0;
  211. for k := 1 to n do
  212. r := r + a[i1 + i - 1, j1 + k - 1] * x[i3 + k - 1, j3 + j - 1];
  213. s := 0;
  214. for k := 1 to n do
  215. s := s + b[i2 + i - 1, j2 + k - 1] * x[i3 + k - 1, j3 + j - 1];
  216. r := r - s * lam[i1 + j - 1];
  217. Write(r: numdig, ' ');
  218. end; {i}
  219. writeln;
  220. end; {j}
  221. m := m2 - k1 + 1;
  222. writeln('xtbx =');
  223. omvtrm(x[i3, j3 + k1 - 1], n, m, rwx, xt[i3, j3], rwx);
  224. omvmmm(xt[i3, j3], m, n, rwx, b[i2, j2], n, rwb, xtb[i3, j3], rwx);
  225. omvmmm(xtb[i3, j3], m, n, rwx, x[i3, j3 + k1 - 1], m, rwx,
  226. xtbx[i3, j3], rwx);
  227. iomwrm(output, xtbx[i3, j3], m, m, rwx, numdig);
  228. end; {m2 > k1-1}
  229. end; {term=1 or term=4}
  230. writeln('----------------------------------------------------------');
  231. end; {l}
  232. Close(input);
  233. Close(output);
  234. end.