ComplexNumber (complex_number v0.2.0) View Source

Functions for complex number operations.

Link to this section Summary

Functions

Returns the absolute value of the given complex number.

Adds two complex numbers.

Returns the cosine of a complex number.

Divides a complex number by another one.

Returns the imaginary part of the given complex number.

Checks if the argument is a complex (including real) number or not.

Makes a product of two complex numbers.

Negates a complex number.

Creates a new complex number from a real part and an imaginary part.

Returns a multivalued function representing the given base taken to the power of the given exponent.

Returns the real part of the given complex number.

Returns the sine of a complex number.

Subtracts a complex number from another one.

Returns the tangent of a complex number.

Link to this section Types

Specs

t() :: number() | %ComplexNumber{radius: number(), theta: number()}

Link to this section Functions

Specs

abs(t()) :: number()

Returns the absolute value of the given complex number.

iex> ComplexNumber.abs(ComplexNumber.new(4, -3))
5.0

iex> ComplexNumber.abs(4.2)
4.2

Specs

add(t(), t()) :: t()

Adds two complex numbers.

iex> ComplexNumber.add(ComplexNumber.new(0.5, 2.5), ComplexNumber.new(2.5, 1.5))
%ComplexNumber{radius: 5.0, theta: 0.9272952180016122}

iex> ComplexNumber.add(ComplexNumber.new(0.5, 4), 2.5)
%ComplexNumber{radius: 5.0, theta: 0.9272952180016121}

iex> ComplexNumber.add(2.5, ComplexNumber.new(0.5, 4))
%ComplexNumber{radius: 5.0, theta: 0.9272952180016121}

iex> ComplexNumber.add(3.5, 2.5)
6.0

Specs

cos(t()) :: t()

Returns the cosine of a complex number.

iex> ComplexNumber.cos(2.1)
-0.5048461045998576

iex> ComplexNumber.cos(ComplexNumber.new(3, -0.5))
%ComplexNumber{radius: 1.1187606807234534, theta: 3.075814483757404}
Link to this function

divide(number1, number2)

View Source

Specs

divide(t(), t()) :: t()

Divides a complex number by another one.

iex> ComplexNumber.divide(ComplexNumber.new(3, -0.5), ComplexNumber.new(2, 1.5))
%ComplexNumber{radius: 1.2165525060596438, theta: -0.8086497862079112}

iex> ComplexNumber.divide(ComplexNumber.new(3, -0.75), ComplexNumber.new(2, -0.5))
1.5

iex> ComplexNumber.divide(ComplexNumber.new(-3, -0.75), ComplexNumber.new(2, 0.5))
-1.5

iex> ComplexNumber.divide(3, ComplexNumber.new(2, 1.5))
%ComplexNumber{radius: 1.2, theta: -0.6435011087932844}

iex> ComplexNumber.divide(ComplexNumber.new(3, -0.5), 2)
%ComplexNumber{radius: 1.5206906325745548, theta: -0.16514867741462683}

iex> ComplexNumber.divide(3, 2)
1.5

Specs

imaginary(t()) :: number()

Returns the imaginary part of the given complex number.

iex> ComplexNumber.imaginary(ComplexNumber.new(6.2, 3))
3.0

iex> ComplexNumber.imaginary(4)
0
Link to this macro

is_complex_number(number)

View Source (macro)

Checks if the argument is a complex (including real) number or not.

iex> ComplexNumber.is_complex_number(6.85)
true

iex> ComplexNumber.is_complex_number(-3)
true

iex> ComplexNumber.is_complex_number(ComplexNumber.new(3.5, -1))
true

iex> ComplexNumber.is_complex_number(:atom)
false

iex> ComplexNumber.is_complex_number("binary")
false
Link to this function

multiply(number1, number2)

View Source

Specs

multiply(t(), t()) :: t()

Makes a product of two complex numbers.

iex> ComplexNumber.multiply(ComplexNumber.new(2, -3), ComplexNumber.new(-3, 0.5))
%ComplexNumber{radius: 10.965856099730653, theta: 1.993650252927837}

