⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 svdcmp.dem

📁 Delphi Pascal 数据挖掘领域算法包 数值算法大全
💻 DEM
字号:
PROGRAM d2r9 (input,output,dfile);
(* driver for routine SVDCMP *)
LABEL 10,99;
CONST
   np = 20;
   mp = 20;
TYPE
   glnparray = ARRAY [1..np] OF real;
   glmpbynp = ARRAY [1..mp,1..np] OF real;
   glnpbynp = ARRAY [1..np,1..np] OF real;
VAR
   j,k,l,m,n : integer;
   a,u : glmpbynp;
   v : glnpbynp;
   w : glnparray;
   dfile : text;

(*$I MODFILE.PAS *)
(*$I SVDCMP.PAS *)

BEGIN
(* read input matrices *)
   glopen(dfile,'matrx3.dat');
10:   readln(dfile);
   readln(dfile);
   readln(dfile,m,n);
   readln(dfile);
(* copy original matrix into u *)
   FOR k := 1 to m DO BEGIN
      FOR l := 1 to n DO BEGIN
         read(dfile,a[k,l]);
         u[k,l] := a[k,l]
      END;
      readln(dfile)
   END;
   IF (n > m) THEN BEGIN
      FOR k := m+1 to n DO BEGIN
         FOR l := 1 to n DO BEGIN
            a[k,l] := 0.0;
            u[k,l] := 0.0
         END
      END;
      m := n
   END;
(* perform decomposition *)
   svdcmp(u,m,n,np,np,w,v);
(* write results *)
   writeln ('Decomposition matrices:');
   writeln ('Matrix u');
   FOR k := 1 to m DO BEGIN
      FOR l := 1 to n DO BEGIN
         write (u[k,l]:12:6);
      END;
      writeln
   END;
   writeln ('Diagonal of matrix w');
   FOR k := 1 to n DO BEGIN
      write(w[k]:12:6)
   END;
   writeln;
   writeln ('Matrix v-transpose');
   FOR k := 1 to n DO BEGIN
      FOR l := 1 to n DO BEGIN
         write(v[l,k]:12:6)
      END;
      writeln
   END;
   writeln;
   writeln ('Check product against original matrix:');
   writeln ('Original matrix:');
   FOR k := 1 to m DO BEGIN
      FOR l := 1 to n DO BEGIN
         write (a[k,l]:12:6)
      END;
      writeln
   END;
   writeln ('Product u*w*(v-transpose):');
   FOR k := 1 to m DO BEGIN
      FOR l := 1 to n DO BEGIN
         a[k,l] := 0.0;
         FOR j := 1 to n DO BEGIN
            a[k,l] := a[k,l]+u[k,j]*w[j]*v[l,j]
         END
      END;
      FOR l := 1 to n-1 DO write(a[k,l]:12:6);
      writeln(a[k,n]:12:6);
   END;
   writeln ('***********************************');
   IF eof(dfile) THEN GOTO 99;
   writeln ('press RETURN for next problem');
   readln;
   GOTO 10;
99:   close(dfile)
END.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -