久しぶりにどうかく?orgを見てたら簡単そうなのがあった。
doukaku.org -
複素数の加算、減算、乗算、除算、乗算、絶対値を解くだけのもの。ライブラリの使用ができるので、rubyなんかだと問題にならない。
コード書いてみた
Rubyのコードはこんな感じ。
require "complex" p Complex(3.0, 1.0) + Complex(4.0, -1.0) p Complex(5.0, -9.0) - Complex(2.0, -6.0) p Complex(5.0, 3.0) * Complex(5.0, 8.0) p Complex(9.0, -7.0) / Complex(9.0, -3.0) p Complex(2.0, 3.0).abs
実行結果
Complex(7.0, 0.0) Complex(3.0, -3.0) Complex(1.0, 55.0) Complex(1.13333333333333, -0.4) 3.60555127546399
Complexメソッドを明示的に呼び出さないといけないので面倒。
てか、小数点以下を1桁まで書くのを忘れて除算を間違えたorz
複素数の書き方はPythonの方が直感的で好きだ。必要だったら勝手に小数点に変換してくれるし。
>>> (3 + 1j) + (4 - 1j) (7+0j) >>> (5 - 9j) - (2 - 6j) (3-3j) >>> (5 + 3j) * (5 + 8j) (1+55j) >>> (9 - 7j) / (9 - 3j) (1.1333333333333333-0.40000000000000002j) >>> abs(2 + 3j) 3.6055512754639896
Rubyについて、人のコードを見てみたらComplexメソッドを呼ばない書き方もあるみたい。
require "complex" p (3.0 + 1.0.im) + (4.0 - 1.0.im) p (5.0 - 9.0.im) - (2.0 - 6.0.im) p (5.0 + 3.0.im) * (5.0 + 8.0.im) p (9.0 - 7.0.im) / (9.0 - 3.0.im) p (2.0 + 3.0.im).abs
出力結果は、上のものと同じ。こんな書き方あるのは知らなかった!
さらにもうひとつ。pじゃなくてputsだと出力結果もちゃんと直感的に出せます・・・。普段から同じようなものだと思って使ってた・・・orz
7.0+0.0i 3.0-3.0i 1.0+55.0i 1.13333333333333-0.4i 3.60555127546399
あまりに勉強不足でションボリ。
たかが、複素数計算だけど、勉強になってしまった・・・。