eigbs3te.pas 3.9 KB

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