CMath is a library that provides trigonometric and
transcendental functions for complex numbers.
Usage
To start using this library, simply:
require "cmath"
Square root of a negative number is a complex number.
CMath.sqrt(-9) #=> 0+3.0i
Methods
- A
-
-
acos,
-
acos,
-
acos!,
-
acos!,
-
acosh,
-
acosh,
-
acosh!,
-
acosh!,
-
asin,
-
asin,
-
asin!,
-
asin!,
-
asinh,
-
asinh,
-
asinh!,
-
asinh!,
-
atan,
-
atan,
-
atan!,
-
atan!,
-
atan2,
-
atan2,
-
atan2!,
-
atan2!,
-
atanh,
-
atanh,
-
atanh!,
-
atanh!
- C
-
-
cbrt,
-
cbrt,
-
cbrt!,
-
cbrt!,
-
cos,
-
cos,
-
cos!,
-
cos!,
-
cosh,
-
cosh,
-
cosh!,
-
cosh!
- E
-
- L
-
-
log,
-
log,
-
log!,
-
log!,
-
log10,
-
log10,
-
log10!,
-
log10!,
-
log2,
-
log2,
-
log2!,
-
log2!
- S
-
-
sin,
-
sin,
-
sin!,
-
sin!,
-
sinh,
-
sinh,
-
sinh!,
-
sinh!,
-
sqrt,
-
sqrt,
-
sqrt!,
-
sqrt!
- T
-
Included Modules
Class Public methods
returns the arc cosine of z
Source:
show
| on GitHub
def acos(z)
begin
if z.real? and z >= -1 and z <= 1
acos!(z)
else
(-1.0).i * log(z + 1.0.i * sqrt(1.0 - z * z))
end
rescue NoMethodError
handle_no_method_error
end
end
returns the inverse hyperbolic cosine of z
Source:
show
| on GitHub
def acosh(z)
begin
if z.real? and z >= 1
acosh!(z)
else
log(z + sqrt(z * z - 1.0))
end
rescue NoMethodError
handle_no_method_error
end
end
returns the arc sine of z
Source:
show
| on GitHub
def asin(z)
begin
if z.real? and z >= -1 and z <= 1
asin!(z)
else
(-1.0).i * log(1.0.i * z + sqrt(1.0 - z * z))
end
rescue NoMethodError
handle_no_method_error
end
end
returns the inverse hyperbolic sine of z
Source:
show
| on GitHub
def asinh(z)
begin
if z.real?
asinh!(z)
else
log(z + sqrt(1.0 + z * z))
end
rescue NoMethodError
handle_no_method_error
end
end
returns the arc tangent of z
Source:
show
| on GitHub
def atan(z)
begin
if z.real?
atan!(z)
else
1.0.i * log((1.0.i + z) / (1.0.i - z)) / 2.0
end
rescue NoMethodError
handle_no_method_error
end
end
returns the arc tangent of y
divided by x
using
the signs of y
and x
to determine the quadrant
Source:
show
| on GitHub
def atan2(y,x)
begin
if y.real? and x.real?
atan2!(y,x)
else
(-1.0).i * log((x + 1.0.i * y) / sqrt(x * x + y * y))
end
rescue NoMethodError
handle_no_method_error
end
end
returns the inverse hyperbolic tangent of z
Source:
show
| on GitHub
def atanh(z)
begin
if z.real? and z >= -1 and z <= 1
atanh!(z)
else
log((1.0 + z) / (1.0 - z)) / 2.0
end
rescue NoMethodError
handle_no_method_error
end
end
returns the principal value of the cube root of z
returns the cosine of z
, where z
is given in
radians
Source:
show
| on GitHub
def cos(z)
begin
if z.real?
cos!(z)
else
Complex(cos!(z.real) * cosh!(z.imag),
-sin!(z.real) * sinh!(z.imag))
end
rescue NoMethodError
handle_no_method_error
end
end
returns the hyperbolic cosine of z
, where z
is
given in radians
Source:
show
| on GitHub
def cosh(z)
begin
if z.real?
cosh!(z)
else
Complex(cosh!(z.real) * cos!(z.imag),
sinh!(z.real) * sin!(z.imag))
end
rescue NoMethodError
handle_no_method_error
end
end
Math::E raised to the z
power
exp(Complex(0,0)) #=> 1.0+0.0i
exp(Complex(0,PI)) #=> -1.0+1.2246467991473532e-16i
exp(Complex(0,PI/2.0)) #=> 6.123233995736766e-17+1.0i
Source:
show
| on GitHub
def exp(z)
begin
if z.real?
exp!(z)
else
ere = exp!(z.real)
Complex(ere * cos!(z.imag),
ere * sin!(z.imag))
end
rescue NoMethodError
handle_no_method_error
end
end
Returns the natural logarithm of Complex. If a
second argument is given, it will be the base of logarithm.
log(Complex(0,0)) #=> -Infinity+0.0i
Source:
show
| on GitHub
def log(*args)
begin
z, b = args
unless b.nil? || b.kind_of?(Numeric)
raise TypeError, "Numeric Number required"
end
if z.real? and z >= 0 and (b.nil? or b >= 0)
log!(*args)
else
a = Complex(log!(z.abs), z.arg)
if b
a /= log(b)
end
a
end
rescue NoMethodError
handle_no_method_error
end
end
returns the base 10 logarithm of z
Source:
show
| on GitHub
def log10(z)
begin
if z.real? and z >= 0
log10!(z)
else
log(z) / log!(10)
end
rescue NoMethodError
handle_no_method_error
end
end
returns the base 2 logarithm of z
Source:
show
| on GitHub
def log2(z)
begin
if z.real? and z >= 0
log2!(z)
else
log(z) / log!(2)
end
rescue NoMethodError
handle_no_method_error
end
end
returns the sine of z
, where z
is given in
radians
Source:
show
| on GitHub
def sin(z)
begin
if z.real?
sin!(z)
else
Complex(sin!(z.real) * cosh!(z.imag),
cos!(z.real) * sinh!(z.imag))
end
rescue NoMethodError
handle_no_method_error
end
end
returns the hyperbolic sine of z
, where z
is
given in radians
Source:
show
| on GitHub
def sinh(z)
begin
if z.real?
sinh!(z)
else
Complex(sinh!(z.real) * cos!(z.imag),
cosh!(z.real) * sin!(z.imag))
end
rescue NoMethodError
handle_no_method_error
end
end
Returns the non-negative square root of Complex.
sqrt(-1) #=> 0+1.0i
sqrt(Complex(-1,0)) #=> 0.0+1.0i
sqrt(Complex(0,8)) #=> 2.0+2.0i
Source:
show
| on GitHub
def sqrt(z)
begin
if z.real?
if z < 0
Complex(0, sqrt!(-z))
else
sqrt!(z)
end
else
if z.imag < 0 ||
(z.imag == 0 && z.imag.to_s[0] == '-')
sqrt(z.conjugate).conjugate
else
r = z.abs
x = z.real
Complex(sqrt!((r + x) / 2.0), sqrt!((r - x) / 2.0))
end
end
rescue NoMethodError
handle_no_method_error
end
end
returns the tangent of z
, where z
is given in
radians
Source:
show
| on GitHub
def tan(z)
begin
if z.real?
tan!(z)
else
sin(z) / cos(z)
end
rescue NoMethodError
handle_no_method_error
end
end
returns the hyperbolic tangent of z
, where z
is
given in radians
Source:
show
| on GitHub
def tanh(z)
begin
if z.real?
tanh!(z)
else
sinh(z) / cosh(z)
end
rescue NoMethodError
handle_no_method_error
end
end
Instance Private methods
returns the arc cosine of z
Source:
show
| on GitHub
def acos(z)
begin
if z.real? and z >= -1 and z <= 1
acos!(z)
else
(-1.0).i * log(z + 1.0.i * sqrt(1.0 - z * z))
end
rescue NoMethodError
handle_no_method_error
end
end
returns the inverse hyperbolic cosine of z
Source:
show
| on GitHub
def acosh(z)
begin
if z.real? and z >= 1
acosh!(z)
else
log(z + sqrt(z * z - 1.0))
end
rescue NoMethodError
handle_no_method_error
end
end
returns the arc sine of z
Source:
show
| on GitHub
def asin(z)
begin
if z.real? and z >= -1 and z <= 1
asin!(z)
else
(-1.0).i * log(1.0.i * z + sqrt(1.0 - z * z))
end
rescue NoMethodError
handle_no_method_error
end
end
returns the inverse hyperbolic sine of z
Source:
show
| on GitHub
def asinh(z)
begin
if z.real?
asinh!(z)
else
log(z + sqrt(1.0 + z * z))
end
rescue NoMethodError
handle_no_method_error
end
end
returns the arc tangent of z
Source:
show
| on GitHub
def atan(z)
begin
if z.real?
atan!(z)
else
1.0.i * log((1.0.i + z) / (1.0.i - z)) / 2.0
end
rescue NoMethodError
handle_no_method_error
end
end
returns the arc tangent of y
divided by x
using
the signs of y
and x
to determine the quadrant
Source:
show
| on GitHub
def atan2(y,x)
begin
if y.real? and x.real?
atan2!(y,x)
else
(-1.0).i * log((x + 1.0.i * y) / sqrt(x * x + y * y))
end
rescue NoMethodError
handle_no_method_error
end
end
returns the inverse hyperbolic tangent of z
Source:
show
| on GitHub
def atanh(z)
begin
if z.real? and z >= -1 and z <= 1
atanh!(z)
else
log((1.0 + z) / (1.0 - z)) / 2.0
end
rescue NoMethodError
handle_no_method_error
end
end
returns the principal value of the cube root of z
returns the cosine of z
, where z
is given in
radians
Source:
show
| on GitHub
def cos(z)
begin
if z.real?
cos!(z)
else
Complex(cos!(z.real) * cosh!(z.imag),
-sin!(z.real) * sinh!(z.imag))
end
rescue NoMethodError
handle_no_method_error
end
end
returns the hyperbolic cosine of z
, where z
is
given in radians
Source:
show
| on GitHub
def cosh(z)
begin
if z.real?
cosh!(z)
else
Complex(cosh!(z.real) * cos!(z.imag),
sinh!(z.real) * sin!(z.imag))
end
rescue NoMethodError
handle_no_method_error
end
end
Math::E raised to the z
power
exp(Complex(0,0)) #=> 1.0+0.0i
exp(Complex(0,PI)) #=> -1.0+1.2246467991473532e-16i
exp(Complex(0,PI/2.0)) #=> 6.123233995736766e-17+1.0i
Source:
show
| on GitHub
def exp(z)
begin
if z.real?
exp!(z)
else
ere = exp!(z.real)
Complex(ere * cos!(z.imag),
ere * sin!(z.imag))
end
rescue NoMethodError
handle_no_method_error
end
end
Returns the natural logarithm of Complex. If a
second argument is given, it will be the base of logarithm.
log(Complex(0,0)) #=> -Infinity+0.0i
Source:
show
| on GitHub
def log(*args)
begin
z, b = args
unless b.nil? || b.kind_of?(Numeric)
raise TypeError, "Numeric Number required"
end
if z.real? and z >= 0 and (b.nil? or b >= 0)
log!(*args)
else
a = Complex(log!(z.abs), z.arg)
if b
a /= log(b)
end
a
end
rescue NoMethodError
handle_no_method_error
end
end
returns the base 10 logarithm of z
Source:
show
| on GitHub
def log10(z)
begin
if z.real? and z >= 0
log10!(z)
else
log(z) / log!(10)
end
rescue NoMethodError
handle_no_method_error
end
end
returns the base 2 logarithm of z
Source:
show
| on GitHub
def log2(z)
begin
if z.real? and z >= 0
log2!(z)
else
log(z) / log!(2)
end
rescue NoMethodError
handle_no_method_error
end
end
returns the sine of z
, where z
is given in
radians
Source:
show
| on GitHub
def sin(z)
begin
if z.real?
sin!(z)
else
Complex(sin!(z.real) * cosh!(z.imag),
cos!(z.real) * sinh!(z.imag))
end
rescue NoMethodError
handle_no_method_error
end
end
returns the hyperbolic sine of z
, where z
is
given in radians
Source:
show
| on GitHub
def sinh(z)
begin
if z.real?
sinh!(z)
else
Complex(sinh!(z.real) * cos!(z.imag),
cosh!(z.real) * sin!(z.imag))
end
rescue NoMethodError
handle_no_method_error
end
end
Returns the non-negative square root of Complex.
sqrt(-1) #=> 0+1.0i
sqrt(Complex(-1,0)) #=> 0.0+1.0i
sqrt(Complex(0,8)) #=> 2.0+2.0i
Source:
show
| on GitHub
def sqrt(z)
begin
if z.real?
if z < 0
Complex(0, sqrt!(-z))
else
sqrt!(z)
end
else
if z.imag < 0 ||
(z.imag == 0 && z.imag.to_s[0] == '-')
sqrt(z.conjugate).conjugate
else
r = z.abs
x = z.real
Complex(sqrt!((r + x) / 2.0), sqrt!((r - x) / 2.0))
end
end
rescue NoMethodError
handle_no_method_error
end
end
returns the tangent of z
, where z
is given in
radians
Source:
show
| on GitHub
def tan(z)
begin
if z.real?
tan!(z)
else
sin(z) / cos(z)
end
rescue NoMethodError
handle_no_method_error
end
end
returns the hyperbolic tangent of z
, where z
is
given in radians
Source:
show
| on GitHub
def tanh(z)
begin
if z.real?
tanh!(z)
else
sinh(z) / cosh(z)
end
rescue NoMethodError
handle_no_method_error
end
end