iex> ComplexNumber.multiply(ComplexNumber.new(2, -3), ComplexNumber.new(3, 4.5))
19.5

iex> ComplexNumber.multiply(ComplexNumber.new(2, 3), ComplexNumber.new(-3, 4.5))
-19.5

iex> ComplexNumber.multiply(2.5, ComplexNumber.new(3, -0.5))
%ComplexNumber{radius: 7.603453162872774, theta: -0.16514867741462683}

iex> ComplexNumber.multiply(ComplexNumber.new(3, -0.5), 2.5)
%ComplexNumber{radius: 7.603453162872774, theta: -0.16514867741462683}

iex> ComplexNumber.multiply(4, 2.5)
10.0

Specs

negate(t()) :: t()

Negates a complex number.

iex> ComplexNumber.negate(ComplexNumber.new(4, -3))
%ComplexNumber{radius: -5.0, theta: -0.6435011087932844}

iex> ComplexNumber.negate(4.2)
-4.2

Specs

new(number(), number()) :: t()

Creates a new complex number from a real part and an imaginary part.

If the imaginary part is zero, it just returns a real number.

iex> ComplexNumber.new(3, 4)
%ComplexNumber{radius: 5.0, theta: 0.9272952180016122}

iex> ComplexNumber.new(-3, 4)
%ComplexNumber{radius: 5.0, theta: 2.214297435588181}

iex> ComplexNumber.new(3, 0)
3

Specs

pow(t(), t()) :: (integer() -> t())

Returns a multivalued function representing the given base taken to the power of the given exponent.

iex> ComplexNumber.pow(ComplexNumber.new(6, 1.5), ComplexNumber.new(-4, -0.4)).(0)
%ComplexNumber{radius: 0.0007538662030076445, theta: -1.708743364561965}

iex> ComplexNumber.pow(6.5, ComplexNumber.new(-4, -0.4)).(0)
%ComplexNumber{radius: 0.0005602044746332418, theta: -0.7487208707606361}

iex> ComplexNumber.pow(ComplexNumber.new(6, 1.5), -4.4).(0)
%ComplexNumber{radius: 0.0003297697637520032, theta: -1.0779061177582023}

iex> ComplexNumber.pow(6.5, -4.4).(0)
0.0002649605586423526

iex> ComplexNumber.pow(6.5, -4.4).(1)
%ComplexNumber{radius: 0.00026496055864235266, theta: -2.5132741228718367}

iex> ComplexNumber.pow(6.5, 0.5).(1)
-2.5495097567963922

Specs

real(t()) :: number()

Returns the real part of the given complex number.

iex> ComplexNumber.real(ComplexNumber.new(6.2, 3))
6.2

iex> ComplexNumber.real(4)
4

Specs

sin(t()) :: t()

Returns the sine of a complex number.

iex> ComplexNumber.sin(2.1)
0.8632093666488737

iex> ComplexNumber.sin(ComplexNumber.new(3, -0.5))
%ComplexNumber{radius: 0.5398658852737769, theta: 1.2715925251688622}
Link to this function

subtract(number1, number2)

View Source

Specs

subtract(t(), t()) :: t()

Subtracts a complex number from another one.

iex> ComplexNumber.subtract(ComplexNumber.new(0.5, 2.5), ComplexNumber.new(2.5, 1.5))
%ComplexNumber{radius: 2.2360679774997894, theta: 2.6779450445889874}

iex> ComplexNumber.subtract(ComplexNumber.new(0.5, 4), 2.5)
%ComplexNumber{radius: 4.472135954999579, theta: 2.0344439357957027}

iex> ComplexNumber.subtract(2.5, ComplexNumber.new(0.5, 4))
%ComplexNumber{radius: 4.472135954999579, theta: 1.1071487177940906}

iex> ComplexNumber.subtract(3.5, 2.5)
1.0

Specs

tan(t()) :: t()

Returns the tangent of a complex number.

iex> ComplexNumber.tan(2.1)
-1.7098465429045073

iex> ComplexNumber.tan(ComplexNumber.new(3, -0.5))
%ComplexNumber{radius: 0.482557078181072, theta: -1.804221958588542}