[TOC]
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 methoods 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");
FloatVector 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);
DoubleComplexMatrix 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 cojugates 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();
DoubleVector 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
[TOC]