next up previous contents
Next: Linear Algebra Up: Slate++ Version 1.2 TUTORIAL Previous: Basic Operations   Contents

Subsections

Mathematical Functions

Minimum and Maximum


#include <slate.h>

int main() {

  //
  // Vectors and Matrices with the same dimensions and type can be
  // compared element-by-element, producing a new Vector or Matrix with
  // the maximum of each element pair.
  //
  Matrix<double> a(1,2,1,2,19.0);
  Matrix<double> b(1,2,1,2,10.0);
  a(1,1) = 4.0;
  cout << max(a, b) << endl;

  Vector<int> d(1,6,4);
  Vector<int> e(1,6,2);
  d(1) = 0;
  cout << max(d, e) << endl;

  //
  // Scalar values can be compared with Vector or Matrix elements to
  // produce a new Vector or Matrix. 
  //
  cout << max(5.0, a) << endl;
  cout << max(a, 5.0) << endl;
  cout << max(3, d) << endl;
  cout << max(d, 3) << endl;

  //
  // Forming Vectors and Matrices with *minimum* values.
  //
  cout << min(a,b) << endl;
  cout << min(d,e) << endl;

  cout << min(5.0, a) << endl;
  cout << min(a, 5.0) << endl;
  cout << min(3, d) << endl;
  cout << min(d, 3) << endl;

  //
  // We can also return the minimum or maximum element of a Vector or Matrix.
  // 
  cout << min(a) << "  " << max(a) << endl;
  cout << min(d) << "  " << max(d) << endl;
}

Sum of Elements


#include <slate.h>

int main() {

  //
  // We can sum all elements of a Vector or Matrix.
  //
  Matrix<double> a(1,2,1,2,19.0);
  Vector<double> b(1,9,10.0);
 
  cout << sum(a) << endl;
  cout << sum(b) << endl;
}

Power


#include <slate.h>

int main() {

  //
  // Take each element to some power.
  //
  Matrix<double> a(1,2,1,2,2.0);
  Vector<double> b(1,9,3.0);
  cout << pow(a,4) << endl;
  cout << pow(b,3) << endl;

  //
  // The Matrix or Vector can have complex elements.
  //
  Matrix< complex<double> > c(1,2,1,2,complex<double>(2.0,1.0));
  Vector< complex<double> > d(1,9,complex<double>(3.0,2.0));
  cout << pow(c,4) << endl;
  cout << pow(d,3) << endl;
}

Absolute Value


#include <slate.h>

int main() {

  //
  // Take the absolute values of each element.
  //
  Matrix<double> a(1,2,1,2,-2.0);
  Vector<double> b(1,9,-3.0);
  cout << abs(a) << endl;
  cout << abs(b) << endl;

  //
  // The Matrix or Vector can have complex elements.
  //
  Matrix< complex<double> > c(1,2,1,2,complex<double>(2.0,1.0));
  Vector< complex<double> > d(1,9,complex<double>(3.0,2.0));
  cout << abs(c) << endl;
  cout << abs(d) << endl;
}

Square Root


#include <slate.h>

int main() {

  //
  // Take the square roots of each element.
  //
  Matrix<double> a(1,2,1,2,2.0);
  Vector<double> b(1,9,3.0);
  cout << sqrt(a) << endl;
  cout << sqrt(b) << endl;

  //
  // The Matrix or Vector can have complex elements.
  //
  Matrix< complex<double> > c(1,2,1,2,complex<double>(2.0,1.0));
  Vector< complex<double> > d(1,9,complex<double>(3.0,2.0));
  cout << sqrt(c) << endl;
  cout << sqrt(d) << endl;
}

Square


#include <slate.h>

int main() {

  //
  // Take the square of each element.
  //
  Matrix<double> a(1,2,1,2,-2.0);
  Vector<double> b(1,9,3.0);
  cout << sqr(a) << endl;
  cout << sqr(b) << endl;

  //
  // The Matrix or Vector can have complex elements.
  //
  Matrix< complex<double> > c(1,2,1,2,complex<double>(2.0,1.0));
  Vector< complex<double> > d(1,9,complex<double>(3.0,2.0));
  cout << sqr(c) << endl;
  cout << sqr(d) << endl;
}

