Spec-Zone.ru › Ruby 2.4

модуль CMath

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

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

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

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

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

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

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

require "cmath"

Открытые методы класса

acos(z) Показать исходный код
# File lib/cmath.rb, line 280
def acos(z)
  begin
    if z.real? and z >= -1 and z <= 1
      RealMath.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)
acosh(z) Показать исходный код
# File lib/cmath.rb, line 345
def acosh(z)
  begin
    if z.real? and z >= 1
      RealMath.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)
asin(z) Показать исходный код
# File lib/cmath.rb, line 264
def asin(z)
  begin
    if z.real? and z >= -1 and z <= 1
      RealMath.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)
asinh(z) Показать исходный код
# File lib/cmath.rb, line 329
def asinh(z)
  begin
    if z.real?
      RealMath.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)
atan(z) Показать исходный код
# File lib/cmath.rb, line 296
def atan(z)
  begin
    if z.real?
      RealMath.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)
atan2(y,x) Показать исходный код
# File lib/cmath.rb, line 313
def atan2(y,x)
  begin
    if y.real? and x.real?
      RealMath.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)
atanh(z) Показать исходный код
# File lib/cmath.rb, line 361
def atanh(z)
  begin
    if z.real? and z >= -1 and z <= 1
      RealMath.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)
cbrt(z) Показать исходный код
# File lib/cmath.rb, line 156
def cbrt(z)
  z ** (1.0/3)
end

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

CMath.cbrt(1 + 4i) #=> (1.449461632813119+0.6858152562177092i)
cos(z) Показать исходный код
# File lib/cmath.rb, line 181
def cos(z)
  begin
    if z.real?
      RealMath.cos(z)
    else
      Complex(RealMath.cos(z.real) * RealMath.cosh(z.imag),
              -RealMath.sin(z.real) * RealMath.sinh(z.imag))
    end
  rescue NoMethodError
    handle_no_method_error
  end
end

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

CMath.cos(1 + 1i) #=> (0.8337300251311491-0.9888977057628651i)
cosh(z) Показать исходный код
# File lib/cmath.rb, line 231
def cosh(z)
  begin
    if z.real?
      RealMath.cosh(z)
    else
      Complex(RealMath.cosh(z.real) * RealMath.cos(z.imag),
              RealMath.sinh(z.real) * RealMath.sin(z.imag))
    end
  rescue NoMethodError
    handle_no_method_error
  end
end

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

CMath.cosh(1 + 1i) #=> (0.8337300251311491+0.9888977057628651i)
exp(z) Показать исходный код
# File lib/cmath.rb, line 61
def exp(z)
  begin
    if z.real?
      RealMath.exp(z)
    else
      ere = RealMath.exp(z.real)
      Complex(ere * RealMath.cos(z.imag),
              ere * RealMath.sin(z.imag))
    end
  rescue NoMethodError
    handle_no_method_error
  end
end

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

CMath.exp(1.i * Math::PI) #=> (-1.0+1.2246467991473532e-16i)
log(z, b=::Math::E) Показать исходный код
# File lib/cmath.rb, line 81
def log(z, b=::Math::E)
  begin
    if z.real? && z >= 0 && b >= 0
      RealMath.log(z, b)
    else
      Complex(RealMath.log(z.abs), z.arg) / log(b)
    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)
log10(z) Показать исходный код
# File lib/cmath.rb, line 113
def log10(z)
  begin
    if z.real? and z >= 0
      RealMath.log10(z)
    else
      log(z) / RealMath.log(10)
    end
  rescue NoMethodError
    handle_no_method_error
  end
end

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

CMath.log10(-1) #=> (0.0+1.3643763538418412i)
log2(z) Показать исходный код
# File lib/cmath.rb, line 97
def log2(z)
  begin
    if z.real? and z >= 0
      RealMath.log2(z)
    else
      log(z) / RealMath.log(2)
    end
  rescue NoMethodError
    handle_no_method_error
  end
end

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

CMath.log2(-1) => (0.0+4.532360141827194i)
sin(z) Показать исходный код
# File lib/cmath.rb, line 164
def sin(z)
  begin
    if z.real?
      RealMath.sin(z)
    else
      Complex(RealMath.sin(z.real) * RealMath.cosh(z.imag),
              RealMath.cos(z.real) * RealMath.sinh(z.imag))
    end
  rescue NoMethodError
    handle_no_method_error
  end
end

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

CMath.sin(1 + 1i) #=> (1.2984575814159773+0.6349639147847361i)
sinh(z) Показать исходный код
# File lib/cmath.rb, line 214
def sinh(z)
  begin
    if z.real?
      RealMath.sinh(z)
    else
      Complex(RealMath.sinh(z.real) * RealMath.cos(z.imag),
              RealMath.cosh(z.real) * RealMath.sin(z.imag))
    end
  rescue NoMethodError
    handle_no_method_error
  end
end

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

CMath.sinh(1 + 1i) #=> (0.6349639147847361+1.2984575814159773i)
sqrt(z) Показать исходный код
# File lib/cmath.rb, line 129
def sqrt(z)
  begin
    if z.real?
      if z < 0
        Complex(0, RealMath.sqrt(-z))
      else
        RealMath.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(RealMath.sqrt((r + x) / 2.0), RealMath.sqrt((r - x) / 2.0))
      end
    end
  rescue NoMethodError
    handle_no_method_error
  end
end

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

CMath.sqrt(-1 + 0i) #=> 0.0+1.0i
tan(z) Показать исходный код
# File lib/cmath.rb, line 198
def tan(z)
  begin
    if z.real?
      RealMath.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)
tanh(z) Показать исходный код
# File lib/cmath.rb, line 248
def tanh(z)
  begin
    if z.real?
      RealMath.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)

