Spec-Zone.ru › Ruby 2.2

модуль CMath

Включенные модули:
Math

Тригонометрические и трансцендентные функции для комплексных чисел.

CMath — библиотека, предоставляющая тригонометрические и трансцендентные функции для комплексных чисел. Функции в этом модуле принимают целые числа, числа с плавающей точкой или комплексные числа в качестве аргументов.

Обратите внимание, что выбор функций аналогичен, но не идентичен, выбору функций в модуле math. Причина наличия двух модулей заключается в том, что некоторые пользователи не заинтересованы в комплексных числах и, возможно, даже не знают, что они собой представляют. Они бы предпочли, чтобы Math#sqrt выбрасывала исключение, а не возвращала комплексное число.

Использование

Чтобы начать использовать эту библиотеку, просто подключите библиотеку cmath:

require "cmath"

И после вызовите любую функцию CMath. Например:

CMath.sqrt(-9)          #=> 0+3.0i
CMath.exp(0 + 0i)       #=> 1.0+0.0i
CMath.log10(-5.to_c)    #=> (0.6989700043360187+1.3643763538418412i)

Для получения более подробной информации можно обратиться к классу Complec.

Методы публичного класса

acos(z) Показать исходный код
# 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

возвращает арккосинус z

CMath.acos(1 + 1i) #=> (0.9045568943023813-1.0612750619050357i)
Также алиасировано как: acos!
acos!(z)
Псевдоним для: acos
acosh(z) Показать исходный код
# 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

возвращает обратную гиперболическую косинус z

CMath.acosh(1 + 1i) #=> (1.0612750619050357+0.9045568943023813i)
Также алиасировано как: acosh!
acosh!(z)
Псевдоним для: acosh
asin(z) Показать исходный код
# 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

возвращает арксинус z

CMath.asin(1 + 1i) #=> (0.6662394324925153+1.0612750619050355i)
Также алиасировано как: asin!
asin!(z)
Псевдоним для: asin
asinh(z) Показать исходный код
# 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

возвращает обратный гиперболический синус z

CMath.asinh(1 + 1i) #=> (1.0612750619050357+0.6662394324925153i)
Также алиасировано как: asinh!
asinh!(z)
Псевдоним для: asinh
atan(z) Показать исходный код
# 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

возвращает арктангенс z

CMath.atan(1 + 1i) #=> (1.0172219678978514+0.4023594781085251i)
Также алиасировано как: atan!
atan!(z)
Псевдоним для: atan
atan2(y,x) Показать исходный код
# 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

возвращает арктангенс y, деленный на x, используя знаки y и x, чтобы определить квадрант

CMath.atan2(1 + 1i, 0) #=> (1.5707963267948966+0.0i)
Также алиасировано как: atan2!
atan2!(y,x)
Псевдоним для: atan2
atanh(z) Показать исходный код
# 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

возвращает обратный гиперболический тангенс z

CMath.atanh(1 + 1i) #=> (0.4023594781085251+1.0172219678978514i)
Также алиасировано как: atanh!
atanh!(z)
Псевдоним для: atanh
cbrt(z) Показать исходный код
# File lib/cmath.rb, line 164
def cbrt(z)
  z ** (1.0/3)
end

возвращает главное значение кубического корня из z

CMath.cbrt(1 + 4i) #=> (1.449461632813119+0.6858152562177092i)
Также алиасировано как: cbrt!
cbrt!(z)
Псевдоним для: cbrt
cos(z) Показать исходный код
# File lib/cmath.rb, line 189
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

возвращает косинус z, где z задано в радианах

CMath.cos(1 + 1i) #=> (0.8337300251311491-0.9888977057628651i)
Также алиасировано как: cos!
cos!(z)
Псевдоним для: cos
cosh(z) Показать исходный код
# File lib/cmath.rb, line 239
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

возвращает гиперболический косинус z, где z задано в радианах

