eigbs3te.pas 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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.