Свойства методов экземпляра (приватные)

acos(z) Показать исходный код
# File lib/cmath.rb, line 280
def acos(z)
  begin
    if z.real? and z >= -1 and z <= 1
      RealMath.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)
acosh(z) Показать исходный код
# File lib/cmath.rb, line 345
def acosh(z)
  begin
    if z.real? and z >= 1
      RealMath.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)
asin(z) Показать исходный код
# File lib/cmath.rb, line 264
def asin(z)
  begin
    if z.real? and z >= -1 and z <= 1
      RealMath.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)
asinh(z) Показать исходный код
# File lib/cmath.rb, line 329
def asinh(z)
  begin
    if z.real?
      RealMath.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)
atan(z) Показать исходный код
# File lib/cmath.rb, line 296
def atan(z)
  begin
    if z.real?
      RealMath.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)
atan2(y,x) Показать исходный код
# File lib/cmath.rb, line 313
def atan2(y,x)
  begin
    if y.real? and x.real?
      RealMath.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)
atanh(z) Показать исходный код
# File lib/cmath.rb, line 361
def atanh(z)
  begin
    if z.real? and z >= -1 and z <= 1
      RealMath.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)
cbrt(z) Показать исходный код
# File lib/cmath.rb, line 156
def cbrt(z)
  z ** (1.0/3)
end

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

CMath.cbrt(1 + 4i) #=> (1.449461632813119+0.6858152562177092i)
cos(z) Показать исходный код
# File lib/cmath.rb, line 181
def cos(z)
  begin
    if z.real?
      RealMath.cos(z)
    else
      Complex(RealMath.cos(z.real) * RealMath.cosh(z.imag),
              -RealMath.sin(z.real) * RealMath.sinh(z.imag))
    end
  rescue NoMethodError
    handle_no_method_error
  end
end

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

CMath.cos(1 + 1i) #=> (0.8337300251311491-0.9888977057628651i)
cosh(z) Показать исходный код
# File lib/cmath.rb, line 231
def cosh(z)
  begin
    if z.real?
      RealMath.cosh(z)
    else
      Complex(RealMath.cosh(z.real) * RealMath.cos(z.imag),
              RealMath.sinh(z.real) * RealMath.sin(z.imag))
    end
  rescue NoMethodError
    handle_no_method_error
  end
end

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

CMath.cosh(1 + 1i) #=> (0.8337300251311491+0.9888977057628651i)
exp(z) Показать исходный код
# File lib/cmath.rb, line 61
def exp(z)
  begin
    if z.real?
      RealMath.exp(z)
    else
      ere = RealMath.exp(z.real)
      Complex(ere * RealMath.cos(z.imag),
              ere * RealMath.sin(z.imag))
    end
  rescue NoMethodError
    handle_no_method_error
  end
end

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

CMath.exp(1.i * Math::PI) #=> (-1.0+1.2246467991473532e-16i)
log(z, b=::Math::E) Показать исходный код
# File lib/cmath.rb, line 81
def log(z, b=::Math::E)
  begin
    if z.real? && z >= 0 && b >= 0
      RealMath.log(z, b)
    else
      Complex(RealMath.log(z.abs), z.arg) / log(b)
    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)
log10(z) Показать исходный код
# File lib/cmath.rb, line 113
def log10(z)
  begin
    if z.real? and z >= 0
      RealMath.log10(z)
    else
      log(z) / RealMath.log(10)
    end
  rescue NoMethodError
    handle_no_method_error
  end
end

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

CMath.log10(-1) #=> (0.0+1.3643763538418412i)
log2(z) Показать исходный код
# File lib/cmath.rb, line 97
def log2(z)
  begin
    if z.real? and z >= 0
      RealMath.log2(z)
    else
      log(z) / RealMath.log(2)
    end
  rescue NoMethodError
    handle_no_method_error
  end
end

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

CMath.log2(-1) => (0.0+4.532360141827194i)
sin(z) Показать исходный код
# File lib/cmath.rb, line 164
def sin(z)
  begin
    if z.real?
      RealMath.sin(z)
    else
      Complex(RealMath.sin(z.real) * RealMath.cosh(z.imag),
              RealMath.cos(z.real) * RealMath.sinh(z.imag))
    end
  rescue NoMethodError
    handle_no_method_error
  end
end

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

CMath.sin(1 + 1i) #=> (1.2984575814159773+0.6349639147847361i)
sinh(z) Показать исходный код
# File lib/cmath.rb, line 214
def sinh(z)
  begin
    if z.real?
      RealMath.sinh(z)
    else
      Complex(RealMath.sinh(z.real) * RealMath.cos(z.imag),
              RealMath.cosh(z.real) * RealMath.sin(z.imag))
    end
  rescue NoMethodError
    handle_no_method_error
  end
end

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

CMath.sinh(1 + 1i) #=> (0.6349639147847361+1.2984575814159773i)
sqrt(z) Показать исходный код
# File lib/cmath.rb, line 129
def sqrt(z)
  begin
    if z.real?
      if z < 0
        Complex(0, RealMath.sqrt(-z))
      else
        RealMath.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(RealMath.sqrt((r + x) / 2.0), RealMath.sqrt((r - x) / 2.0))
      end
    end
  rescue NoMethodError
    handle_no_method_error
  end
end

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

CMath.sqrt(-1 + 0i) #=> 0.0+1.0i
tan(z) Показать исходный код
# File lib/cmath.rb, line 198
def tan(z)
  begin
    if z.real?
      RealMath.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)
tanh(z) Показать исходный код
# File lib/cmath.rb, line 248
def tanh(z)
  begin
    if z.real?
      RealMath.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)

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