Exemplo n.º 1
0
 public static Matrix DMD(Vector diagmat1, Matrix mat, Vector diagmat2)
 {
     if (DMD_selftest)
     #region selftest
     {
         HDebug.ToDo("check");
         DMD_selftest = false;
         Vector td1 = new double[] { 1, 2, 3 };
         Vector td2 = new double[] { 4, 5, 6 };
         Matrix tm  = new double[, ] {
             { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }
         };
         Matrix dmd0 = LinAlg.Diag(td1) * tm * LinAlg.Diag(td2);
         Matrix dmd1 = LinAlg.DMD(td1, tm, td2);
         double err  = (dmd0 - dmd1).HAbsMax();
         HDebug.Assert(err == 0);
     }
     #endregion
     Matrix DMD = mat.Clone();
     for (int c = 0; c < mat.ColSize; c++)
     {
         for (int r = 0; r < mat.RowSize; r++)
         {
             double v0 = mat[c, r];
             double v1 = diagmat1[c] * v0 * diagmat2[r];
             if (v0 == v1)
             {
                 continue;
             }
             DMD[c, r] = v1;
         }
     }
     return(DMD);
 }