C++ Armadillo :: pseudo-inverse














































C++ Armadillo :: pseudo-inverse



---------------------------------------------------------------------------------------------------------------
Description::
This is the basic C++ program of C++ armadillo library which shows how to find psuedo inverse of the given matrix. It can be carried out by the help of inbuilt function "pinv" in armadillo library.
  • The computation is based on singular value decomposition
  • The tolerance argument is optional
  • The default tolerance is max(m,n)*max_sv*datum::eps, where:
    • m = number of rows and n = number of columns in A
    • max_sv = maximal singular value of A
    • datum::eps = difference between 1 and the least value greater than 1 that is representable
  • Any singular values less than tolerance are treated as zero
  • The method argument is optional; method is either "dc" or "std"
    • "dc" indicates divide-and-conquer method (default setting)
    • "std" indicates standard method
    • the divide-and-conquer method provides slightly different results than the standard method, but is considerably faster for large matrices
  • If the decomposition fails:
    • B = pinv(A) resets B and throws a std::runtime_error exception
    • pinv(B,A) resets B and returns a bool set to false (exception is not thrown)
Source:http://arma.sourceforge.net
---------------------------------------------------------------------------------------------------------------
Program::

#include <iostream>
#include <armadillo>
using namespace std;
using namespace arma;

int main()
{
//initialize the random generator
//Create a 4 x 5 random matrix and printing it
mat A = randu<mat>(4,5); //random matrix of size 4x5 (generared by this syntax)
mat B = pinv(A); // use default tolerance mat C = pinv(A, 0.01); // set tolerance to 0.01
cout << "Matrix A::\n"<<endl;
cout<< A << endl;
cout << "Matrix B(p-Inverse)::\n"<<endl;
cout << B << endl;
cout << "Matrix C::\n"<<endl;
cout << C << endl;
return 0; }
---------------------------------------------------------------------------------------------------------------
Commands to run program on terminal::
g++ filename.cpp -o objectname -O2 -larmadillo

$ ./objectname
---------------------------------------------------------------------------------------------------------------
Output::

Matrix A:: 0.7868 0.0193 0.5206 0.1400 0.4998 0.2505 0.4049 0.3447 0.5439 0.4194 0.7107 0.2513 0.2742 0.5219 0.7443 0.9467 0.0227 0.5610 0.8571 0.2492 Matrix B(p-Inverse):: 0.2018 -1.2532 0.6697 0.4844 0.1658 1.5798 -0.4228 -0.5809 1.9145 1.9283 -2.4930 -0.0942 -1.5113 0.1178 0.4900 0.9748 0.1057 -0.1299 1.4217 -0.9153 Matrix C:: 0.2018 -1.2532 0.6697 0.4844 0.1658 1.5798 -0.4228 -0.5809 1.9145 1.9283 -2.4930 -0.0942 -1.5113 0.1178 0.4900 0.9748 0.1057 -0.1299 1.4217 -0.9153

More Articles of Shubham Loya:

Name Views Likes
C++ OpenCV cv::trace() 1659 1
C++ Armadillo :: Real and Imaginary part 1749 1
C++ OpenCV cv::perspectiveTransform() 5569 1
C++ Armadillo :: find_nonfinite 841 2
C++ Armadillo introduction and installation 626 1
C++ Armadillo :: Kron 1393 1
C++ Armadillo :: Accessing row and column and operations on it 1538 1
C++ Armadillo :: cond 518 2
C++ Armadillo :: pseudo-inverse 3037 1
C++ OpenCV cv::flip() 2100 1
C++ OpenCV cv::transpose() 7316 1
C++ Armadillo :: any 552 2
C++ Armadillo :: Max and Min of matrices 981 1
C++ OpenCV cv::pow() 2516 1
C++ Armadillo :: fliplr and flipud 1072 2
C++ Armadillo :: Sort 1285 1
C++ Armadillo :: Determinant of Matrix 955 1
C++ Armadillo :: Indices of Unique elements of matrix 1015 1
C++ Armadillo :: eps 524 3
C++ Armadillo :: Inverse 1674 1
C++ Armadillo :: Transpose of Matrix 1328 1
C++ Armadillo :: Basic Arithmetic Operations 483 1
C++ Armadillo :: Cross Product of vectors 1384 4
C++ OpenCV program to play a video 1328 1
C++ Armadillo :: Diagonal of Matrix 1020 1
C++ Armadillo :: Absolute value of Matrix 1240 1
C++ Armadillo :: Conj 509 2
C++ Armadillo :: expmat 997 2
C++ OpenCV Input from Camera 2089 1
C++ OpenCV program to convert BGR image to grayscale image 6105 1
C++ Armadillo :: Intersect 811 2
C++ Armadillo :: Nonzeros 1056 2
C++ Armadillo :: Dot Product of vectors 1745 2
C++ OpenCV:: Transforming BGR image to Grey scale image 626 2
C++ OpenCV to rotate an image 11485 1
C++ Armadillo :: Unique elements of matrix 863 1
C++ Armadillo :: Log Determinant 840 1
C++ Armadillo :: Sort_index 1600 2
C++ Armadillo :: Max Min 1704 1
C++ Armadillo :: Shift 950 1
C++ Armadillo :: Square root of Matrix 1836 1
C++ OpenCV cv::cvtColor() 2473 1

Comments