home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / MISC / MATH / CLA20.ZIP / LADEMO.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-02-08  |  3.2 KB  |  123 lines

  1. program LADemo;
  2.  
  3. { --------------------------------------------------------------------------
  4.                                   LADEMO.PAS
  5.  
  6.     ---> A  sample that shows how to use the LINALG unit to calculate
  7.          eigenvalues,  eigenvectors,   characteristic   and   minimal
  8.          polynomials of a given matrix.
  9.  
  10.          (C) 1990, 1992 by Lenimar N. Andrade (CCENDM03@BRUFPB.BITNET)
  11.  
  12.   -------------------------------------------------------------------------- }
  13.  
  14. {$E+,N+,M 65520, 0, 655200}
  15.  
  16. uses
  17.   BasFPTC, LinAlg, Matrices, Equation, Crt;
  18.  
  19. procedure Pause;
  20.  
  21. var ch: char;
  22.  
  23. begin
  24.   Writeln;
  25.   Write('Press any key to continue.');
  26.   ch := ReadKey;
  27.   Writeln;
  28. end;
  29.  
  30. var
  31.   mat: matrix;
  32.   p: polynomial;
  33.   w: eigenvalues;
  34.   min: minimal;
  35.   rvec: RealEigenvector;
  36.   i, j, k: byte;
  37.  
  38. begin
  39.   Writeln;
  40.   Writeln('CALCULATING EIGENVALUES, EIGENVECTORS, ... OF A MATRIX');
  41.   Writeln;
  42.   Write('Which is matrix''s order? ');
  43.   Readln(mat.m);
  44.   mat.n := mat.m;
  45.  
  46.   Writeln;
  47.   Writeln('Enter the elements of matrix M:');
  48.   Writeln;
  49.   for i := 1 to mat.m do
  50.   begin
  51.     Write('Row ', i, ' : ');
  52.     for j := 1 to mat.n do
  53.       Read(mat.a[i, j])
  54.   end;
  55.  
  56.   { CALCULATING THE CHARACTERISTIC POLYNOMIAL p OF mat }
  57.   CharPoly(mat, p);
  58.   Writeln;
  59.   Writeln('Coefficients of characteristic polynomial: ');
  60.   for i := p.degree downto 0 do
  61.     Write(p.coef[i]:10:2);
  62.   Writeln;
  63.   Pause;
  64.  
  65.   { CALCULATING THE EIGENVALUES OF mat }
  66.   CalcEigenvalues(p, w);
  67.   if (w.QuantRe > 0) then
  68.   begin
  69.     Writeln;
  70.     Writeln('Real eigenvalues:');
  71.     for i := 1 to w.QuantRe do
  72.       Writeln(w.EigenvalueRe[i].x :6:2, '   ---> multiplicity = ',
  73.               w.EigenvalueRe[i].mult);
  74.   end;
  75.   if (w.QuantComplex > 0) then
  76.   begin
  77.     Writeln;
  78.     Writeln('Complex eigenvalues:');
  79.     for i := 1 to w.QuantComplex do
  80.     begin
  81.       Writeln(w.EigenvalueCx[i].a :6:2, ' + i ', w.EigenvalueCx[i].b :6:2,
  82.               ' ---> multiplicity = ', w.EigenvalueCx[i].mult);
  83.       Writeln(w.EigenvalueCx[i].a :6:2, ' - i ', w.EigenvalueCx[i].b :6:2,
  84.               ' ---> multiplicity = ', w.EigenvalueCx[i].mult);
  85.     end;
  86.   end;
  87.   Pause;
  88.  
  89.   { CALCULATING THE REAL EIGENVECTORS }
  90.   Writeln;
  91.   if (w.QuantRe > 0) then Writeln('Real eigenvectors:');
  92.   for i := 1 to w.QuantRe do
  93.   begin
  94.     CalcEigenvectors(mat, w.EigenvalueRe[i].x, rvec);
  95.     for j := 1 to rvec.dim do
  96.     begin
  97.       for k := 1 to rvec.n do
  98.         Write(rvec.v[j, k] :6:2);
  99.       Writeln;
  100.     end;
  101.     Writeln;
  102.   end;
  103.   Pause;
  104.  
  105.   { CALCULATING THE MINIMAL POLYNOMIAL }
  106.   MinPoly(mat, w, min);
  107.   Writeln;
  108.   Writeln('The minimal polynomial is the product  of factors  of  form');
  109.   Writeln('       n');
  110.   Writeln('(x - r) , where each r and its respective n is listed below:');
  111.   Writeln;
  112.   for i := 1 to w.QuantRe do
  113.     Writeln('r = ', w.EigenvalueRe[i].x :6:2, ' ---> n = ', min.expo[i]);
  114.   for i := 1 to w.QuantComplex do
  115.   begin
  116.     Writeln('r = ', w.EigenvalueCx[i].a :6:2, ' + i ',
  117.                      w.EigenvalueCx[i].b :6:2, ' ---> n = ', min.expo[i]);
  118.     Writeln('r = ', w.EigenvalueCx[i].a :6:2, ' - i ',
  119.                      w.EigenvalueCx[i].b :6:2, ' ---> n = ', min.expo[i]);
  120.   end;
  121.  
  122. end.
  123.