SimplySoft.ComplexNumerics 2.0.1

dotnet add package SimplySoft.ComplexNumerics --version 2.0.1
NuGet\Install-Package SimplySoft.ComplexNumerics -Version 2.0.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SimplySoft.ComplexNumerics" Version="2.0.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SimplySoft.ComplexNumerics --version 2.0.1
#r "nuget: SimplySoft.ComplexNumerics, 2.0.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install SimplySoft.ComplexNumerics as a Cake Addin
#addin nuget:?package=SimplySoft.ComplexNumerics&version=2.0.1

// Install SimplySoft.ComplexNumerics as a Cake Tool
#tool nuget:?package=SimplySoft.ComplexNumerics&version=2.0.1

Complex-Library

Complex-Library is .NET 5.0 based reusable library designed perform algebraic arithmetic on complex numeric. Any .NET 5.0 or above application can utilize the functionalities of Complex-Library by referring it in the project dependencies.

Prerequisites

Complex-Library requires .NET 5.0 (v5.#.#) or .NET 6.0 (v6.#.#).

Get Started

Add ComplexLibrary.dll assembly to project dependencies. Refer the content from the code by adding namespace using ComplexLibrary; at the top.

Implementation Overview

Following tables indicate the implementation structure of Complex-Library.

Fields

Name Symbol Type Description
E e double Mathematical constant (Euler's number) e [value = 2.718282...]
Pi π double Mathematical constant π [value = 3.141593...]

Properties

Name Type Description
Argument double Argument (phase) of this complex number represented in Arg-Secondary (0 ≤ arg(Z) < 2π) convention
Imaginary double Imaginary component of this complex number
Modulus double Modulus (magnitude or radius) of this complex number
Real double Real component of this complex number

Enums

ComplexFormat enumeration defines the complex number format to be used in string notation.

Option Description
Cartesian Cartesian format as Z = x + iy
Exponential Exponential format as Z = re^(iφ)
Polar Polar format as Z = r[Cos(φ) + i.Sin(φ)]

PhaseMode enumeration defines the method of sign-convention when defining argument.

Option Description
ArgPrimary Restrict phase in argument of complex number Z within range -π < Arg(Z) ≤ π
ArgSecondary Angle phase in argument of complex number Z within range 0 ≤ arg(Z) < 2π

Constructors

Name Description
Complex(double real, double imaginary) Initializes an instance of new Complex object with cartesian (Argand) coordinates with cartisian coordinates as real and imaginary
Complex(double radius, double argument, PhaseMode phaseMode) Initializes an instance of new Complex object with polar coordinates radius, argument and phaseMode convention.

Methods

Name Return Type Description
Conjugate() Complex Calculate the conjugate of this complex number
Equals(Complex) bool Evaluate the equality of this complex number with the given complex number
Equals(object) bool Evaluate the equality of this complex number with the given object
FindQuadraticRoots(double, double, double) Complex[] Calculates complex roots of quadratic equation ax² + bx + c = 0
GetHashCode() int Calculate the hashcode of this complex number
Negate() Complex Calculate the conjugate of this complex number
Reciprocal() Complex Calculate the reciprocal (multiplicative inverse) of this complex number
Sqrt() Complex Calculate the square root of this complex number
ToComplex(double) Complex Convert double-precision real number to a complex number
ToReal() double Convert this Complex to double precision floating-point number
ToString() string Convert the complex number into a string notation
ToString(byte) string Convert the complex number into a string notation with given decimal precision
ToString(ComplexFormat, [byte]) string Convert the complex number into the given standard notation with decimal precision

Operators

Name Symbol Operands Description
Add + Complex x, Complex y Add two complex numbers
Add + Complex x, double n Add complex number to a real number
Add + double n, Complex x Add real number to complex number
Conjugate ~ Complex x Calculate the conjugate of this complex number
Divide / Complex x, Complex y Divide complex number by another
Divide / Complex x, double n Divide complex number by a real number
Equals == Complex x, Complex y Evaluate the equality of two complex numbers
Multiply * Complex x, Complex y Multiply two complex numbers
Multiply * Complex x, double n Multiply a real number by complex number
Multiply * double n, Complex x Multiply complex number by a real number
Not Equals != Complex x, Complex y Evaluate the inequality of two complex numbers
Power ^ Complex x, int e Raise the complex number to the power of provided real number
Subtract - Complex x, Complex y Subtract two complex numbers
Subtract - Complex x, double n Subtract a real number from complex number
Subtract - double n, Complex x Subtract complex number from a real number

Usage

Following section describe the general usage of ComplexLibrary to perform complex arithmetic operations.

Initialize New Complex number

To initialize a complex number z with cartesian coordinates such that z = 5 - 3i,

Complex z = new(5, -3);

To initialize a complex number z with polar coordinates such that radius is 2 and argument (angle) is 240° (the argument should be defined with radians as 4π/3 or -2π/3 based on sign-convention, instead of degrees),
Using -π < Arg(Z) ≤ π convention or PhaseMode.ArgPrimary

Complex z = new(2, -2 * Complex.Pi / 3, PhaseMode.ArgPrimary);

Using 0 ≤ arg(Z) < 2π convention or PhaseMode.ArgSecondary

Complex z = new(2, 4 * Complex.Pi / 3, PhaseMode.ArgSecondary);

The constructor throws ArgumentException exception when the argument parameter is out of the range specified by the phaseMode parameter.

Properties of Complex Number

Complex number object has four accessible properties such that the Real component, Imaginary component, Modulus and Argument values. These values can be read as follows.

Complex z = (2, -3);
double Re = z.Real;
double Im = z.Imaginary;
double Mod = z.Modulus;
double Arg = z.Argument;

Note that the Argument is represented according to the PhaseMode.ArgSecondary convention with range of 0 ≤ Argument < 2π.

Represent Complex Number

A complex number can be represented as a string using ToString() functions. This function has several overloads to support different notation formats and decimal precisions.

Complex z = new(2, -3);
Complex w = new(2, Complex.Pi / 3, PhaseMode.ArgPrimary);

string result1 = z.ToString(); // (2, -3)
string result2 = w.ToString(4); // (1, 1.7320)

To represent in cartesian notation,

string result = new Complex(2, -3).ToString(ComplexFormat.Cartesian); 
// Represent as 2 - 3i

To represent in polar notation,

string result = new Complex(2, Complex.Pi / 3, PhaseMode.ArgPrimary).ToString(ComplexFormat.Polar); 
// Represent as 2[Cos(1.0472) + i.Sin(1.0472)]

To represent in exponential notation,

string result = new Complex(2, Complex.Pi / 3, PhaseMode.ArgPrimary).ToString(ComplexFormat.Exponential); 
// Represent as 2e1.0472i

Complex Number Conversion

A complex number can be converted to a double-precison real number if there is no imaginary component. The function throws InvalidCastException exception when try to convert a complex number having a non-zero imaginary component.

Complex z = new(-5, 0);
Complex w = new(1, -1);
double value1 = z.ToReal();
double value2 = w.ToReal(); // This throws an exception

A double precision real number can be converted to equivalent complex number using following static function.

double k = 3;
Complex z = Complex.ToComplex(k);
string result = z.ToString(); // (3, 0)

Complex Conjugate

The conjugate pair of complex number z = x + iy is represented by ~z = x - iy. The conjugate of complex number z can be calculated as follows.

Complex z = new(2, 5);
Complex conjugate;
conjugate = z.Conjugate()
// Or
conjugate = ~z;

This operation will throw ComplexNotInitializedException exception when required complex parameters are null.

Complex Negation

Negation of complex number represents the negative version of itself. The negation of complex number z can be calculated as follows.

Complex z = new(5, -3);
Complex negate;
negate = z.Negate()
// Or
negate = -z;

This operation will throw ComplexNotInitializedException exception when required complex parameters are null.

Complex Reciprocal Division

The reciprocal of complex number represents the multiplicative inverse of itself. For a complex number z, the reciprocal is represented by 1/z. The reciprocal of complex number z can be calculated as follows.

Complex z = new(-2, 3);
Complex reciprocal = z.Reciprocal();

This operation will throw ComplexNotInitializedException exception when required complex parameters are null and DivideByZeroException exception if the modulus of the complex number is zero which causes the zero division.

Quadratic Complex Roots

To calculate roots of standard quadratic equation ax² + bx + c = 0,

Complex[] roots;

// Roots of x² - 5x + 6 = 0
roots = Complex.FindQuadraticRoots(1, -5, 6);
Console.WriteLine("{0} and {1}", roots[0], roots[1]);
// (3, 0) and (2, 0)

// Roots of x² - 2x + 1 = 0
roots = Complex.FindQuadraticRoots(1, -2, 1);
Console.WriteLine(roots[0]);
// (1, 0)

// Roots of x² - 2x + 5 = 0
roots = Complex.FindQuadraticRoots(1, -2, 5);
Console.WriteLine("{0} and {1}", roots[0], roots[1]);
// (1, 2) and (1, -2)

This operation will throw InvalidOperationException exception when parameter a is zero which correspond to the coefficient a of the quadratic equation.

Complex Operations

Complex object can perform following arithmetic operations.

Addition

To add two complex numbers x and y,

Complex x = new(1, 5);
Complex y = new(2, Complex.Pi / 3, PhaseMode.ArgPrimary);
Complex result = x + y;

To add double-precision real number n to the complex number z and then value 3,

double k = 2;
double result = z + k + 3;

Addition will throw ComplexNotInitializedException exception when required complex parameters are null.

Subtraction

To subtract complex numbers y from x,

Complex x = new(1, 5);
Complex y = new(2, Complex.Pi / 3, PhaseMode.ArgPrimary);
Complex result = x - y;

To substract double-precision real number n from the complex number z and then value 3,

double k = 2;
double result = z - k - 3;

Subtraction will throw ComplexNotInitializedException exception when required complex parameters are null.

Multiplication

To multiply complex numbers x by y,

Complex x = new(1, 5);
Complex y = new(2, Complex.Pi / 3, PhaseMode.ArgPrimary);
Complex result = x * y;

To multiply complex numbers x by a double-precision real number n,

Complex x = new(1, 5);
double n = 3;
Complex result = x * n;

Multiplication will throw ComplexNotInitializedException exception when required complex parameters are null.

Division

To divide complex numbers x by y,

Complex x = new(1, 5);
Complex y = new(2, Complex.Pi / 3, PhaseMode.ArgPrimary);
Complex result = x / y;

This will throws DivideByZeroException exception when the modulus of y is 0.

To multiply complex numbers x by a double-precision real number n,

Complex x = new(1, 5);
double n = 3;
Complex result = x / n;

This will throw DivideByZeroException exception when the value of n is 0. Division will throw ComplexNotInitializedException exception when required complex parameters are null.

Power or Exponent

To raise the complex numbers x to the power of integer real number e,

Complex x = new(1, 5);
int e = 4;
Complex result = x ^ e;

Power will throw ComplexNotInitializedException exception when required complex parameters are null.

Square Root

To calculate the square root of complex number x,

Complex x = new(1, 5);
Complex result = x.Sqrt();

Square root operation will throw ComplexNotInitializedException exception when required complex parameters are null.

Complex Comparison

Two complex numbers can be compared using following comparison methods.

Equality

To evaluate the equality of two complex numbers,

Complex w = new(1, 3);
bool result;

result = w.Reciprocal() == (~w / Math.Pow(w.Modulus, 2)); // True
// Or
result = w.Reciprocal().Equals(~w / Math.Pow(w.Modulus, 2)); // True

result = w == ~w; // False
// Or
result = w.Equals(~w); // False

Inequality

To evaluate the inequality of two complex numbers,

Complex w = new(1, 3);
bool result;

result = w != ~w; // True
// Or
result = !w.Equals(~w); // True
Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net5.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.0.1 202 9/12/2022