| 2.1.17.6.10 SVD
 DescriptionSingular value decomposition of complex matrix
 Get the diagonal matrix of Singular value decomposition of complex matrix
 Get the diagonal matrix of Singular value decomposition of real matrix
 Singular value decomposition of real matrix
 Syntaxint SVD( matrix<complex> & matSource, matrix & matS, matrix<complex> & matU, matrix<complex> & matV ) 
 int SVD( matrix<complex> & matSource, matrix & matS ) 
 int SVD( matrix & matSource, matrix & matS ) 
 int SVD( matrix & matSource, matrix & matS, matrix & matU, matrix & matV ) Parameters matSource[input]The source matrix matS[output]A diagonal matrix of Singular value decomposition matU[output]A unitary matrix of Singular value decomposition matV[input]A unitary matrix of Singular value decomposition
 
  matSource[input]The source matrix matS[output]A diagonal matrix of Singular value decomposition
 
  matSource[input]The source matrix matS[output]A diagonal matrix of Singular value decomposition
 
  matSource[input]The source matrix matS[output]A diagonal matrix of Singular value decomposition matU[output]A unitary matrix of Singular value decomposition matV[input]A unitary matrix of Singular value decomposition
 ReturnReturns 0 on successful exit
 Returns 0 on successful exit
 Returns 0 on successful exit
 ExamplesEX1
 int SVD_ex1()
{
   matrix<complex> matSource = {{1+3i, 2+4i, 3+2i},{5+8i, 6+9i, 7+10i},{9+12i, 10+1i, 11+3i}};
   printf("The source complex matrix:\n");
   int ii, jj;
   int nNumCols = matSource.GetNumCols();
   int nNumRows = matSource.GetNumRows();
   for(ii = 0; ii < nNumRows; ii++)
   {
       for(jj = 0; jj < nNumCols; jj++)
           out_complex("", matSource[ii][jj]);
       printf("\n");    
   }
   
   matrix matS;
   matrix<complex> matU, matV;
   int nRet = SVD(matSource, matS, matU, matV);
   if(nRet != 0)
   {
       printf("SVD failed!");
       return -1;
   }
   printf("The result three matrices are:\n");
   printf("S:\n");
   for(ii = 0; ii < nNumRows; ii++)
   {
       for(jj = 0; jj < nNumCols; jj++)
           printf("\t%f", matS[ii][jj]);
       printf("\n");    
   }
   
   printf("U:\n");
   for(ii = 0; ii < matU.GetNumRows(); ii++)
   {
       for(jj = 0; jj < matU.GetNumCols(); jj++)
           out_complex("", matU[ii][jj]);
       printf("\n");    
   }
   
   printf("V:\n");
   for(ii = 0; ii < matV.GetNumRows(); ii++)
   {
       for(jj = 0; jj < matV.GetNumCols(); jj++)
           out_complex("\t", matV[ii][jj]);
       printf("\n");    
   }
        
   return 0;    
}EX2
 int SVD_ex2()
{
   matrix<complex> matSource = {{1+3i, 2+4i, 3+2i},{5+8i, 6+9i, 7+10i},{9+12i, 10+1i, 11+3i}};
   printf("The source complex matrix:\n");
   int ii, jj;
   int nNumCols = matSource.GetNumCols();
   int nNumRows = matSource.GetNumRows();
   for(ii = 0; ii < nNumRows; ii++)
   {
       for(jj = 0; jj < nNumCols; jj++)
           out_complex("", matSource[ii][jj]);
       printf("\n");    
   }
   
   matrix matS;
   //matrix<complex> matU, matV;
   int nRet = SVD(matSource, matS);
   if(nRet != 0)
   {
       printf("SVD failed!");
       return -1;
   }
   printf("The result matrix:\n");
   printf("S:\n");
   for(ii = 0; ii < nNumRows; ii++)
   {
       for(jj = 0; jj < nNumCols; jj++)
           printf("\t%f", matS[ii][jj]);
       printf("\n");    
   }
        
   return 0;    
}EX3
 int SVD_ex3()
 {
    matrix matSource = {{1,2,3},{5,6,7},{9,10,11}};
    printf("The source complex matrix:\n");
    int ii, jj;
    int nNumCols = matSource.GetNumCols();
    int nNumRows = matSource.GetNumRows();
    for(ii = 0; ii < nNumRows; ii++)
    {
        for(jj = 0; jj < nNumCols; jj++)
            out_complex("", matSource[ii][jj]);
        printf("\n");    
    }
    
    matrix matS;
    //matrix<complex> matU, matV;
    int nRet = SVD(matSource, matS);
    if(nRet != 0)
    {
        printf("SVD failed!");
        return -1;
    }
    printf("The result matrix:\n");
    printf("S:\n");
    for(ii = 0; ii < nNumRows; ii++)
    {
        for(jj = 0; jj < nNumCols; jj++)
            printf("\t%f", matS[ii][jj]);
        printf("\n");    
    }
    return 0;    
 }EX4
 int SVD_ex4()
{
   matrix matSource = {{1,2,3},{5,6,7},{9,10,11}};
   printf("The source complex matrix:\n");
   int ii, jj;
   int nNumCols = matSource.GetNumCols();
   int nNumRows = matSource.GetNumRows();
   for(ii = 0; ii < nNumRows; ii++)
   {
       for(jj = 0; jj < nNumCols; jj++)
           printf("\t%f", matSource[ii][jj]);
       printf("\n");    
   }
   
   matrix matS, matU, matV;
   int nRet = SVD(matSource, matS, matU, matV);
   if(nRet != 0)
   {
       printf("SVD failed!");
       return -1;
   }
   printf("The result three matrices are:\n");
   printf("S:\n");
   for(ii = 0; ii < nNumRows; ii++)
   {
       for(jj = 0; jj < nNumCols; jj++)
           printf("\t%f", matS[ii][jj]);
       printf("\n");    
   }
   
   printf("U:\n");
   for(ii = 0; ii < matU.GetNumRows(); ii++)
   {
       for(jj = 0; jj < matU.GetNumCols(); jj++)
           printf("\t%f", matU[ii][jj]);
       printf("\n");    
   }
   
   printf("V:\n");
   for(ii = 0; ii < matV.GetNumRows(); ii++)
   {
       for(jj = 0; jj < matV.GetNumCols(); jj++)
           printf("\t%f", matV[ii][jj]);
       printf("\n");    
   }
        
   return 0;    
}RemarkSee AlsoHeader to Includeorigin.h
 Reference |