eigge3te.pas 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. program eigge3te;
  2. uses
  3. typ,
  4. iom,
  5. eig;
  6. const
  7. m1 = -9;
  8. m2 = 5;
  9. m3 = -11;
  10. m4 = 8;
  11. n1 = -10;
  12. n2 = 8;
  13. n3 = -9;
  14. n4 = 7;
  15. rwa = n2 - n1 + 1;
  16. rwx = n4 - n3 + 1;
  17. var
  18. i, j, l, nex, n, term, i1, j1, i2, j2, k: ArbInt;
  19. r: ArbFloat;
  20. a: array[m1..m2, n1..n2] of ArbFloat;
  21. x: array[m3..m4, n3..n4] of complex;
  22. lam: array[m1..m2] of complex;
  23. begin
  24. Write(' program results eigge3te');
  25. case sizeof(ArbFloat) of
  26. 4: writeln('(single)');
  27. 6: writeln('(real)');
  28. 8: writeln('(double)');
  29. end;
  30. Read(nex);
  31. writeln;
  32. writeln('number of examples', nex: 2);
  33. writeln;
  34. for l := 1 to nex do
  35. begin
  36. writeln('example number', l: 2);
  37. writeln;
  38. Read(i1, j1, i2, j2, n);
  39. iomrem(input, a[i1, j1], n, n, rwa);
  40. eigge3(a[i1, j1], n, rwa, lam[i1], x[i2, j2], rwx, term);
  41. writeln;
  42. writeln('A=');
  43. writeln;
  44. iomwrm(output, a[i1, j1], n, n, rwa, numdig);
  45. writeln;
  46. writeln('term=', term: 2);
  47. writeln;
  48. if term = 1 then
  49. begin
  50. writeln('lambda=');
  51. writeln(' ': 10, 'Re', ' ': 10, 'Im');
  52. for i := 1 to n do
  53. writeln(lam[i1 + i - 1].re: numdig, ' ', lam[i1 + i - 1].im: numdig);
  54. writeln;
  55. writeln('eigenvectors:');
  56. for j := 1 to n do
  57. begin
  58. writeln('eig. vect. nr', j: 2);
  59. writeln(' ': 10, 'Re', ' ': 10, 'Im');
  60. for i := 1 to n do
  61. begin
  62. Write(x[i2 + i - 1, j2 + j - 1].re: numdig, ' ');
  63. writeln(x[i2 + i - 1, j2 + j - 1].im: numdig);
  64. end; {i}
  65. writeln;
  66. end; {j}
  67. writeln('residuals:');
  68. for j := 1 to n do
  69. begin
  70. writeln('residual nr', j: 2);
  71. writeln(' ': 10, 'Re', ' ': 10, 'Im');
  72. for i := 1 to n do
  73. begin
  74. r := 0;
  75. for k := 1 to n do
  76. r := r + a[i1 + i - 1, j1 + k - 1] * x[i2 + k - 1, j2 + j - 1].re;
  77. r := r - lam[i1 + j - 1].re * x[i2 + i - 1, j2 + j - 1].re;
  78. r := r + lam[i1 + j - 1].im * x[i2 + i - 1, j2 + j - 1].im;
  79. Write(r: numdig, ' ');
  80. r := 0;
  81. for k := 1 to n do
  82. r := r + a[i1 + i - 1, j1 + k - 1] * x[i2 + k - 1, j2 + j - 1].im;
  83. r := r - lam[i1 + j - 1].re * x[i2 + i - 1, j2 + j - 1].im;
  84. r := r - lam[i1 + j - 1].im * x[i2 + i - 1, j2 + j - 1].re;
  85. writeln(r: numdig);
  86. end; {i}
  87. writeln;
  88. end; {j}
  89. end; {term=1}
  90. writeln('-------------------------------------------');
  91. end; {l}
  92. Close(input);
  93. Close(output);
  94. end.
  95. program eigge3te;
  96. uses
  97. typ,
  98. iom,
  99. eig;
  100. const
  101. m1 = -9;
  102. m2 = 5;
  103. m3 = -11;
  104. m4 = 8;
  105. n1 = -10;
  106. n2 = 8;
  107. n3 = -9;
  108. n4 = 7;
  109. rwa = n2 - n1 + 1;
  110. rwx = n4 - n3 + 1;
  111. var
  112. i, j, l, nex, n, term, i1, j1, i2, j2, k: ArbInt;
  113. r: ArbFloat;
  114. a: array[m1..m2, n1..n2] of ArbFloat;
  115. x: array[m3..m4, n3..n4] of complex;
  116. lam: array[m1..m2] of complex;
  117. begin
  118. Write(' program results eigge3te');
  119. case sizeof(ArbFloat) of
  120. 4: writeln('(single)');
  121. 6: writeln('(real)');
  122. 8: writeln('(double)');
  123. end;
  124. Read(nex);
  125. writeln;
  126. writeln('number of examples', nex: 2);
  127. writeln;
  128. for l := 1 to nex do
  129. begin
  130. writeln('example number', l: 2);
  131. writeln;
  132. Read(i1, j1, i2, j2, n);
  133. iomrem(input, a[i1, j1], n, n, rwa);
  134. eigge3(a[i1, j1], n, rwa, lam[i1], x[i2, j2], rwx, term);
  135. writeln;
  136. writeln('A=');
  137. writeln;
  138. iomwrm(output, a[i1, j1], n, n, rwa, numdig);
  139. writeln;
  140. writeln('term=', term: 2);
  141. writeln;
  142. if term = 1 then
  143. begin
  144. writeln('lambda=');
  145. writeln(' ': 10, 'Re', ' ': 10, 'Im');
  146. for i := 1 to n do
  147. writeln(lam[i1 + i - 1].re: numdig, ' ', lam[i1 + i - 1].im: numdig);
  148. writeln;
  149. writeln('eigenvectors:');
  150. for j := 1 to n do
  151. begin
  152. writeln('eig. vect. nr', j: 2);
  153. writeln(' ': 10, 'Re', ' ': 10, 'Im');
  154. for i := 1 to n do
  155. begin
  156. Write(x[i2 + i - 1, j2 + j - 1].re: numdig, ' ');
  157. writeln(x[i2 + i - 1, j2 + j - 1].im: numdig);
  158. end; {i}
  159. writeln;
  160. end; {j}
  161. writeln('residuals:');
  162. for j := 1 to n do
  163. begin
  164. writeln('residual nr', j: 2);
  165. writeln(' ': 10, 'Re', ' ': 10, 'Im');
  166. for i := 1 to n do
  167. begin
  168. r := 0;
  169. for k := 1 to n do
  170. r := r + a[i1 + i - 1, j1 + k - 1] * x[i2 + k - 1, j2 + j - 1].re;
  171. r := r - lam[i1 + j - 1].re * x[i2 + i - 1, j2 + j - 1].re;
  172. r := r + lam[i1 + j - 1].im * x[i2 + i - 1, j2 + j - 1].im;
  173. Write(r: numdig, ' ');
  174. r := 0;
  175. for k := 1 to n do
  176. r := r + a[i1 + i - 1, j1 + k - 1] * x[i2 + k - 1, j2 + j - 1].im;
  177. r := r - lam[i1 + j - 1].re * x[i2 + i - 1, j2 + j - 1].im;
  178. r := r - lam[i1 + j - 1].im * x[i2 + i - 1, j2 + j - 1].re;
  179. writeln(r: numdig);
  180. end; {i}
  181. writeln;
  182. end; {j}
  183. end; {term=1}
  184. writeln('-------------------------------------------');
  185. end; {l}
  186. Close(input);
  187. Close(output);
  188. end.