hellkite 日記と雑記とメモ。

Shiki Kazamaの駄文と音楽と、時々技術な感じ

複素数の計算


スポンサーリンク


久しぶりにどうかく?orgを見てたら簡単そうなのがあった。
doukaku.org - 
複素数の加算、減算、乗算、除算、乗算、絶対値を解くだけのもの。ライブラリの使用ができるので、rubyなんかだと問題にならない。

問題

せっかくだから、練習で問題をTeX表記を使って書いてみた。

加算

(3+i)+(4-i)

減算

(5-9i)-(2-6i)

乗算

(5+3i)*(5+8i)

除算

(9-7i)/(9-3i)

絶対値

\mid2+3i\mid

コード書いてみた

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


あまりに勉強不足でションボリ。
たかが、複素数計算だけど、勉強になってしまった・・・。