CMath.cosh(1 + 1i) #=> (0.8337300251311491+0.9888977057628651i)
Также алиасировано как: cosh!
cosh!(z)
Псевдоним для: cosh
exp(z) Показать исходный код
# 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

Math::E в степени z

CMath.exp(2i) #=> (-0.4161468365471424+0.9092974268256817i)
Также алиасировано как: exp!
exp!(z)
Псевдоним для: exp
log(*args) Показать исходный код
# 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

Возвращает натуральный логарифм Complex. Если задан второй аргумент, он будет основанием логарифма.

CMath.log(1 + 4i)     #=> (1.416606672028108+1.3258176636680326i)
CMath.log(1 + 4i, 10) #=> (0.6152244606891369+0.5757952953408879i)
Также алиасировано как: log!
log!(*args)
Псевдоним для: log
log10(z) Показать исходный код
# 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

возвращает логарифм по основанию 10 от z

CMath.log10(-1) #=> (0.0+1.3643763538418412i)
Также алиасировано как: log10!
log10!(z)
Псевдоним для: log10
log2(z) Показать исходный код
# 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

возвращает логарифм по основанию 2 от z

CMath.log2(-1) => (0.0+4.532360141827194i)
Также алиасировано как: log2!
log2!(z)
Псевдоним для: log2
sin(z) Показать исходный код
# File lib/cmath.rb, line 172
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

возвращает синус z, где z задано в радианах

CMath.sin(1 + 1i) #=> (1.2984575814159773+0.6349639147847361i)
Также алиасировано как: sin!
sin!(z)
Псевдоним для: sin
sinh(z) Показать исходный код
# File lib/cmath.rb, line 222
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

возвращает гиперболический синус от z, где z задано в радианах

CMath.sinh(1 + 1i) #=> (0.6349639147847361+1.2984575814159773i)
Также псевдоним: sinh!
sinh!(z)
Псевдоним для: sinh
sqrt(z) Показать исходный код
# 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

Возвращает неотрицательный квадратный корень из Complex.

CMath.sqrt(-1 + 0i) #=> 0.0+1.0i
Также псевдоним: sqrt!
sqrt!(z)
Псевдоним для: sqrt
tan(z) Показать исходный код
# 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

возвращает тангенс от z, где z задано в радианах

CMath.tan(1 + 1i) #=> (0.27175258531951174+1.0839233273386943i)
Также псевдоним: tan!
tan!(z)
Псевдоним для: tan
tanh(z) Показать исходный код
# 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

возвращает гиперболический тангенс от z, где z задано в радианах

CMath.tanh(1 + 1i) #=> (1.0839233273386943+0.27175258531951174i)
Также псевдоним: tanh!
tanh!(z)
Псевдоним для: tanh

Приватные методы экземпляра

acos(z) Показать исходный код
# 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

возвращает арккосинус z

CMath.acos(1 + 1i) #=> (0.9045568943023813-1.0612750619050357i)
Также известен как: acos!
acos!(z)
Псевдоним для: acos
acosh(z) Показать исходный код
# 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

возвращает обратный гиперболический косинус z

CMath.acosh(1 + 1i) #=> (1.0612750619050357+0.9045568943023813i)
Также известен как: acosh!
acosh!(z)
Псевдоним для: acosh
asin(z) Показать исходный код
# 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

возвращает арксинус z

CMath.asin(1 + 1i) #=> (0.6662394324925153+1.0612750619050355i)
Также известен как: asin!
asin!(z)
Псевдоним для: asin
asinh(z) Показать исходный код
# 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

возвращает обратный гиперболический синус z

CMath.asinh(1 + 1i) #=> (1.0612750619050357+0.6662394324925153i)
Также известен как: asinh!
asinh!(z)
Псевдоним для: asinh
atan(z) Показать исходный код
# 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

возвращает арктангенс z

CMath.atan(1 + 1i) #=> (1.0172219678978514+0.4023594781085251i)
Также известен как: atan!
atan!(z)
Псевдоним для: atan
atan2(y,x) Показать исходный код
# 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

