eigts4te.pas 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. program eigts4te;
  2. uses
  3. iom,
  4. typ,
  5. omv,
  6. eig;
  7. const
  8. n1 = -10;
  9. n2 = 8;
  10. n3 = -11;
  11. n4 = 9;
  12. rwx = n4 - n3 + 1;
  13. rwa = rwx;
  14. var
  15. i, j, ex, nex, m2, k1, k2, n, term: ArbInt;
  16. d, cd: array[n1..n2] of ArbFloat;
  17. a, e, x: array[n1..n2, n3..n4] of ArbFloat;
  18. lam: array[n1..n2] of ArbFloat;
  19. begin
  20. Write(' program results eigts4te');
  21. case sizeof(ArbFloat) of
  22. 4: writeln('(single)');
  23. 6: writeln('(real)');
  24. 8: writeln('(double)');
  25. end;
  26. Read(nex);
  27. writeln;
  28. writeln('number of examples', nex: 2);
  29. for ex := 1 to nex do
  30. begin
  31. writeln;
  32. writeln('example number', ex: 2);
  33. Read(n, k1, k2);
  34. iomrev(input, d[1], n);
  35. iomrev(input, cd[2], n - 1);
  36. eigts4(d[1], cd[2], n, k1, k2, lam[k1], x[1, k1], rwx, m2, term);
  37. writeln;
  38. writeln('diag = ');
  39. iomwrv(output, d[1], n, numdig);
  40. writeln;
  41. writeln('codiag = ');
  42. iomwrv(output, cd[2], n - 1, numdig);
  43. writeln;
  44. writeln('k1=', k1: 2, ' k2=', k2: 2);
  45. writeln;
  46. writeln('term=', term: 2);
  47. if term = 1 then
  48. begin
  49. writeln;
  50. writeln('lambda=');
  51. iomwrv(output, lam[k1], k2 - k1 + 1, numdig);
  52. writeln;
  53. writeln(' m2 =', m2: 2);
  54. writeln;
  55. writeln(' X=');
  56. iomwrm(output, x[1, k1], n, m2 - k1 + 1, rwx, numdig);
  57. for i := 1 to n do
  58. for j := 1 to n do
  59. a[i, j] := 0;
  60. for i := 1 to n do
  61. a[i, i] := d[i];
  62. for i := 1 to n - 1 do
  63. a[1 + i, i] := cd[i + 1];
  64. for i := 1 to n - 1 do
  65. a[i, i + 1] := cd[i + 1];
  66. writeln;
  67. writeln('AX-lambda.X = ');
  68. omvmmm(a[1, 1], n, n, rwa, x[1, k1], m2 - k1 + 1, rwx, e[1, k1], rwx);
  69. for j := 1 to m2 - k1 + 1 do
  70. for i := 1 to n do
  71. e[i, j + k1 - 1] := e[i, j + k1 - 1] - lam[k1 + j - 1] * x[i, j + k1 - 1];
  72. iomwrm(output, e[1, k1], n, m2 - k1 + 1, rwx, numdig);
  73. end;
  74. writeln('-----------------------------------------------------');
  75. end;
  76. Close(input);
  77. Close(output);
  78. end.
  79. program eigts4te;
  80. uses
  81. iom,
  82. typ,
  83. omv,
  84. eig;
  85. const
  86. n1 = -10;
  87. n2 = 8;
  88. n3 = -11;
  89. n4 = 9;
  90. rwx = n4 - n3 + 1;
  91. rwa = rwx;
  92. var
  93. i, j, ex, nex, m2, k1, k2, n, term: ArbInt;
  94. d, cd: array[n1..n2] of ArbFloat;
  95. a, e, x: array[n1..n2, n3..n4] of ArbFloat;
  96. lam: array[n1..n2] of ArbFloat;
  97. begin
  98. Write(' program results eigts4te');
  99. case sizeof(ArbFloat) of
  100. 4: writeln('(single)');
  101. 6: writeln('(real)');
  102. 8: writeln('(double)');
  103. end;
  104. Read(nex);
  105. writeln;
  106. writeln('number of examples', nex: 2);
  107. for ex := 1 to nex do
  108. begin
  109. writeln;
  110. writeln('example number', ex: 2);
  111. Read(n, k1, k2);
  112. iomrev(input, d[1], n);
  113. iomrev(input, cd[2], n - 1);
  114. eigts4(d[1], cd[2], n, k1, k2, lam[k1], x[1, k1], rwx, m2, term);
  115. writeln;
  116. writeln('diag = ');
  117. iomwrv(output, d[1], n, numdig);
  118. writeln;
  119. writeln('codiag = ');
  120. iomwrv(output, cd[2], n - 1, numdig);
  121. writeln;
  122. writeln('k1=', k1: 2, ' k2=', k2: 2);
  123. writeln;
  124. writeln('term=', term: 2);
  125. if term = 1 then
  126. begin
  127. writeln;
  128. writeln('lambda=');
  129. iomwrv(output, lam[k1], k2 - k1 + 1, numdig);
  130. writeln;
  131. writeln(' m2 =', m2: 2);
  132. writeln;
  133. writeln(' X=');
  134. iomwrm(output, x[1, k1], n, m2 - k1 + 1, rwx, numdig);
  135. for i := 1 to n do
  136. for j := 1 to n do
  137. a[i, j] := 0;
  138. for i := 1 to n do
  139. a[i, i] := d[i];
  140. for i := 1 to n - 1 do
  141. a[1 + i, i] := cd[i + 1];
  142. for i := 1 to n - 1 do
  143. a[i, i + 1] := cd[i + 1];
  144. writeln;
  145. writeln('AX-lambda.X = ');
  146. omvmmm(a[1, 1], n, n, rwa, x[1, k1], m2 - k1 + 1, rwx, e[1, k1], rwx);
  147. for j := 1 to m2 - k1 + 1 do
  148. for i := 1 to n do
  149. e[i, j + k1 - 1] := e[i, j + k1 - 1] - lam[k1 + j - 1] * x[i, j + k1 - 1];
  150. iomwrm(output, e[1, k1], n, m2 - k1 + 1, rwx, numdig);
  151. end;
  152. writeln('-----------------------------------------------------');
  153. end;
  154. Close(input);
  155. Close(output);
  156. end.