ComplexNumber (complex_number v0.1.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.

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.

Subtracts a complex number from another one.

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
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
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