Sample source codes of SVD (singular value decomposition) are shown here. Note that these codes simply calls the function defined in each software library. SVD programming codes witten by MATLAB, and Python&numpy are shown. SVD program written in C/C++ is also available. SVD codes of Eigen library and SVD codes of OpenCV are shown.
ROW = randi([2 10]);
COL = randi([2 10]);
A = 99.9*rand(ROW, COL);
[U,W,V] = svd(A,'econ');
VT = V.';
disp("SVD result")
disp("A =")
disp(A)
disp("U =")
disp(U)
disp("W =")
disp(W)
disp("V^T =")
disp(VT)
check = U * W * VT;
disp("Check")
disp("U W V^T =")
disp(check)
disp("Coincide with A")
import numpy as 
np
def main():
   
ROW = np.random.randint(2,
10)
   
COL = np.random.randint(2,
10)
   
A = np.random.uniform(0.0,
99.9, (ROW, COL))
   
U,W,VT = np.linalg.svd(A, full_matrices=False)
    print("SVD result")
    print("A=", A)
    print("U=", U)
    print("W=", W)
    print("V^T=", 
VT)
   
matw = np.diag(W)
   
check = np.dot(np.dot(U, matw), VT)
    print("Check")
    print("U W V^T=", 
check)
    print("Coincide with 
A")
if __name__ == 
'__main__':
    main()
import numpy as 
np
import cv2
def main():
    ROW = np.random.randint(2,
10)
    COL = np.random.randint(2,
10)
    A = np.random.uniform(0.0,
99.9, (ROW, COL))
    W,U,VT = cv2.SVDecomp(A)
    print("SVD 
result")
    print("A=", 
A)
    print("U=", 
U)
    print("W=", 
W)
    print("V^T=", 
VT)
    matw = np.diagflat(W)
    check = np.dot(np.dot(U, matw), VT)
    print("Check")
    print("U 
W V^T=", check)
    print("Coincide 
with A")
if __name__ == 
'__main__':
    main()
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
#include "Eigen/Core"
#include "Eigen/SVD"
using namespace Eigen;
int main()
{
    srand((unsigned)time(NULL));
    int ROW = rand() % 8 + 2;
    int COL = rand() % 8 + 2;
    MatrixXd A = (MatrixXd::Random(ROW, 
COL) + MatrixXd::Ones(ROW, 
COL)) / 2.0 * 
99.9;
    JacobiSVD<MatrixXd> 
svd(A, ComputeThinU | 
ComputeThinV);
    MatrixXd VT = 
svd.matrixV().transpose();
    cout <<
"SVD result" << 
endl << endl;
    cout <<
"A=" << endl
<< A << endl
<< endl;
    cout <<
"U=" << endl
<< svd.matrixU() << 
endl << endl;
    cout <<
"W=" << endl
<< svd.singularValues()
<< endl << 
endl;
    cout <<
"V^T=" << endl
<< VT << endl
<< endl;
    cout << endl;
    MatrixXd W = 
svd.singularValues().asDiagonal();
    MatrixXd check = 
svd.matrixU() * W * 
VT;
    cout <<
"Check" << 
endl << endl;
    cout <<
"U W V^T=" << 
endl << kenzan << 
endl << endl;
    cout <<
"Coincide with A" << 
endl << endl;
    cout <<
"Push enter" << 
endl;
    cin.get();
    return 0;
}
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
#include "Eigen/Core"
#include "Eigen/SVD"
using namespace Eigen;
int main()
{
    srand((unsigned)time(NULL));
    int ROW = rand() % 8 + 2;
    int COL = rand() % 8 + 2;
    MatrixXd A = (MatrixXd::Random(ROW, 
COL) + MatrixXd::Ones(ROW, 
COL)) / 2.0 * 
99.9;
    BDCSVD<MatrixXd> 
svd(A, ComputeThinU | 
ComputeThinV);
    MatrixXd VT = 
svd.matrixV().transpose();
    cout <<
"SVD result" << 
endl << endl;
    cout <<
"A=" << endl
<< A << endl
<< endl;
    cout <<
"U=" << endl
<< svd.matrixU() << 
endl << endl;
    cout <<
"W=" << endl
<< svd.singularValues()
<< endl << 
endl;
    cout <<
"V^T=" << endl
<< VT << endl
<< endl;
    cout << endl;
    MatrixXd W = 
svd.singularValues().asDiagonal();
    MatrixXd check = 
svd.matrixU() * W * 
VT;
    cout <<
"Check" << 
endl << endl;
    cout <<
"U W V^T=" << 
endl << kenzan << 
endl << endl;
    cout <<
"Coincide with A" << 
endl << endl;
    cout <<
"Push enter" << 
endl;
    cin.get();
    return 0;
}
// Include directory C:\OpenCV3.1\build\include
// Library directory (x64) 
C:\OpenCV3.1\build\x64\vc14\lib
// PATH (x64) C:\OpenCV3.1\build\x64\vc14\bin
#if _DEBUG
#pragma comment(lib,
"opencv_world310d.lib")
#else
#pragma comment(lib,
"opencv_world310.lib")
#endif
#include <time.h>
#include <iostream>
using namespace std;
#include 
<opencv2/opencv.hpp>
using namespace cv;
int main()
{
    RNG gen(getTickCount());
    int ROW = gen.uniform(2, 
10);
    int COL = gen.uniform(2, 
10);
    Mat A(ROW, COL,
CV_64F);
    gen.fill(A, RNG::UNIFORM, 
0.0, 99.9);
    SVD svd(A);
    cout <<
"SVD result" << 
endl << endl;
    cout <<
"A=" << A
<< endl << 
endl;
    cout <<
"U=" << svd.u
<< endl << 
endl;
    cout <<
"W=" << svd.w
<< endl << 
endl;
    cout <<
"V^T=" << 
svd.vt << endl << 
endl;
    cout << endl;
    Mat matw =
Mat::diag(svd.w);
    Mat check = svd.u
* matw * 
svd.vt;
    cout <<
"Check" << 
endl << endl;
    cout <<
"U W V^T=" << 
check << endl << 
endl;
    cout <<
"Coincide with A" << 
endl << endl;
    cout <<
"Push enter" << 
endl;
    cin.get();
    return 0;
}
// Include directory C:\OpenCV2.4.11\build\include
// Library directory (x86) 
C:\OpenCV2.4.11\build\x86\vc12\lib
// Library directory (x64) 
C:\OpenCV2.4.11\build\x64\vc12\lib
// PATH (x86) C:\OpenCV2.4.11\build\x86\vc12\bin
// PATH (x64) C:\OpenCV2.4.11\build\x64\vc12\bin
#if _DEBUG
#pragma comment(lib,
"opencv_core2411d.lib")
#pragma comment(lib,
"opencv_highgui2411d.lib")
#pragma comment(lib,
"opencv_imgproc2411d.lib")
#else
#pragma comment(lib,
"opencv_core2411.lib")
#pragma comment(lib,
"opencv_highgui2411.lib")
#pragma comment(lib,
"opencv_imgproc2411.lib")
#endif
#include 
<opencv2/opencv.hpp>
using namespace cv;
#include <stdio.h>
#include <conio.h>
#include <time.h>
int main()
{
    srand((unsigned)time(NULL));
    int ROW = rand() % 8 + 2;
    int COL = rand() % 8 + 2;
    Mat A(ROW, COL,
CV_64F);
    for (int 
i = 0; i < A.rows; i++) {
        for 
(int j = 0; j < A.cols; j++) {
            A.at<double>(i, 
j) = 99.9 * (double)rand() / (double)RAND_MAX;
        }
    }
    SVD svd(A);
    printf("SVD 
result\n");
    printf("\n");
    printf("A=\n");
    for (int 
i = 0; i < A.rows; i++) {
        for 
(int j = 0; j < A.cols; j++) {
           
printf("%1.2f ", 
A.at<double>(i, j));
        }
        printf("\n");
    }
    printf("U=\n");
    for (int 
i = 0; i < svd.u.rows; i++) {
        for 
(int j = 0; j < svd.u.cols; j++) {
           
printf("%1.2f ", 
svd.u.at<double>(i, j));
        }
        printf("\n");
    }
    printf("W=\n");
    for (int 
i = 0; i < svd.w.rows; i++) {
        for 
(int j = 0; j < svd.w.cols; j++) {
           
printf("%1.2f ", 
svd.w.at<double>(i, j));
        }
        printf("\n");
    }
    printf("V^T=\n");
    for (int 
i = 0; i < svd.vt.rows; i++) {
        for 
(int j = 0; j < svd.vt.cols; j++) {
           
printf("%1.2f ", 
svd.vt.at<double>(i, j));
        }
        printf("\n");
    }
    printf("\n");
    Mat matw =
Mat::zeros(svd.w.rows, svd.w.rows,
CV_64F);
    for (int 
i = 0; i < svd.w.rows; i++) {
        matw.at<double>(i, 
i) = svd.w.at<double>(i, 0);
    }
    Mat check = svd.u
* matw * 
svd.vt;
    printf("Check\n");
    printf("U 
W V^T=\n");
    for (int 
i = 0; i < check.rows; i++) {
        for 
(int j = 0; j < check.cols; j++) {
           
printf("%1.2f ", 
check.at<double>(i, j));
        }
        printf("\n");
    }
    printf("Coincide 
with A\n");
    _getch();
    return 0;
}
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include "nr3/nr3.h"
#include "nr3/svd.h"
int main()
{
    srand((unsigned)time(NULL));
    int ROW = rand() % 8 + 2;
    int COL = rand() % 8 + 2;
    MatDoub A(ROW, COL);
    for (int 
i = 0; i < ROW; i++) {
        for 
(int j = 0;j < COL;j++) {
            A[i][j] 
= 99.9 * (double)rand() / (double)RAND_MAX;
        }
    }
    SVD svd(A);
    printf("SVD 
result\n");
    printf("\n");
    printf("A=\n");
    for (int 
i = 0; i < ROW; i++) {
        for 
(int j = 0; j < COL; j++) {
           
printf("%1.2f ", 
A[i][j]);
        }
        printf("\n");
    }
    printf("U=\n");
    for (int 
i = 0; i < svd.u.nrows(); i++) {
        for 
(int j = 0; j < svd.u.ncols(); j++) {
           
printf("%1.2f ", 
svd.u[i][j]);
        }
        printf("\n");
    }
    printf("W=\n");
    for (int 
i = 0; i < svd.w.size(); i++) {
        printf("%1.2f\n", 
svd.w[i]);
    }
    printf("V^T=\n");
    for (int 
i = 0; i < svd.v.ncols(); i++) {
        for 
(int j = 0; j < svd.v.nrows(); j++) {
           
printf("%1.2f ", 
svd.v[j][i]);
        }
        printf("\n");
    }
    printf("\n");
    MatDoub check(ROW, COL);
    for (int 
i = 0; i < ROW; i++) {
        for 
(int j = 0; j < COL; j++) {
           
double val = 0.0;
           
for (int k = 
0; k < svd.u.ncols(); k++) {
                
val += svd.u[i][k] 
* svd.w[k] * 
svd.v[j][k];
            }
            check[i][j] 
= val;
        }
    }
    printf("Check\n");
    printf("U 
W V^T=\n");
    for (int 
i = 0; i < check.nrows(); i++) {
        for 
(int j = 0; j < check.ncols(); j++) {
           
printf("%1.2f ", 
check[i][j]);
        }
        printf("\n");
    }
    printf("Coincide 
with A\n");
    printf("Push 
any key\n");
    _getch();
    return 0;
}