C# N Math Functions Example

← All NMath Code Examples

 

using System;
using System.Globalization;
using System.Threading;

using CenterSpace.NMath.Core;

namespace CenterSpace.NMath.Core.Examples.CSharp
{
  /// <summary>
  /// A .NET example in C# showing some of the functionality of the NMath class.
  /// </summary>
  class NMathExample
  {

    static void Main( string[] args )
    {
      // Most common mathematical functions have been overloaded to accept
      // vector and matrix types. These functions are provided as static
      // methods in the class CenterSpace.NMathFunctions.Core.NMathFunctions. The
      // result of invoking one of these methods with a vector or matrix
      // argument is a new vector or matrix object of the same size whose
      // values  are the result of applying the function to each element
      // of its argument. 

      Console.WriteLine();

      CultureInfo original = Thread.CurrentThread.CurrentCulture;

      // This example uses strings representing numbers in the US locale
      // so change the current culture info.  For example, "-.5"
      Thread.CurrentThread.CurrentCulture = new CultureInfo( "en-US" );

      var v = new FloatVector( 1.2F, -4.5F, 9.1F, -10.01F );

      // Create a vector whose values are the absolute values of v.
      FloatVector absV = NMathFunctions.Abs( v );

      var A = new DoubleComplexMatrix( "2x2 [(1,-1) (2,-.5) (2.2,1.1) (7,9)]" );

      // Back to your original culture.
      Thread.CurrentThread.CurrentCulture = original;

      Console.WriteLine( "absV = {0}", absV.ToString() ); // absV = [1.2 4.5 9.1 10.01]
      Console.WriteLine();

      // Use the NMath Conj method to obtain a matrix whose elements are 
      // the complex conjugates of the complex matrix A.
      DoubleComplexMatrix AConj = NMathFunctions.Conj( A );

      // AConj = 2x2 [(1,1) (2,0.5) (2.2,-1.1) (7,-9)]
      Console.WriteLine( "AConj..." );
      Console.WriteLine( AConj );
      Console.WriteLine();

      // Now use the Imag method to create a real matrix containing
      // the imaginary parts of AConj.
      DoubleMatrix AConjImag = NMathFunctions.Imag( AConj );

      // AConjImag = 2x2 [1 0.5 -1.1 -9]
      Console.WriteLine( "AConjImag..." );
      Console.WriteLine( AConjImag );
      Console.WriteLine();

      // The NMath class also provides static methods for solving
      // linear systems, computing determinants, matrix inverses, and 
      // matrix condition numbers.  See the LU factorization example
      // to see how re-use the LU factorization of a matrix to compute
      // these quantities.
      double detAConjImag = NMathFunctions.Determinant( AConjImag );
      Console.WriteLine( "The determinant of AConjImag = {0}", detAConjImag );
      Console.WriteLine();

      // If the determinant is non-zero, the matrix is invertible. So we
      // can compute inverses and solve linear systems.
      if ( detAConjImag != 0 )
      {
        DoubleMatrix inv = NMathFunctions.Inverse( AConjImag );
        Console.WriteLine( "The inverse of AConjImag..." );
        Console.WriteLine( inv.ToString( "F3" ) );
        Console.WriteLine();

        var b = new DoubleVector( "[0 -1]" );
        DoubleVector x = NMathFunctions.Solve( AConjImag, b );
        Console.WriteLine( "The solution, x to AConjImag*x=b is..." );
        Console.WriteLine( x.ToString( "F3" ) );
        Console.WriteLine();

        double conditionNumber = NMathFunctions.EstimateConditionNumber( AConjImag, NormType.OneNorm );
        Console.Write( "The condition number of AConjImag in the 1-norm is... " );
        Console.WriteLine( conditionNumber.ToString( "F5" ) );
      }
      else
      {
        Console.WriteLine( "Sorry, matrix is singular" );
      }

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

    } // Main

  }// class

}// namespace

← All NMath Code Examples
Top