eigts3te.pas 3.7 KB

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