IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

Haskellで複素数

複素数のためのData.Complexパッケージがあります。

Data.Complex

複素数:+コンストラクタを使います。

> :i :+
data Complex a = !a :+ !a  -- Defined in ‘Data.Complex’
infix 6 :+

1+2iは次のよう:+を使って次のようになります。

> 1 :+ 2
1 :+ 2
> :t (1 :+ 2)
(1 :+ 2) :: Num a => Complex a

共役はconjugateを使います。

> Data.Complex.conjugate (1 :+ 2)
1 :+ (-2)

通常の加減乗除の演算子が使えます。

> let c1 = 1 :+ 2
> let c2 = 1 :+ (-2)
> c1 + c2
2.0 :+ 0.0
> c1 * c2
5.0 :+ 0.0
> c1 - c2
0.0 :+ 4.0
> c1 / c2
(-0.6) :+ 0.8

極形式も使えます。mkPolar 絶対値 偏角 で指定します。

> mkPolar 1 pi
(-1.0) :+ 1.2246467991473532e-16

複素数から絶対値 偏角 を取り出すことができます。

> polar (1 :+ 1)
(1.4142135623730951,0.7853981633974483)

> polar ((-1) :+ 0)
(1.0,3.141592653589793)

絶対値

> abs (1 :+ 1)
1.4142135623730951 :+ 0.0