Cube


#include <slate.h>

int main() {

  //
  // Take the cube of each element.
  //
  Matrix<double> a(1,2,1,2,-2.0);
  Vector<double> b(1,9,3.0);
  cout << cube(a) << endl;
  cout << cube(b) << endl;

  //
  // The Matrix or Vector can have complex elements.
  //
  Matrix< complex<double> > c(1,2,1,2,complex<double>(2.0,1.0));
  Vector< complex<double> > d(1,9,complex<double>(3.0,2.0));
  cout << cube(c) << endl;
  cout << cube(d) << endl;
}

Sine


#include <slate.h>

int main() {

  //
  // Take the sine of each element.
  //
  Matrix<double> a(1,2,1,2,-2.0);
  Vector<double> b(1,9,3.0);
  cout << sin(a) << endl;
  cout << sin(b) << endl;

  //
  // The Matrix or Vector can have complex elements.
  //
  Matrix< complex<double> > c(1,2,1,2,complex<double>(2.0,1.0));
  Vector< complex<double> > d(1,9,complex<double>(3.0,2.0));
  cout << sin(c) << endl;
  cout << sin(d) << endl;
}

Cosine


#include <slate.h>

int main() {

  //
  // Take the cosine of each element.
  //
  Matrix<double> a(1,2,1,2,-2.0);
  Vector<double> b(1,9,3.0);
  cout << cos(a) << endl;
  cout << cos(b) << endl;

  //
  // The Matrix or Vector can have complex elements.
  //
  Matrix< complex<double> > c(1,2,1,2,complex<double>(2.0,1.0));
  Vector< complex<double> > d(1,9,complex<double>(3.0,2.0));
  cout << cos(c) << endl;
  cout << cos(d) << endl;
}

Tangent


#include <slate.h>

int main() {

  //
  // Take the tangent of each element.
  //
  Matrix<double> a(1,2,1,2,-2.0);
  Vector<double> b(1,9,3.0);
  cout << tan(a) << endl;
  cout << tan(b) << endl;

  //
  // The Matrix or Vector can have complex elements.
  //
  Matrix< complex<double> > c(1,2,1,2,complex<double>(2.0,1.0));
  Vector< complex<double> > d(1,9,complex<double>(3.0,2.0));
  cout << tan(c) << endl;
  cout << tan(d) << endl;
}

Hyperbolic Sine


#include <slate.h>

int main() {

  //
  // Take the hyperbolic sine of each element.
  //
  Matrix<double> a(1,2,1,2,-2.0);
  Vector<double> b(1,9,3.0);
  cout << sinh(a) << endl;
  cout << sinh(b) << endl;

  //
  // The Matrix or Vector can have complex elements.
  //
  Matrix< complex<double> > c(1,2,1,2,complex<double>(2.0,1.0));
  Vector< complex<double> > d(1,9,complex<double>(3.0,2.0));
  cout << sinh(c) << endl;
  cout << sinh(d) << endl;
}

Hyperbolic Cosine


#include <slate.h>

int main() {

  //
  // Take the hyperbolic cosine of each element.
  //
  Matrix<double> a(1,2,1,2,-2.0);
  Vector<double> b(1,9,3.0);
  cout << cosh(a) << endl;
  cout << cosh(b) << endl;

  //
  // The Matrix or Vector can have complex elements.
  //
  Matrix< complex<double> > c(1,2,1,2,complex<double>(2.0,1.0));
  Vector< complex<double> > d(1,9,complex<double>(3.0,2.0));
  cout << cosh(c) << endl;
  cout << cosh(d) << endl;
}

Hyperbolic Tangent


#include <slate.h>

