Module: CMath
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Instance Chain:
self,
Math
|
|
Defined in: | lib/cmath.rb |
Overview
Trigonometric and transcendental functions for complex numbers.
CMath
is a library that provides trigonometric and transcendental functions for complex numbers. The functions in this module accept integers, floating-point numbers or complex numbers as arguments.
Note that the selection of functions is similar, but not identical, to that in module math. The reason for having two modules is that some users aren't interested in complex numbers, and perhaps don't even know what they are. They would rather have Math.sqrt(-1) raise an exception than return a complex number.
Usage
To start using this library, simply require cmath library:
require "cmath"
And after call any CMath
function. For example:
CMath.sqrt(-9) #=> 0+3.0i
CMath.exp(0 + 0i) #=> 1.0+0.0i
CMath.log10(-5.to_c) #=> (0.6989700043360187+1.3643763538418412i)
For more information you can see Complec class.
Class Method Summary
-
.acos(z)
mod_func
returns the arc cosine of
z
- .acos! mod_func
-
.acosh(z)
mod_func
returns the inverse hyperbolic cosine of
z
- .acosh! mod_func
-
.asin(z)
mod_func
returns the arc sine of
z
- .asin! mod_func
-
.asinh(z)
mod_func
returns the inverse hyperbolic sine of
z
- .asinh! mod_func
-
.atan(z)
mod_func
returns the arc tangent of
z
- .atan! mod_func
-
.atan2(y, x)
mod_func
returns the arc tangent of
y
divided byx
using the signs ofy
andx
to determine the quadrant. - .atan2! mod_func
-
.atanh(z)
mod_func
returns the inverse hyperbolic tangent of
z
- .atanh! mod_func
-
.cbrt(z)
mod_func
returns the principal value of the cube root of
z
- .cbrt! mod_func
-
.cos(z)
mod_func
returns the cosine of
z
, wherez
is given in radians. - .cos! mod_func
-
.cosh(z)
mod_func
returns the hyperbolic cosine of
z
, wherez
is given in radians. - .cosh! mod_func
-
.exp(z)
mod_func
Math::E
raised to thez
power. - .exp! mod_func
-
.log(*args)
mod_func
Returns the natural logarithm of Complex.
- .log! mod_func
-
.log10(z)
mod_func
returns the base 10 logarithm of
z
- .log10! mod_func
-
.log2(z)
mod_func
returns the base 2 logarithm of
z
- .log2! mod_func
-
.sin(z)
mod_func
returns the sine of
z
, wherez
is given in radians. - .sin! mod_func
-
.sinh(z)
mod_func
returns the hyperbolic sine of
z
, wherez
is given in radians. - .sinh! mod_func
-
.sqrt(z)
mod_func
Returns the non-negative square root of Complex.
- .sqrt! mod_func
-
.tan(z)
mod_func
returns the tangent of
z
, wherez
is given in radians. - .tan! mod_func
-
.tanh(z)
mod_func
returns the hyperbolic tangent of
z
, wherez
is given in radians. - .tanh! mod_func
Class Method Details
.acos(z) (mod_func)
returns the arc cosine of z
CMath.acos(1 + 1i) #=> (0.9045568943023813-1.0612750619050357i)
# File 'lib/cmath.rb', line 288
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
.acos! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 49
alias acos! acos
.acosh(z) (mod_func)
returns the inverse hyperbolic cosine of z
CMath.acosh(1 + 1i) #=> (1.0612750619050357+0.9045568943023813i)
# File 'lib/cmath.rb', line 353
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
.acosh! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 54
alias acosh! acosh
.asin(z) (mod_func)
returns the arc sine of z
CMath.asin(1 + 1i) #=> (0.6662394324925153+1.0612750619050355i)
# File 'lib/cmath.rb', line 272
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
.asin! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 48
alias asin! asin
.asinh(z) (mod_func)
returns the inverse hyperbolic sine of z
CMath.asinh(1 + 1i) #=> (1.0612750619050357+0.6662394324925153i)
# File 'lib/cmath.rb', line 337
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
.asinh! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 53
alias asinh! asinh
.atan(z) (mod_func)
returns the arc tangent of z
CMath.atan(1 + 1i) #=> (1.0172219678978514+0.4023594781085251i)
# File 'lib/cmath.rb', line 304
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
.atan! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 50
alias atan! atan
.atan2(y, x) (mod_func)
returns the arc tangent of y
divided by x
using the signs of y
and x
to determine the quadrant
CMath.atan2(1 + 1i, 0) #=> (1.5707963267948966+0.0i)
# File 'lib/cmath.rb', line 321
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
.atan2! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 51
alias atan2! atan2
.atanh(z) (mod_func)
returns the inverse hyperbolic tangent of z
CMath.atanh(1 + 1i) #=> (0.4023594781085251+1.0172219678978514i)
# File 'lib/cmath.rb', line 369
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
.atanh! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 55
alias atanh! atanh
.cbrt(z) (mod_func)
returns the principal value of the cube root of z
CMath.cbrt(1 + 4i) #=> (1.449461632813119+0.6858152562177092i)
# File 'lib/cmath.rb', line 164
def cbrt(z) z ** (1.0/3) end
.cbrt! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 38
alias cbrt! cbrt
.cos(z) (mod_func)
returns the cosine of z
, where z
is given in radians
CMath.cos(1 + 1i) #=> (0.8337300251311491-0.9888977057628651i)
.cos! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 41
alias cos! cos
.cosh(z) (mod_func)
returns the hyperbolic cosine of z
, where z
is given in radians
CMath.cosh(1 + 1i) #=> (0.8337300251311491+0.9888977057628651i)
.cosh! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 45
alias cosh! cosh
.exp(z) (mod_func)
Math::E
raised to the z
power
CMath.exp(2i) #=> (-0.4161468365471424+0.9092974268256817i)
# File 'lib/cmath.rb', line 61
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
.exp! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 33
alias exp! exp
.log(*args) (mod_func)
Returns the natural logarithm of Complex. If a second argument is given, it will be the base of logarithm.
CMath.log(1 + 4i) #=> (1.416606672028108+1.3258176636680326i)
CMath.log(1 + 4i, 10) #=> (0.6152244606891369+0.5757952953408879i)
# File 'lib/cmath.rb', line 81
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
.log! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 34
alias log! log
.log10(z) (mod_func)
returns the base 10 logarithm of z
CMath.log10(-1) #=> (0.0+1.3643763538418412i)
# File 'lib/cmath.rb', line 121
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
.log10! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 36
alias log10! log10
.log2(z) (mod_func)
returns the base 2 logarithm of z
CMath.log2(-1) => (0.0+4.532360141827194i)
# File 'lib/cmath.rb', line 105
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
.log2! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 35
alias log2! log2
.sin(z) (mod_func)
returns the sine of z
, where z
is given in radians
CMath.sin(1 + 1i) #=> (1.2984575814159773+0.6349639147847361i)
.sin! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 40
alias sin! sin
.sinh(z) (mod_func)
returns the hyperbolic sine of z
, where z
is given in radians
CMath.sinh(1 + 1i) #=> (0.6349639147847361+1.2984575814159773i)
.sinh! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 44
alias sinh! sinh
.sqrt(z) (mod_func)
Returns the non-negative square root of Complex.
CMath.sqrt(-1 + 0i) #=> 0.0+1.0i
# File 'lib/cmath.rb', line 137
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
.sqrt! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 37
alias sqrt! sqrt
.tan(z) (mod_func)
returns the tangent of z
, where z
is given in radians
CMath.tan(1 + 1i) #=> (0.27175258531951174+1.0839233273386943i)
# File 'lib/cmath.rb', line 206
def tan(z) begin if z.real? tan!(z) else sin(z) / cos(z) end rescue NoMethodError handle_no_method_error end end
.tan! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 42
alias tan! tan
.tanh(z) (mod_func)
returns the hyperbolic tangent of z
, where z
is given in radians
CMath.tanh(1 + 1i) #=> (1.0839233273386943+0.27175258531951174i)
# File 'lib/cmath.rb', line 256
def tanh(z) begin if z.real? tanh!(z) else sinh(z) / cosh(z) end rescue NoMethodError handle_no_method_error end end
.tanh! (mod_func)
[ GitHub ]# File 'lib/cmath.rb', line 46
alias tanh! tanh