Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > complexライブラリ > Complexクラス
class Complex
クラスの継承リスト: Complex < Numeric < Comparable < Object < Kernel < BasicObject
Abstract
複素数を扱うためのクラスです。
このライブラリを require すると、Math モジュールが複素数対応に拡張されます。 対象となる複素数を以下のように極座標表示した時の
z = a + b * i = r * exp(i * t)
偏角 t は[-π,π]の範囲であると考えて、関数は定義されます。 Complex#argを参照して下さい。
以下が複素関数の定義です。
abs(z) = r sqrt(z) = sqrt(r) * exp(i * t/2) exp(z) = exp(a) * exp(i * b) log(z) = log(r) + i * t sin(z) = (exp(i * z) - exp(-i * z)) / 2i cos(z) = (exp(i * z) + exp(-i * z)) / 2 tan(z) = sin(z) / cos(z) sinh(z) = (exp(z) - exp(-z)) / 2 cosh(z) = (exp(z) + exp(-z)) / 2 tanh(z) = sinh(z) / cosh(z) asin(z) = -i * log(i*z + sqrt(1-z*z)) acos(z) = -i * log(z + i*sqrt(1-z*z)) atan(z) = i/2 * log((i+z) / (i-z)) atan2(y, x) = -i * log( (x + i * y) / sqrt( x*x + y*y ) ) asinh(z) = log(z + sqrt(z*z+1)) acosh(z) = log(z + sqrt(z*z-1)) atanh(z) = 1/2 * log((1+z) / (1-z))
また、添付ライブラリのベクトルクラス Vector、および、 行列クラス Matrix を読み込んでいるとき、 Vector や Matrix の要素として、複素数を使うことができます。 Vector および Matrix のそれぞれの項目を参照してください。
例
require 'complex' z1 = Complex.new(4, 3) z2 = Complex.new(2, 1) p z1 + z2 #=> Complex(6, 4) p z1 * z2 #=> Complex(5, 10) i = Complex::I p z1 == 4 + 3 * i #=> true
特異メソッド
generic?(other) -> bool
new(r, i) -> Complex
new!(r, i = 0) -> Complex
-
実部が r、虚部が i であるComplexクラスのオブジェクトを生成します。
- [PARAM] r:
- 生成する複素数の実部
- [PARAM] i:
- 生成する複素数の虚部
例:
p Complex.new(1, 1) #=> Complex(1, 1) p Complex.new!(3.5) #=> Complex(3.5, 0)
polar(r, theta) -> Complex
-
絶対値が r、偏角が theta である Complexクラスのオブジェクトを生成します。
- [PARAM] r:
- 生成する複素数の絶対値。
- [PARAM] theta:
- 生成する複素数の偏角。単位はラジアンです。
例:
p Complex.polar(2.0, 0) #=> Complex(2.0, 0.0) p Complex.polar(2.0, Math::PI) #=> Complex(-2.0, 2.44929359829471e-16)
インスタンスメソッド
self * c -> Complex
-
複素数 c を乗じた結果を返します。
- [PARAM] c:
- 乗算する数
- [RETURN]
- 乗算結果をComplexクラスのオブジェクトとして返します。
例:
c = Complex(1, 1) #=> Complex(1, 1) p c * Complex(2, 2) #=> Complex(0, 4) p c * 3 #=> Complex(3, 3)
self ** c -> Complex
-
複素数 c でべき乗した結果
exp(c * log(self))
を返します
- [PARAM] c:
- 累乗する数
- [RETURN]
- 演算結果をComplexクラスのオブジェクトとして返します。
例:
z1 = Complex.new(1, 1) z2 = Complex.new(2, 2) p z1 ** 2 #=> Complex(0, 2) p z1 ** z2 #=> Complex(-0.265653998849241, 0.319818113856136)
self + c -> Complex
-
複素数 c を加えた結果を返します。
- [PARAM] c:
- 加算する数
- [RETURN]
- 加算結果をComplexクラスのオブジェクトとして返します。
例:
c = Complex(1, 1) #=> Complex(1, 1) p c + Complex(3, 3) #=> Complex(4, 4) p c + 3 #=> Complex(4, 1)
self - c -> Complex
-
複素数 c を減じた結果を返します。
- [PARAM] c:
- 減算する数
- [RETURN]
- 減算結果をComplexクラスのオブジェクトとして返します。
例:
c = Complex(3, 3) #=> Complex(3, 3) p c - Complex(2, 2) #=> Complex(1, 1) p c - 3 #=> Complex(0, 3)
self / other -> Complex
-
複素数 other で除した結果を返します。
z1 = a + b * i z2 = c + d * i
としたとき、除算の定義は
z1 / z2 = ((a*c + b*d)/(c*c + d*d)) + ((b*c - a*d)/(c*c + d*d)) * i
です。このため実部と虚部が全て整数だった場合、整数同士の除算として / が 計算されることに注意してください。
z1 = Complex.new(4, 3) z2 = Complex.new(2, 1) p z1 / z2 #=> Complex(2, 0) p 1.0 * z1 / z2 #=> Complex(2.2, 0.4)
- [PARAM] other:
- 除算する数
- [RETURN]
- 除算結果をComplexクラスのオブジェクトとして返します。
例:
z1 = Complex.new(4, 3) z2 = Complex.new(2, 1) p z1 / z2 #=> Complex(2, 0) p 1.0 * z1 / z2 #=> Complex(2.2, 0.4)
[注意] このメソッドは廃止されました。
self <=> c -> Fixnum
-
cとselfの絶対値absを比較した結果を返します。
self と c のComplex#absメソッドの結果を比較し、
- self が大きい場合は正の数
- c が大きい場合は負の数
- 同じ場合には 0
を返します。
- [PARAM] c:
- 比較するComplexクラスのオブジェクト
例:
z1 = Complex.new(1, 1) z2 = Complex.new(2, -2) p z1 <=> z2 #=> -1
[注意] このメソッドは Ruby 1.9 で廃止されました。
self == c -> bool
-
c と等しければ、true を返します。
例:
z1 = Complex.new(1, 2) z2 = Complex.new(1, 0) z3 = Complex.new(0, 1) p z1 == Complex.new(1, 2) #=> true p z1 == z2 #=> false p z2 == 1.0 #=> true p z3 == Complex::I #=> true
abs -> Float
-
自分自身の絶対値を返します。
z = a + b * i
としたとき、絶対値の定義は
sqrt(a*a + b*b)
です。 計算結果としてFloatクラスのオブジェクトが返されることに注意してください。
abs2 -> Fixnum
abs2 -> Float
-
自分自身の絶対値の2乗を返します。
z = a + b * i
としたとき、Complex#abs2 の定義は
a*a + b*b
です。
angle -> Float
arg -> Float
-
複素数の偏角を[-π,π]の範囲で返します。
例:
p Complex.new(0, 1).arg == Math::PI/2 #=> true p Complex.new(0, -1).arg #=> -1.5707963267949
非正の実軸付近での挙動に注意してください。 以下の例のように虚部が 0.0 と -0.0 では値が変わります。
p Complex.new(-1, 0).arg #=> 3.14159265358979 p Complex.new(-1, -0).arg #=> 3.14159265358979 p Complex.new(-1, -0.0).arg #=> -3.14159265358979 p Complex.new(0, 0.0).arg #=> 0.0 p Complex.new(0, -0.0).arg #=> -0.0 p Complex.new(-0.0, 0).arg #=> 3.14159265358979 p Complex.new(-0.0, -0.0).arg #=> -3.14159265358979
coerce(other) -> Array
-
自分自身とotherのペアの配列を生成し、生成した配列を返します。
otherが Complex のオブジェクトではないときは Complex オブジェクト化したものが配列の要素となります。
- [PARAM] other:
- 配列の要素となるオブジェクト
例:
z1 = Complex.new(1, 2) z2 = Complex.new(3, 4) p z1.coerce(5) #=> [Complex(5, 0), Complex(1, 2)] p z1.coerce(z2) #=> [Complex(3, 4), Complex(1, 2)]
conj -> Complex
conjugate -> Complex
-
自分の共役複素数を返します。
例:
z = Complex.new(1, 1) p z.conjugate #=> Complex(1, -1)
denominator -> Fixnum
-
自分自身の実部・虚部の分母のLCM(最小公倍数)を返します。
例:
z1 = Complex.new(1, 2) z2 = Complex.new(Rational.new!(1, 3), Rational.new!(3, 5)) p z1.denominator #=> 1 p z2.denominator #=> 15
hash -> Fixnum
-
複素数のハッシュ値を返します。
例:
z1 = Complex.new(3.5, 1.20) z2 = Complex.new(3.5, 1.21) p z1.hash #=> 1889428376 p z2.hash #=> 425788526
imag -> Fixnum
imag -> Float
image -> Fixnum
image -> Float
-
虚部を返します。
inspect -> String
-
自分自身について "Complex(実部, 虚部)" 形式の文字列を返します。
numerator -> Complex
-
Complex#denominator の値で実部・虚部を通分したものの分子のみを Complex で返します。
具体的な計算式は
- 実部 = 実部の分子 * (実部、虚部の分母の最大公約数 / 実部の分母)
- 虚部 = 虚部の分子 * (実部、虚部の分母の最大公約数 / 虚部の分母)
例:
z1 = Complex.new(1, 2) z2 = Complex.new(Rational.new!(1, 3), Rational.new!(3, 5)) p z1.numerator p z2.numerator
polar -> Array
-
複素数の極座標表示、すなわち、配列 [self.abs, self.arg] を返します。
例:
z = Complex.new(3.0, 4.0) p z #=> Complex(3.0, 4.0) p z.polar #=> [5.0, 0.927295218001612]
quo(other) -> Complex
-
複素数otherでの除算結果を返します。
- [PARAM] other:
- 複素数
- [RETURN]
- self./(other) の結果においての実部と虚部をそれぞれRationalオブジェクト化したものを実部・虚部とするComplexクラスのオブジェクトを返します。
[注意]
[[m:Complex#/]] との違いは実部と虚部が全て整数だった場合に分数([[c:Rational]]クラスのオブジェクト)として計算されます。
例:
z1 = Complex.new(6, 4) z2 = Complex.new(2, 2) p z1.quo(2) #=> Complex(Rational(3, 1), Rational(2, 1)) p z1.quo(z2) #=> Complex(Rational(5, 2), Rational(-1, 2))
real -> Fixnum
real -> Float
-
実部を返します。
scalar? -> bool
-
[注意] このメソッドは常に false を返します。
to_s -> String
-
自分自身について "実部 + 虚部i" 形式の文字列を返します。
定数
I
-
虚数単位です。
[注意] Complex::I は Complex.new(0, 1) で生成されるオブジェクトと同じものです。
追加されるメソッド
Unify
[added by mathn]