#include <slate.h>
int main() {
//
// Take the tranpose of a Matrix.
//
Matrix<double> a(1,2,1,3,3.4);
a(1,2) = 5.9;
cout << a << endl;
cout << transpose(a) << endl;
//
// Also works for complex Matrices.
//
Matrix< complex<double> > c(1,2,1,3,complex<double>(2.0,1.0));
c(2,1) = complex<double>(4.0,-1.0);
cout << c << endl;
cout << transpose(c) << endl;
}
#include <slate.h>
int main() {
//
// Take the Hermitian conjugate of the Matrix. This is only sensible
// for complex Matrices.
//
Matrix< complex<double> > c(1,2,1,3,complex<double>(2.0,1.0));
c(2,1) = complex<double>(4.0,-1.0);
cout << c << endl;
cout << dag(c) << endl;
}
#include <slate.h>
int main() {
////////////////////////////////////////////////////////////////////////////
//
// Matrix
//
//
// Frobenius norm.
//
Matrix<double> a(1,3,1,3,3.4);
a(1,1) = 5.9;
a(3,3) = 18.0;
cout << a << endl;
cout << normFro(a) << endl;
//
// Matrix 1-norm.
//
cout << norm1(a) << endl;
//
// Matrix infinity-norm.
//
cout << normInf(a) << endl;
//
// Also works for complex Matrices.
//
Matrix< complex<double> > b(1,3,1,3,complex<double>(1.0,2.0));
b(1,1) = complex<double>(0.0,-1.0);
b(3,3) = complex<double>(5.0,5.0);
cout << b << endl;
cout << normFro(b) << endl;
cout << norm1(b) << endl;
cout << normInf(b) << endl;
// ///////////////////////////////////////////////////////////////////////
//
// Vector
//
//
// Vector 1-norm
//
Vector<double> c(1,4,-3.0);
c(1) = 7.0;
cout << c << endl;
cout << norm1(c) << endl;
//
// Vector 2-norm
//
cout << norm2(c) << endl;
//
// Vector infinity-norm
//
cout << normInf(c) << endl;
//
// Works for complex Vectors as well.
//
Vector< complex<double> > d(1,4,complex<double>(2.0,-6.0));
d(1) = complex<double>(9.0,10.0);
cout << d << endl;
cout << norm1(d) << endl;
cout << norm2(d) << endl;
cout << normInf(d) << endl;
}
#include <slate.h>
int main() {
//
// Take the trace of a Matrix. Only sensible for square matrices.
//
Matrix<double> a(1,3,1,3,3.4);
a(1,1) = 5.9;
cout << a << endl;
cout << trace(a) << endl;
//
// Also works for complex Matrices.
//
Matrix< complex<double> > c(1,3,1,3,complex<double>(2.0,1.0));
c(2,2) = complex<double>(4.0,-1.0);
cout << c << endl;
cout << trace(c) << endl;
}
#include <slate.h>
int main() {
//
// Want to find the determinant of:
//
// [ 2 3 1 2 ]
// [ -2 4 -1 5 ]
// [ 3 7 1/2 1 ]
// [ 6 9 3 7 ]
//
// create the matrix.
Matrix<double> m(4, 4);
m(1, 1) = 2.0; m(1, 2) = 3.0; m(1, 3) = 1.0; m(1, 4) = 2.0;
m(2, 1) = -2.0; m(2, 2) = 4.0; m(2, 3) = -1.0; m(2, 4) = 5.0;
m(3, 1) = 3.0; m(3, 2) = 7.0; m(3, 3) = 0.5; m(3, 4) = 1.0;
m(4, 1) = 6.0; m(4, 2) = 9.0; m(4, 3) = 3.0; m(4, 4) = 7.0;
// find the determinant.
double d = det(m);
cout << d << endl;
}
#include <slate.h>
int main() {
// Want to find the inverse of the following:
//
// [ 2 0 1 2 ]
// [ 1 1 0 2 ]
// [ 2 -1 3 1 ]
// [ 3 -1 4 3 ]
//
// create the matrix.
Matrix<double> m(4, 4);
m(1, 1) = 2; m(1, 2) = 0; m(1, 3) = 1; m(1, 4) = 2;
m(2, 1) = 1; m(2, 2) = 1; m(2, 3) = 0; m(2, 4) = 2;
m(3, 1) = 2; m(3, 2) = -1; m(3, 3) = 3; m(3, 4) = 1;
m(4, 1) = 3; m(4, 2) = -1; m(4, 3) = 4; m(4, 4) = 3;
try {
Matrix<double> inv = inverse(m);
cout << m * inv << endl;
} catch (int error) {
cout << "matrix is singular" << endl;
}
}
#include <slate.h>
int main() {
// Want to solve the following:
//
// [ 1 -1 2 -1 ] [ 6 ]
// [ 1 0 -1 1 ] [ 4 ]
// [ 2 1 3 -4 ] x = [ -2 ]
// [ 0 -1 1 -1 ] [ 5 ]
//
// create the matrix.
Matrix<double> m(4, 4);
m(1, 1) = 1; m(1, 2) = -1; m(1, 3) = 2; m(1, 4) = -1;
m(2, 1) = 1; m(2, 2) = 0; m(2, 3) = -1; m(2, 4) = 1;
m(3, 1) = 2; m(3, 2) = 1; m(3, 3) = 3; m(3, 4) = -4;
m(4, 1) = 0; m(4, 2) = -1; m(4, 3) = 1; m(4, 4) = -1;
// create the resultant vector.
Vector<double> b(4);
b(1) = 6;
b(2) = 4;
b(3) = -2;
b(4) = 5;
// solve for x.
try {
Vector<double> x = solve(m, b);
cout << x << endl;
cout << m * x << endl;
} catch (int error) {
cout << "matrix is singular" << endl;
}
}