求矩阵特征值的pascal代码。
多谢了。
可以发到我邮箱:[email protected]

解决方案 »

  1.   

    这个好象有点难度,一定要用PASCAL吗?MATLAB不行吗?
      

  2.   

    我记得OpenGL单元里有好多Matrix的函数,你找找看
      

  3.   

    按照求Eigenvalue的方法算就是了,貌似求Eigenvalue很简单的样子
      

  4.   

    这是以前解线性方程组写的一段代码,也许你可以参考一下:procedure a_equation(var A:matrx2;N:integer;var B:array of real);
    //AX=B,结果 A=A逆,B=A逆*B
    var
      IPIV,INDXR,INDXC:array[1..50] of integer;
      I,J,K,L,LL:integer;
      BIG,PIVINV,DUM:real;
      IROW,ICOL:integer;
      temp:array[1..50] of real;
    begin
      for J:=1 to N do
        temp[J]:=B[J-1];  for J:=1 to N do
        IPIV[J]:=0;  for I:=1 tO N do
        BEGIN
          BIG:=0;
          for j:=1 to N do
            begin
              if IPIV[J] <> 1 then
                BEGIN
                   for K:=1 to N do
                     begin
                       if IPIV[K] = 0 then
                         BEGIN
                           IF Abs(A[J,K]) >= BIG then
                             begin
                               BIG:=Abs(A[J,K]);
                               IROW:=J;
                               ICOL:=K;
                             end;
                         END
                       ELSE
                         BEGIN
                           if IPIV[K] > 1 then
                             begin
                                ShowMessage('系数矩阵不可逆!');
                                exit;
                              end;
                         END;                 end;
                END;
            end;
          IPIV[ICOL]:=IPIV[ICOL]+1;
          If IROW <> ICOL then
            begin
              for L:=1 to N do
                BEGIN
                  DUM:=A[IROW,L];
                  A[IROW,L]:=A[ICOL,L];
                  A[ICOL,L]:=DUM;
                END;
              DUM:=B[IROW];
              B[IROW]:=B[ICOL];
              B[ICOL]:=DUM;
            end;
          INDXR[I]:=IROW;
          INDXC[I]:=ICOL;
          if A[ICOL,ICOL] = 0 then
            begin
              ShowMessage('系数矩阵不可逆!');
              exit;
            end;
          PIVINV:=1/A[ICOL,ICOL];
          A[ICOL,ICOL]:=1;
          for L:=1 to N do
            A[ICOL,L]:=A[ICOL,L]*PIVINV;
          B[ICOL]:=B[ICOL]*PIVINV;
          for LL:=1 tO N do
            begin
              if LL <>  ICOL then
                BEGIN
                  DUM:=A[LL,ICOL];
                  A[LL,ICOL]:=0;
                  for L:=1 to N DO
                    A[LL,L]:=A[LL,L]-A[ICOL,L]*DUM;
                  B[LL]:=B[LL]-B[ICOL]*DUM;
                END;
            end;
        END;
       for L:=N Downto 1 do
         begin
           if INDXR[L] <> INDXC[L] then
             BEGIN
               for K:=1 TO N do
                 begin
                   DUM:=A[K,INDXR[L]];
                   A[K,INDXR[L]]:=A[K,INDXC[L]];
                   A[K,INDXC[L] ]:=DUM;
                 end;
             END;
         end;  for i:=1 to N do
        begin
          B[i-1]:=0;
          for j:=1 to N do
            B[i-1]:=B[i-1]+A[i,j]*temp[j];
        end;
    end;