возвращает арктангенс y деленного на x, используя знаки y и x для определения квадранта

CMath.atan2(1 + 1i, 0) #=> (1.5707963267948966+0.0i)
Также известен как: atan2!
atan2!(y,x)
Псевдоним для: atan2
atanh(z) Показать исходный код
# 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

возвращает обратный гиперболический тангенс z

CMath.atanh(1 + 1i) #=> (0.4023594781085251+1.0172219678978514i)
Также известен как: atanh!
atanh!(z)
Псевдоним для: atanh
cbrt(z) Показать исходный код
# File lib/cmath.rb, line 164
def cbrt(z)
  z ** (1.0/3)
end

возвращает главное значение кубического корня из z

CMath.cbrt(1 + 4i) #=> (1.449461632813119+0.6858152562177092i)
Также известен как: cbrt!
cbrt!(z)
Псевдоним для: cbrt
cos(z) Показать исходный код
# File lib/cmath.rb, line 189
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

возвращает косинус z, где z задан в радианах

CMath.cos(1 + 1i) #=> (0.8337300251311491-0.9888977057628651i)
Также известен как: cos!
cos!(z)
Псевдоним для: cos
cosh(z) Показать исходный код
# File lib/cmath.rb, line 239
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

возвращает гиперболический косинус z, где z задан в радианах

CMath.cosh(1 + 1i) #=> (0.8337300251311491+0.9888977057628651i)
Также известен как: cosh!
cosh!(z)
Псевдоним для: cosh
exp(z) Показать исходный код
# 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

Math::E, возведенное в степень z

CMath.exp(2i) #=> (-0.4161468365471424+0.9092974268256817i)
Также известен как: exp!
exp!(z)
Псевдоним для: exp
log(*args) Показать исходный код
# 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

Возвращает натуральный логарифм Complex. Если задан второй аргумент, он будет основанием логарифма.

CMath.log(1 + 4i)     #=> (1.416606672028108+1.3258176636680326i)
CMath.log(1 + 4i, 10) #=> (0.6152244606891369+0.5757952953408879i)
Также известен как: log!
log!(*args)
Псевдоним для: log
log10(z) Показать исходный код
# 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

возвращает десятичный логарифм z

CMath.log10(-1) #=> (0.0+1.3643763538418412i)
Также известен как: log10!
log10!(z)
Псевдоним для: log10
log2(z) Показать исходный код
# 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

возвращает двоичный логарифм z

CMath.log2(-1) => (0.0+4.532360141827194i)
Также известен как: log2!
log2!(z)
Псевдоним для: log2
sin(z) Показать исходный код
# File lib/cmath.rb, line 172
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

возвращает синус z, где z задан в радианах

CMath.sin(1 + 1i) #=> (1.2984575814159773+0.6349639147847361i)
Также известен как: sin!
sin!(z)
Псевдоним для: sin
sinh(z) Показать исходный код
# File lib/cmath.rb, line 222
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

возвращает гиперболический синус от z, где z задано в радианах

CMath.sinh(1 + 1i) #=> (0.6349639147847361+1.2984575814159773i)
Также псевдоним для: sinh!
sinh!(z)
Псевдоним для: sinh
sqrt(z) Показать исходный код
# 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

Возвращает неотрицательный квадратный корень из Complex.

CMath.sqrt(-1 + 0i) #=> 0.0+1.0i
Также псевдоним для: sqrt!
sqrt!(z)
Псевдоним для: sqrt
tan(z) Показать исходный код
# 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

возвращает тангенс от z, где z задано в радианах

CMath.tan(1 + 1i) #=> (0.27175258531951174+1.0839233273386943i)
Также псевдоним для: tan!
tan!(z)
Псевдоним для: tan
tanh(z) Показать исходный код
# 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

возвращает гиперболический тангенс от z, где z задано в радианах

CMath.tanh(1 + 1i) #=> (1.0839233273386943+0.27175258531951174i)
Также псевдоним для: tanh!
tanh!(z)
Псевдоним для: tanh

Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API