掲示板お問い合わせランダムジャンプ

別のblogとか

2012年01月12日
複素数型と関数ライブラリ
色々あって複素数が必要な場面の場合、複素数をどう表現するのか、ということを調べてきました。

Perlの場合、use Math::Complex;すればよい。私の環境では既に入っていた。ただ、気になったのはprint i*i,"\n";の結果が[1,pi]と極形式になること。
なお、さっきのコードを見ればわかるように演算子は普通に実数で使っていたものが(オーバーロードされていて)使えるし、iと書けば虚数単位として認識される。
共役複素数を返す単項演算子は~である。use Math::Complex; $z=1+2*i; print ~$z;というコードを書けば、1-2iと、今度は直交形式で表示される。
ほかに、print sin(i);とか数学関数に複素数を放り込んでもちゃんと計算してくれるし(この場合は1.1752011936438iと表示された)、使いやすい。

Pythonの場合、複素数型がビルトインになっている。但し、虚数単位にはjを使う(数値の後ろに付けると、その数値は実数ではなく純虚数とみなされる)。特に何もせず、print 1j*1j;とだけすると、(-1+0j)と表示される。このように普通に四則計算もできる。
複素数における関数は、実数におけるmathに対応するものとして複素数ではcmathを使う。これは、Pythonの標準ライブラリである。import cmath; print cmath.sin(1j)とすれば、1.17520119364jという結果を得る。

Rubyは、実地で試してみようと思ったらうちのopenSUSEにはRubyがなかったのでsudo zypper install rubyした。リポジトリから持ってこれたバージョンは1.8.7である。
require 'complex'すれば複素数が使えるようになるのだが、どうやらRuby 1.9では、Complexクラスがbuilt-inになるようだ。require 'complex'; print Complex::I*Complex::I;の結果は、-1+0iとなる。ここで、Complex::Iは虚数単位である。
複素数の関数計算は、require 'cmath'すれば、Cmathモジュールで行えるようになる……はずなのだが、どうやら1.8系列にはこのモジュールはないらしい。math.rbすら入っていないし……どういうことなの。

PHPの場合は需要がない? のか、そんなライブラリはないようだ。かろうじて見つけたのがこれこれ

Javaの場合、標準ライブラリには入っていない。Jakarta Commonsにはあるらしいのだが……

VBやC#の場合、.NET Framework 4.0にはComplex構造体があるらしい。私が以前練習で作った関数電卓の場合は.NET 2.0で作ってたのでそんなものはなかった。

C言語だったら最近のバージョンはcomplex.hを使えばいい。

HSPにはそんなものはなかったので、作った
[ 投稿者:芙蓉美晴 (MihailJP) at 02:24 | コーディング | コメント(0) | トラックバック(0) ]

この記事へのコメント

この記事へのトラックバック

この記事へのトラックバックURL
http://shinshu.fm/MHz/48.59/a13652/0000379322.trackback

この記事の固定URL
http://shinshu.fm/MHz/48.59/archives/0000379322.html

記事へのコメント
 
認証コード:
画像に表示されるコードを半角英数字で入力して下さい。画像が読み難い場合はこちら
簡単演算認証: 7 x 5 =
計算の答えを半角英数字で入力して下さい。
名前: [必須]
URL/Email:
タイトル:
コメント:
※記事・コメントなどの削除要請はこちら