eiggg3te.pas 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. program eiggg3te;
  2. uses
  3. typ,
  4. iom,
  5. omv,
  6. eig;
  7. const
  8. m1 = -10;
  9. m2 = 10;
  10. m3 = -4;
  11. m4 = 15;
  12. m5 = -5;
  13. m6 = 11;
  14. n1 = -5;
  15. n2 = 10;
  16. n3 = -3;
  17. n4 = 10;
  18. n5 = -7;
  19. n6 = 12;
  20. rwa = n2 - n1 + 1;
  21. rwb = n4 - n3 + 1;
  22. rwx = n6 - n5 + 1;
  23. var
  24. i, j, l, nex, n, k, term, i1, j1, i2, j2, i3, j3: ArbInt;
  25. r, s: ArbFloat;
  26. a: array[m1..m2, n1..n2] of ArbFloat;
  27. b: array[m3..m4, n3..n4] of ArbFloat;
  28. x, xt, xtb, xtbx: array[m5..m6, n5..n6] of ArbFloat;
  29. lam: array[m1..m2] of ArbFloat;
  30. begin
  31. Write(' program results eiggg3te');
  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: 2);
  44. writeln;
  45. Read(i1, j1, i2, j2, i3, j3, n);
  46. for i := 1 to n do
  47. for j := 1 to i do
  48. Read(a[i1 + i - 1, j1 + j - 1]);
  49. for i := 1 to n do
  50. for j := 1 to i do
  51. Read(b[i2 + i - 1, j2 + j - 1]);
  52. eiggg3(a[i1, j1], n, rwa, b[i2, j2], rwb, lam[i1], x[i3, j3], rwx, 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('term=', term: 2);
  65. writeln;
  66. if term = 1 then
  67. begin
  68. writeln('lambda=');
  69. iomwrv(output, lam[i1], n, numdig);
  70. writeln;
  71. writeln('eigenvectors:');
  72. iomwrm(output, x[i3, j3], n, n, rwx, numdig);
  73. writeln;
  74. for i := 1 to n do
  75. for j := 1 to i - 1 do
  76. a[i1 + j - 1, j1 + i - 1] := a[i1 + i - 1, j1 + j - 1];
  77. for i := 1 to n do
  78. for j := 1 to i - 1 do
  79. b[i2 + j - 1, j2 + i - 1] := b[i2 + i - 1, j2 + j - 1];
  80. writeln('residuals:');
  81. for j := 1 to n do
  82. begin
  83. writeln('residual nr', j: 2);
  84. for i := 1 to n do
  85. begin
  86. r := 0;
  87. for k := 1 to n do
  88. r := r + a[i1 + i - 1, j1 + k - 1] * x[i3 + k - 1, j3 + j - 1];
  89. s := 0;
  90. for k := 1 to n do
  91. s := s + b[i2 + i - 1, j2 + k - 1] * x[i3 + k - 1, j3 + j - 1];
  92. r := r - s * lam[i1 + j - 1];
  93. Write(r: numdig, ' ');
  94. end; {i}
  95. writeln;
  96. end; {j}
  97. writeln('xtbx =');
  98. omvtrm(x[i3, j3], n, n, rwx, xt[i3, j3], rwx);
  99. omvmmm(xt[i3, j3], n, n, rwx, b[i2, j2], n, rwb, xtb[i3, j3], rwx);
  100. omvmmm(xtb[i3, j3], n, n, rwx, x[i3, j3], n, rwx, xtbx[i3, j3], rwx);
  101. iomwrm(output, xtbx[i3, j3], n, n, rwx, 17);
  102. end;
  103. writeln('--------------------------------------------------------');
  104. end;
  105. Close(input);
  106. Close(output);
  107. end.
  108. program eiggg3te;
  109. uses
  110. typ,
  111. iom,
  112. omv,
  113. eig;
  114. const
  115. m1 = -10;
  116. m2 = 10;
  117. m3 = -4;
  118. m4 = 15;
  119. m5 = -5;
  120. m6 = 11;
  121. n1 = -5;
  122. n2 = 10;
  123. n3 = -3;
  124. n4 = 10;
  125. n5 = -7;
  126. n6 = 12;
  127. rwa = n2 - n1 + 1;
  128. rwb = n4 - n3 + 1;
  129. rwx = n6 - n5 + 1;
  130. var
  131. i, j, l, nex, n, k, term, i1, j1, i2, j2, i3, j3: ArbInt;
  132. r, s: ArbFloat;
  133. a: array[m1..m2, n1..n2] of ArbFloat;
  134. b: array[m3..m4, n3..n4] of ArbFloat;
  135. x, xt, xtb, xtbx: array[m5..m6, n5..n6] of ArbFloat;
  136. lam: array[m1..m2] of ArbFloat;
  137. begin
  138. Write(' program results eiggg3te');
  139. case sizeof(ArbFloat) of
  140. 4: writeln('(single)');
  141. 6: writeln('(real)');
  142. 8: writeln('(double)');
  143. end;
  144. Read(nex);
  145. writeln;
  146. writeln('number of examples', nex: 2);
  147. writeln;
  148. for l := 1 to nex do
  149. begin
  150. writeln('example number', l: 2);
  151. writeln;
  152. Read(i1, j1, i2, j2, i3, j3, n);
  153. for i := 1 to n do
  154. for j := 1 to i do
  155. Read(a[i1 + i - 1, j1 + j - 1]);
  156. for i := 1 to n do
  157. for j := 1 to i do
  158. Read(b[i2 + i - 1, j2 + j - 1]);
  159. eiggg3(a[i1, j1], n, rwa, b[i2, j2], rwb, lam[i1], x[i3, j3], rwx, term);
  160. writeln;
  161. writeln('A=');
  162. writeln;
  163. for i := 1 to n do
  164. iomwrv(output, a[i1 + i - 1, j1], i, numdig);
  165. writeln;
  166. writeln('B=');
  167. writeln;
  168. for i := 1 to n do
  169. iomwrv(output, b[i2 + i - 1, j2], i, numdig);
  170. writeln;
  171. writeln('term=', term: 2);
  172. writeln;
  173. if term = 1 then
  174. begin
  175. writeln('lambda=');
  176. iomwrv(output, lam[i1], n, numdig);
  177. writeln;
  178. writeln('eigenvectors:');
  179. iomwrm(output, x[i3, j3], n, n, rwx, numdig);
  180. writeln;
  181. for i := 1 to n do
  182. for j := 1 to i - 1 do
  183. a[i1 + j - 1, j1 + i - 1] := a[i1 + i - 1, j1 + j - 1];
  184. for i := 1 to n do
  185. for j := 1 to i - 1 do
  186. b[i2 + j - 1, j2 + i - 1] := b[i2 + i - 1, j2 + j - 1];
  187. writeln('residuals:');
  188. for j := 1 to n do
  189. begin
  190. writeln('residual nr', j: 2);
  191. for i := 1 to n do
  192. begin
  193. r := 0;
  194. for k := 1 to n do
  195. r := r + a[i1 + i - 1, j1 + k - 1] * x[i3 + k - 1, j3 + j - 1];
  196. s := 0;
  197. for k := 1 to n do
  198. s := s + b[i2 + i - 1, j2 + k - 1] * x[i3 + k - 1, j3 + j - 1];
  199. r := r - s * lam[i1 + j - 1];
  200. Write(r: numdig, ' ');
  201. end; {i}
  202. writeln;
  203. end; {j}
  204. writeln('xtbx =');
  205. omvtrm(x[i3, j3], n, n, rwx, xt[i3, j3], rwx);
  206. omvmmm(xt[i3, j3], n, n, rwx, b[i2, j2], n, rwb, xtb[i3, j3], rwx);
  207. omvmmm(xtb[i3, j3], n, n, rwx, x[i3, j3], n, rwx, xtbx[i3, j3], rwx);
  208. iomwrm(output, xtbx[i3, j3], n, n, rwx, 17);
  209. end;
  210. writeln('--------------------------------------------------------');
  211. end;
  212. Close(input);
  213. Close(output);
  214. end.