Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
CMath is a library that provides trigonometric and transcendental functions for complex numbers.
To start using this library, simply:
require "cmath"
Square root of a negative number is a complex number.
CMath.sqrt(-9) #=> 0+3.0i
returns the arc cosine of z
# File cmath.rb, line 257 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
# File cmath.rb, line 314 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
# File cmath.rb, line 243 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
# File cmath.rb, line 300 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
# File cmath.rb, line 271 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
# File cmath.rb, line 286 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
# File cmath.rb, line 328 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
# File cmath.rb, line 149 def cbrt(z) z ** (1.0/3) end
returns the cosine of z
, where z
is given in
radians
# File cmath.rb, line 170 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
# File cmath.rb, line 214 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
# File cmath.rb, line 52 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
# File cmath.rb, line 71 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
# File cmath.rb, line 107 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
# File cmath.rb, line 93 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
# File cmath.rb, line 155 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
# File cmath.rb, line 199 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
# File cmath.rb, line 124 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
# File cmath.rb, line 185 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
# File cmath.rb, line 229 def tanh(z) begin if z.real? tanh!(z) else sinh(z) / cosh(z) end rescue NoMethodError handle_no_method_error end end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.