2012年6月6日水曜日

JSXでDFT

JSXという言語

JSXという言語が彗星のごとく現れました.この言語を使ってプログラムを書くと,ギンギンに最適化されたJavaScriptに変換できるということで興味を持ちました.ドキュメントを読んでいくと,文法がJavaに近いこととJava並に型チェックにうるさいことなどが分かりました.

これまでMeSHやNylonの開発にJavaScriptを使ってきたのですが,thisが何を指すか不明確であることや,変数のチェックがないことによるエラーに悩まされてきました.そこに現れたのがJSXです.言語仕様はJavaのように窮屈ですが,今後ライブラリやサービスを提供していくにあたり,妙なエラーに悩まされたくないので,まずは試してみることにします.

DFTのソースコード

DFTは,言わずと知れた離散フーリエ変換(Discrete Fourier Transform)です.周波数分析の強い味方です.今回はC言語で書かれたDFTを移植してみます(※FFTではありません).JSXのドキュメントがまだまだ整備されていないので,ちょとしたプログラムでも試行錯誤の連続でした.とりあえずソースをご覧ください.

ドキュメントの探し方が悪いのか,Math系(Math.PI,Math.sin,Math.cos)が見つかりませんでした.「文法がJavaに似ているので同じ書き方だろう」と信じて試したところ動いたのでほっとしてます.

文法的に面倒だと感じたのは,インスタンス変数やインスタンスメソッドの呼び出し時にthisが必須なことでした.まぁ特に大きな問題ではないですね.

困ったのが配列の初期化でした.Java言語でいう「int x[] = new int[10];」を書きたかったのですが,試行錯誤の上断念しました.仕方ないので宣言時に「var ar = [0];」として強引にarを整数の配列として認識させ,このままでは0が邪魔なので,コンストラクタで「this.ar.pop();」して空の配列としています.その内,ドキュメントが整備されると思います.ドキュメントが整備されたら,この書き方を笑ってください.

後は単純に配列とループです.詳しいアルゴリズムは巷の書籍やWebページを参照してください.ループと言えば,Rubyのようなイテレータが楽で良いですね.

DFTの実行結果

実行結果です.今回の例では,func_yによって定められている関数を分析しています.具体的には 3sin(x) + 7cos(3x)を分析しているので,1倍と3倍の周波数の数値がそれぞれ3と7になっているので,きちんと動作していることが分かります.欲を言えばe-17とかが目立つので,printfが欲しいところです.

おわりに

今回はJSXの文法を確認するためにC言語で描かれたDFTを移植してみました.ものすごく恥ずかしいソースコードですが,JSXの文法確認のために公開します.

JSX自体はnode.js上で動作するのでグラフィック環境がありませんが,RhinoなどのJava VM上で動作するのなら,Javaのグラフィック機能を使ってみたいですね.それよりはWebブラウザ上で動作させるのが真っ当なので,今後試してみたいと思います.

今回参考にしたC言語のソースですが,自著であるこの本のものを使用しています.「三井田惇郎,須田宇宙,"数値計算方 第2版", 森北出版株式会社」.宣伝ではなく,参照元を明確にする意味で記しておきます.

最後になりますが,JSXの公開に感謝します.

追記

ソースコードをgithubのこちらに置いておきます(2012/6/14)

このエントリーをはてなブックマークに追加

1 件のコメント:

Hà Tuấn Đạt さんのコメント...


Lúc này trên mặt Tử Tâm lấp lánh những luồng sáng bảy màu. Một cổ khí tức dần dần được ngưng tụ lại quanh người nàng. Khí tức này cực kỳ giống với Kiền Phong... ....
Cả người Vương Lâm được Hồn Phiên quấn quanh. Hắn lập tức xông ra bên ngoài hải dương kim sắc.
dong tam mu lậu cho thuê nhà trọ cho thuê nhà trọ nhạc sàn cực mạnh tư vấn pháp luật qua điện thoại công ty luật ở hà nội số điện thoại tư vấn pháp luật dịch vụ thành lập doanh nghiệp
Nhưng đúng lúc này ở trong đám mây đỏ do Chu Tước tạo ra, đột nhiên vang lên một âm thanh chấn động trời đất. Chỉ thấy Vân Tước bị ném ra ngoài, trong miệng hắn có một dòng máu tươi đang từ từ chảy xuống, hai mắt đục ngàu. Sau khi lão bay ra khỏi đám mây thì suýt nữa đã ngã quỵ.

Cùng lúc đó Chu Tước cũng bị người ta ném thẳng ra. Sắc mặt lão trở nên âm trầm. Trước khi mất đi sinh cơ, tử khí trên mặt hắn lại càng trở nên nồng đậm. Trên khóe miệng lão có một dòng máu đang chảy cười ha hả đột nhiên từ trong đám mây đỏ truyền ra. Sau đó đám mây lập tức tiêu tan, chỉ thấy trong tay Phân Thức Hư Ảnh của Thác Sâm

コメントを投稿