Complex Class in System.Numerics namespace (Framework 4.0)


In this article I will explain you about, how to manipulate Complex numbers by using pretty much cool feature introduced in .net framework 4.0 with System.Numericsnamespace.Under this namespace there is a predefined Complex class with different parameters, properties and methods.This is one of the key enhancements in BCL(Base Class Library).

Before going to deep drive towards this feature. I will come out with general analogy regarding mathematical Complex numbers manual implementation and their basic formulas for better understanding the technical analogy for the beginners.

Complex Numbers:

Complex number is a number consists of a real number and an imaginary number. It can Written in the form a+ib, where a and b are real numbers and i is the standard imaginary unit with the property i^2=-1. 

Notations: 
  • (a+ib) =(a,b)  e.g. (2+i3)=(2,3) -Representation   
  • (a+ib)+(c+id)=(a+c)+i(b+d) -Addition
  • (a+bi)-(c+di)=(a-c)+i(b-d)-Substraction
  • (a+bi)(c+di)=(ac-bd)+i(ad+bc)-Multiplication
  • (a+bi)/(c+di)=((ac+bd)+i(bc-ad))/(c^2+d^2)-Division
  • |a+ib| read as magnitude of a+ib having the formula sqrt (a^2+b^2).
Note

All the above mentioned notations are origin for Complex numbers....for better understanding purpose I illustrated here...if you are aware jump this phase.There is no need to remember all these notations ...and I am not mentioning trigonometric and logarithmic expressions, it's just like a kids play with Framework 4.0 base class library. I depicted below how to handle programmatically in C#.

Technical Focus on Complex Class:

This Feature was introduced in .net framework 4.0.Before Going to do the application we first add System.Numerics namespace as reference to the project in Visual Studio 2010 Beta 1 or Beta 2 or RC.I worked out this examples in VS2010 RC.
  • Complex() Class Constructors 
    • Complex()->  no overloads represents (0,0) complex number
    • Complex(double real, double imaginary)->having two overloads to manipulate complex numbers taking as double type.
  • Static Methods:  Abs(), Add(), Asin(), Atan(), Conjugate(), Cos(), Cosh(), Divide(), Equals(), Exp(), FromPolarCoordinates(), Log(), Log10(), Multiply(), Negate(), Pow(), Reciprocal(), Sin(), Sinh(), Sqrt(), Tan(), Tanh(). These are all the static functions in Complex Class.
  • Properties:  
    Magnitude: Calculates the sqrt (a^2+b^2).
My Hands on Experiment

The following Example demonstrates the Basic skeleton of Complex Numbers Manipulation 

Example-1: Traditional approach

namespace ComplexNumbers
{
    class Program
    {
        static void Main(string[] args)
        {
            var c1 = new Complex(1, 2);
            var c2 = new Complex(3, 4);
 var add = c1 + c2;
 Console.WriteLine("Complex Numbers Addition:"+add);
 var sub = c1 - c2;
      Console.WriteLine("Complex Numbers Substraction:"+sub);
 var mul = c1 * c2;
 Console.WriteLine("Complex Numbers Multiplication:"+mul);
 var div = c1 / c2;
 Console.WriteLine("Complex Numbers Division:"+div);
 Console.ReadLine();
        }
    }
}

Output:

Complex Numbers Addition :(4, 6)
Complex Numbers Substraction:(-2, -2)
Complex Numbers Division:(-5, 10)
Complex Numbers Division :( 0.44, 0.08)

Example-2: Using Static Methods

namespace ComplexNumbers
{
    class Program
    {
        static void Main(string[] args)
        {
            var c1 = new Complex(1,2);
            var c2 = new Complex(3, 4);
            var add = Complex.Add(c1,c2);
            Console.WriteLine("Complex Numbers Addition:"+add);
            var sub = Complex.Subtract(c1, c2);
            Console.WriteLine("Complex Numbers Division:"+sub);
            var mul = Complex.Multiply(c1, c2);
            Console.WriteLine("Complex Numbers Division:"+mul);
            var div = Complex.Divide(c1, c2);
            Console.WriteLine("Complex Numbers Division:"+div);
            Console.ReadLine();
        }
    }
}

Output:

Complex Numbers Addition :(4, 6)
Complex Numbers Substraction:(-2, -2)
Complex Numbers Division:(-5, 10)
Complex Numbers Division :( 0.44, 0.08)

Example-3: Magnitude Property

namespace ComplexNumbers
{
    class Program
    {
        static void Main(string[] args)
        {
            var c1 = new Complex(1,2);
            var c2 = new Complex(3, 4);
            //Magnitude of c1=sqrt(1^2 + 2^2)
            var magnitude = c1.Magnitude;
            Console.WriteLine(magnitude);
            Console.ReadLine();
        }
    }
}

Output:

2.23606797749979

Example-4: Real Stuff with Trigonometric Functions

In this example I am going to put my hands on Complex Numbers with Exponentials and Trigonometric hyperbolic functions. Some of the Formulae were depicted below for better understanding the Concept.
  • Exponential of exp(x+iy) = ex[cos(y)+isin(y)] = ex cis(y)
  • Exponential of cosh(x+iy)= exp(x+iy)+exp(?x?iy) / 2
  • Exponential of sinh(x+iy)= exp(x+iy)?exp(?x?iy) / 2
The above expression seems to be very much complicated. But my .net framework 4.0 solves this kind of problems on a fly. That is the power of my System.Numerics.Complex() Class under BCL.

namespace ComplexNumbers
{
    class Program
    {
        static void Main(string[] args)
        {
            Var c1 = new Complex(1, 2);
            //exp(x+iy) = ex[cos(y)+isin(y)] = ex cis(y)
            var exponent = Complex.Exp(c1);
            Console.WriteLine("Exponent="+exponent);
            //cosh(x+iy)= exp(x+iy)+exp(-x-iy) / 2
            var cosine = Complex.Cosh(c1);
            Console.WriteLine("Cosine Exponent" + cosine);
            //sinh(x+iy)= exp(x+iy)-exp(-x-iy) / 2
            var sine = Complex.Sinh(c1);
            Console.WriteLine("SineExponent"+sine);
            Console.ReadLine();
        }
    }
}

Output:

Exponent= (-1.13120438375681, 2.47172complex-class-in-system-numerics-namespace-framework-4-0200482)
CosineExponent (-0.64214812471552, 1.06860742138278)
SineExponent(-0.489056259041294, 1.40311925062204)

Advantages:
  1. Electrical Engineers deal with power Systems using complex numbers. They Calculates Resistance(R) and Reactance(X) to calculate the impedance Z.
  2. Used In Vector Calculus as well as Graphs
  3. All most all Electric and Electronic Engineers Work with Complex Numbers.
  4. In Our Real Time Development Scenario –we should easily Come out with Energy or Scientific Projects by using all the Functions in Complex () Class
Conclusion:

I hope this article will give you the brief idea regarding complex Numbers manipulation   by using new BCL in .net framework 4.0.   


Similar Articles