int main() {

  //
  // Take the hyperbolic tangent of each element.
  //
  Matrix<double> a(1,2,1,2,-2.0);
  Vector<double> b(1,9,3.0);
  cout << tanh(a) << endl;
  cout << tanh(b) << endl;

  //
  // The Matrix or Vector can have complex elements.
  //
  Matrix< complex<double> > c(1,2,1,2,complex<double>(2.0,1.0));
  Vector< complex<double> > d(1,9,complex<double>(3.0,2.0));
  cout << tanh(c) << endl;
  cout << tanh(d) << endl;
}

Exponential


#include <slate.h>

int main() {

  //
  // Take the exponential of each element.
  //
  Matrix<double> a(1,2,1,2,-2.0);
  Vector<double> b(1,9,3.0);
  cout << exp(a) << endl;
  cout << exp(b) << endl;

  //
  // The Matrix or Vector can have complex elements.
  //
  Matrix< complex<double> > c(1,2,1,2,complex<double>(2.0,1.0));
  Vector< complex<double> > d(1,9,complex<double>(3.0,2.0));
  cout << exp(c) << endl;
  cout << exp(d) << endl;
}

Logarithms


#include <slate.h>

int main() {

  //
  // Take the natural (base-e) logarithm of each element.
  //
  Matrix<double> a(1,2,1,2,2.0);
  Vector<double> b(1,9,3.0);
  cout << ln(a) << endl;
  cout << ln(b) << endl;

  //
  // The Matrix or Vector can have complex elements.
  //
  Matrix< complex<double> > c(1,2,1,2,complex<double>(2.0,1.0));
  Vector< complex<double> > d(1,9,complex<double>(3.0,2.0));
  cout << ln(c) << endl;
  cout << ln(d) << endl;

  //
  // Take the base-10 logarithm of each element.
  //
  cout << log10(a) << endl;
  cout << log10(b) << endl;

  //
  // The Matrix or Vector can have complex elements.
  //
  cout << log10(c) << endl;
  cout << log10(d) << endl;
}

Complex Conjugate


#include <slate.h>

int main() {

  //
  // Take the complex conjugate of each element.  This is only sensible
  // for complex Matrices and Vectors.
  //
  Matrix< complex<double> > c(1,2,1,2,complex<double>(2.0,1.0));
  Vector< complex<double> > d(1,9,complex<double>(3.0,2.0));
  cout << conj(c) << endl;
  cout << conj(d) << endl;
}

Real Component


#include <slate.h>

int main() {

  //
  // Take the real component of each element.  This is only sensible
  // for complex Matrices and Vectors.
  //
  Matrix< complex<double> > c(1,2,1,2,complex<double>(2.0,1.0));
  Vector< complex<double> > d(1,9,complex<double>(3.0,2.0));
  cout << real(c) << endl;
  cout << real(d) << endl;
}

Imaginary Component


#include <slate.h>

int main() {

  //
  // Take the imaginary component of each element.  This is only sensible
  // for complex Matrices and Vectors.
  //
  Matrix< complex<double> > c(1,2,1,2,complex<double>(2.0,1.0));
  Vector< complex<double> > d(1,9,complex<double>(3.0,2.0));
  cout << imag(c) << endl;
  cout << imag(d) << endl;
}

Complex Argument


#include <slate.h>

int main() {

  //
  // Take the complex argument of each element.  This is only sensible
  // for complex Matrices and Vectors.
  //
  Matrix< complex<double> > c(1,2,1,2,complex<double>(2.0,1.0));
  Vector< complex<double> > d(1,9,complex<double>(3.0,2.0));
  Vector< complex<double> > e(1,9,complex<double>(-3.0,-2.0));
  Vector< complex<double> > f(1,9,complex<double>(3.0,-2.0));
  cout << arg(c) << endl;
  cout << arg(d) << endl;
  cout << arg(e) << endl;
  cout << arg(f) << endl;
}


next up previous contents
Next: Linear Algebra Up: Slate++ Version 1.2 TUTORIAL Previous: Basic Operations   Contents
Brian Thorndyke 2003-11-15