MatrixArithmeticExample.cs (.NET, C#, CSharp)

[TOC]

using System;

using CenterSpace.NMath.Core;

namespace CenterSpace.NMath.Core.Examples.CSharp
{
  /// <summary>
  /// A .NET example in C# showing the element-wise operators overloaded 
  /// for matrix-matrix and matrix-scalar operations.
  /// 
  /// These arithmetic operators +,-,*,/ are overloaded
  /// for matrix/matrix and matrix/scalar operations. These operators
  /// have their usual meanings. For example, if A, B, and C are
  /// matrices, s is a scalar and op is one of +,-,*,/, then
  /// 
  ///   C = A op B
  ///   
  /// produces a matrix C such that
  /// 
  ///   C[i,j] = A[i,j] op B[i,j]
  ///   
  /// and 
  /// 
  ///   C = s op B
  ///   
  /// produces a matrix C such that
  /// 
  ///   C[i,j] = s op B[i,j].
  /// </summary>
  class MatrixArithmeticExample
  {
    static void Main(string[] args)
    {
      int rows = 3, cols = 3;

      Console.WriteLine();

      // Create a matrix containing all (1,0)'s
      DoubleComplexMatrix A = new DoubleComplexMatrix(rows, cols, new DoubleComplex(1, 0));
      // Create a matrix containing all (0,1)'s
      DoubleComplexMatrix B = new DoubleComplexMatrix(rows, cols, new DoubleComplex(0, 1));
      Console.WriteLine("A = {0}", A.ToString());
      Console.WriteLine("B = {0}", B.ToString());

      // Adding them together will yield a matrix of the same size containing 
      // all (1,1)'s
      DoubleComplexMatrix S = A + B;
      Console.WriteLine("A + B = {0}", S.ToString());

      // Vector scalar operators are also provided.
      DoubleComplex a = new DoubleComplex(2, 0);

      // Produces a matrix containing all (1,2)'s
      DoubleComplexMatrix aSum = A + a * B;
      Console.WriteLine("A + a*B = {0}", aSum.ToString());


      // If we increase the number of rows of A and try to multiply with B, we
      // will get a MismatchedSizeException. Matrices must have the same
      // dimensions to be combined using the element-wise operators.
      A.Resize(rows + 1, cols);
      DoubleComplexMatrix P;
      try
      {
        P = A * B;
      }
      catch (MismatchedSizeException e)
      {
        Console.WriteLine("Oops - " + e.Message);
      }

      // Put A back the way it was.
      A.Resize(rows, cols);

      // Increment and decrement operators have been overloaded too
      // (for real types only).
      DoubleMatrix Are = NMathFunctions.Real(A);
      Console.WriteLine("Are = {0}", Are.ToString());
      Are++;
      Console.WriteLine("Are++ = {0}", Are.ToString());

      Console.WriteLine();
      Console.WriteLine("Press Enter Key");
      Console.Read();

    } // Main

  }// class

}// namespace

[TOC]