C# Apply Transform Example

[TOC]

using System;

using CenterSpace.NMath.Core;

namespace CenterSpace.NMath.Core.Examples.CSharp
{
  /// <summary>
  /// A .NET example in C# showing how to use the matrix and vector Apply and Tranform
  /// methods.
  /// </summary>
  class ApplyTransformExample
  {

    static void Main(string[] args)
    {
      int length = 4;

      Console.WriteLine();

      // Create a vector containing 0, PI/2, PI, 3PI/2, 2PI
      DoubleVector v = new DoubleVector(length, 0, Math.PI / 2.0);
      Console.WriteLine("v = {0}", v.ToString());

      // Use the Apply method to create a new vector containing the
      // cosines of the elements of v.
      DoubleVector cosV = v.Apply(NMathFunctions.CosFunction);

      // We should get cosV = [1 0 -1 0]
      Console.WriteLine("cosV = {0}", cosV.ToString());

      // Hmmm. Where there is supposed to zeros there are numbers
      // on the order of 10^-17 and 10^-16 - which are zero, within
      // machine precision.  Lets use the vector method Transform to 
      // round these values to what they are supposed to be.
      NMathFunctions.DoubleUnaryFunction roundFunction =
        new NMathFunctions.DoubleUnaryFunction(Math.Round);
      cosV.Transform(roundFunction);
      Console.WriteLine("cosV rounded = {0}", cosV.ToString()); // [1 0 -1 0]

      // The apply and transform functions are overloaded to take binary
      // function delegates.
      FloatComplexMatrix baseValues = new FloatComplexMatrix(2, 2, 1, 1);
      FloatComplexMatrix exponents = new FloatComplexMatrix(2, 2, 1, 1);

      // baseValues = | (1,0) (3,0) |
      //              | (2,0) (4,0) |
      //
      // exponents =  | (1,0) (3,0) |
      //              | (2,0) (4,0) |
      Console.WriteLine("baseValues = {0}", baseValues.ToString());
      Console.WriteLine("exponents = {0}", exponents.ToString());

      FloatComplexMatrix powMatrix = baseValues.Apply(NMathFunctions.FloatComplexPowFunction, exponents);

      // powerVector = | (1,0)^(1,0) (3,0)^(3,0) | = | (1,0) (27,0) |
      //               | (2,0)^(2,0) (4,0)^(4,0) | = | (4,0) (256,0) |
      Console.WriteLine("baseValues^exponents = {0}", powMatrix.ToString());

      FloatComplexVector sums = baseValues.ApplyColumns(NMathFunctions.FloatComplexSumFunction);
      Console.WriteLine("sums of baseValues columns = {0}", sums.ToString());

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

    } // Main

  }// class

}// namespace

[TOC]