人気ブログランキング | 話題のタグを見る

Haskell で正弦波を作る。

Haskell で正弦波のデータを作成して CSV ファイルにする方法をやってみた。

まず正弦波の1周期を100等分したデータを作成する。

Prelude> take 3 $ iterate (+(2*pi/100)) 0
[0.0,6.283185307179587e-2,0.12566370614359174]

次にそのデータの sin 値を計算する。

Prelude> map sin $ take 3 $ iterate (+(2*pi/100)) 0
[0.0,6.279051952931337e-2,0.12533323356430426]

それらの数値を文字列にする。

Prelude> map show $ map sin $ take 3 $ iterate (+(2*pi/100)) 0
["0.0","6.279051952931337e-2","0.12533323356430426"]

それを改行区切りの文字列にする。

Prelude> unlines $ map show $ map sin $ take 3 $ iterate (+(2*pi/100)) 0
"0.0\n6.279051952931337e-2\n0.12533323356430426\n"

それを "sin.cvs" というファイルにする。データ数は100にする。

Prelude> writeFile "sin.csv" $ unlines $ map show $ map sin $ take 100 $ iterate (+(2*pi/100)) 0

ファイルのデータを確認する。

Prelude> readFile "sin.csv" >>= putStr
0.0
6.279051952931337e-2
0.12533323356430426
(以下省略)

こうしてできた sin.csv を LibreOffice Calc で開いてグラフを表示させると正弦波ができているのが確認できる。

追記

正弦波の作り方は次の書き方のほうがもう少しコンパクトに書ける。

Prelude> Prelude> writeFile "sin2.csv" $ unlines $ map (show . sin) $ map (*(2*pi/100)) [0..99]
by tnomura9 | 2012-11-23 14:34 | Haskell | Comments(0)
<< 離散線形システムの畳み込みの計算 レゴで作った工場のライン >>