00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00024
00025 #include <iostream>
00026
00027 #include <QTime>
00028
00029 #include <QVApplication>
00030 #include <QVPropertyContainer>
00031 #include <QVMatrix>
00032 #include <QVVector>
00033 #include <QVPermutation>
00034
00035 int main(int argc, char *argv[])
00036 {
00037 Q_UNUSED(argc);
00038 Q_UNUSED(argv);
00039
00040 std::cout << "************PSEUDOINVERSE*************\n";
00041
00042 QVMatrix A = QVMatrix(4,3, QVVector()
00043 << 1 << -2 << 4
00044 << -1 << 0 << 7
00045 << -4 << 6 << 4
00046 << 0 << 5 << 3 );
00047
00048 std::cout << "A:" << A << "\n";
00049 std::cout << "pseudoInverse(A):" << pseudoInverse(A) << "\n";
00050 std::cout << "pseudoInverse(A^T):" << pseudoInverse(A.transpose()) << "\n";
00051 std::cout << "A*pseudoInverse(A)*A:" << A*pseudoInverse(A)*A << "\n";
00052 std::cout << "pseudoInverse(A)*A*pseudoInverse(A):" << pseudoInverse(A)*A*pseudoInverse(A) << "\n";
00053
00054 QVVector u[2],v[2],values,s;
00055 u[0] << 1 << -2 << 2;
00056 u[0] = u[0] / u[0].norm2();
00057 u[1] << 2 << 1 << 0;
00058 u[1] = u[1] / u[1].norm2();
00059 v[0] << 3 << -1 << -2 << 0 << -2;
00060 v[0] = v[0] / v[0].norm2();
00061 v[1] << 0 << 2 << -2 << 0 << 1;
00062 v[1] = v[1] / v[1].norm2();
00063
00064 values << 3.25 << 0.75;
00065
00066 QVMatrix B, U, V;
00067 B = values[0]*(u[0].outerProduct(v[0])) + values[1]*(u[1].outerProduct(v[1]));
00068
00069 SingularValueDecomposition(B,U,s,V);
00070 std::cout << "u[0]:" << u[0] << "\n";
00071 std::cout << "u[1]:" << u[1] << "\n";
00072 std::cout << "v[0]:" << v[0] << "\n";
00073 std::cout << "v[1]:" << v[1] << "\n";
00074 std::cout << "values:" << values << "\n";
00075 std::cout << "B:" << B << "\n";
00076 std::cout << "U:" << U << "\n";
00077 std::cout << "s:" << s << "\n";
00078 std::cout << "V:" << V << "\n";
00079 std::cout << "SVD residual = " << SingularValueDecompositionResidual(B,U,s,V) << "\n";
00080
00081 std::cout << "************DETERMINANT**************\n";
00082
00083 QVMatrix C = QVMatrix(4,4, QVVector()
00084 << 1 << -2 << 4 << 5
00085 << -1 << 0 << -7 << 4
00086 << -4 << 6 << 4 << -2
00087 << 0 << 5 << 3 << 3);
00088 std::cout << "C: " << C << "\n";
00089 std::cout << "determinant(C): " << determinant(C) << "\n";
00090
00091 std::cout << "**********SOLVE HOMOGENEOUS**********\n";
00092 QVector<double> x;
00093 SolveHomogeneous(B, x, LAPACK_THIN_DGESVD);
00094 std::cout << "B: " << B << "\n";
00095 std::cout << "x: " << x << "\n";
00096 std::cout << "B*x: " << B*x << "\n";
00097
00098 return 0;
00099 }