Complex Numbers in IronPython QuickStart Sample

Illustrates how to work with complex numbers using the DoubleComplex structure in IronPython.

View this sample in: C# Visual Basic F#

```Python
import numerics

# The Complex<double> class resides in the Extreme.Mathematics namespace.
from Extreme.Mathematics import *

# Illustrates the use of the Complex<double> class in 
# Extreme Numerics.NET.

#
# Complex<double> constants:
#
print "Complex<double>.Zero =", Complex<double>.Zero
print "Complex<double>.One =", Complex<double>.One
# The imaginary unit is given by Complex<double>.I:
print "Complex<double>.I =", Complex<double>.I
print 

#
# Construct some complex numbers
#
# Real and imaginary parts:
#   a = 2 + 4i
a = Complex<double>(2, 4)
print "a =", a
#   b = 1 - 3i
b = Complex<double>(1, -3)
print "b =", b.ToString()
# From a real number:
#   c = -3 + 0i
c = Complex<double>(-3)
print "c =", c.ToString()
# Polar form:
#   d = 2 (cos(Pi/3) + i sin(Pi/3))
d = Complex<double>.FromPolar(2, Constants.Pi/3)
# To print this number, use the overloaded ToString
# method and specify the format string for the real 
# and imaginary parts:
print "d =", d
print 

#
# Parts of complex numbers
#
print "Parts of a = {0}:", a
print "Real part of a =", a.Re
print "Imaginary part of a =", a.Im
print "Modulus of a =", a.Modulus
print "Argument of a =", a.Argument
print 

#
# Basic arithmetic:
#
print "Basic arithmetic:"
e = -a
print "-a =", e
e = a + b
print "a + b =", e
e = a - b
print "a - b =", e
e = a * b
print "a * b =", e
e = a / b
print "a / b =", e
# The conjugate of a complex number corresponds to
# the "Conjugate" method:
e = a.Conjugate()
print "Conjugate(a) = ~a =", e
print 

#
# Functions of complex numbers
#
# Most of these have corresponding static methods 
# in the System.Math class, but are extended to complex 
# arguments.
print "Functions of complex numbers:"

# Exponentials and logarithms
print "Exponentials and logarithms:"
e = Complex<double>.Exp(a)
print "Exp(a) =", e
e = Complex<double>.Log(a)
print "Log(a) =", e
e = Complex<double>.Log10(a)
print "Log10(a) =", e
# You can get a point on the unit circle by calling
# the ExpI method:
e = Complex<double>.ExpI(2*Constants.Pi/3)
print "ExpI(2*Pi/3) =", e
# The RootOfUnity method also returns points on the
# unit circle. The above is equivalent to the second
# root of z^6 = 1:
e = Complex<double>.RootOfUnity(6, 2)
print "RootOfUnity(6, 2) =", e


# The Pow method is overloaded for integer, double, # and complex argument:
e = Complex<double>.Pow(a, 3)
print "Pow(a,3) =", e
e = Complex<double>.Pow(a, 1.5)
print "Pow(a,1.5) =", e
e = Complex<double>.Pow(a, b)
print "Pow(a,b) =", e

# Square root
e = Complex<double>.Sqrt(a)
print "Sqrt(a) =", e
# The Sqrt method is overloaded. Here's the square 
# root of a negative double:
e = Complex<double>.Sqrt(-4)
print "Sqrt(-4) =", e
print 

#
# Trigonometric functions:
#
print "Trigonometric function:"
e = Complex<double>.Sin(a)
print "Sin(a) =", e
e = Complex<double>.Cos(a)
print "Cos(a) =", e
e = Complex<double>.Tan(a)
print "Tan(a) =", e

# Inverse Trigonometric functions:
e = Complex<double>.Asin(a)
print "Asin(a) =", e
e = Complex<double>.Acos(a)
print "Acos(a) =", e
e = Complex<double>.Atan(a)
print "Atan(a) =", e

# Asin and Acos have overloads with real argument
# not restricted to [-1,1]:
e = Complex<double>.Asin(2)
print "Asin(2) =", e
e = Complex<double>.Acos(2)
print "Acos(2) =", e
print 
			
#
# Hyperbolic and inverse hyperbolic functions:
#
print "Hyperbolic function:"
e = Complex<double>.Sinh(a)
print "Sinh(a) =", e
e = Complex<double>.Cosh(a)
print "Cosh(a) =", e
e = Complex<double>.Tanh(a)
print "Tanh(a) =", e
e = Complex<double>.Asinh(a)
print "Asinh(a) =", e
e = Complex<double>.Acosh(a)
print "Acosh(a) =", e
e = Complex<double>.Atanh(a)
print "Atanh(a) =", e
```