親子丼(6)
マンガで分かるフーリエ変換 なんて漫画を読んでみた。 姉妹編に、Excelで学ぶフーリエ変換 なんてのもあるのね。他にも有って、萌えちゃうぞ。(漫画でわかる微分方程式とか電子回路とか シーケンス制御とか統計とか)
で、この漫画では、関数F(t)と直交するようなAn*cos(nt)&Bn*sin(nt)のAnとBnを求めるのがフーリエ変換なんだよ って事なんだけど、直交の意味が初めて理解出来たよ。(但し、n=0,1,2,...)
直交の関係にある関数の積の定積分はゼロになるとな。sin(nt) * sin(mt)とか cos(nt) * cos(mt) で、nとmが異なれば 直交するんだけど、n == m の場合は直交しない。 (sin(nt) * cos(mt)の場合はいずれも直交)これを利用して、任意の次数の振幅成分が 取り出せるってのが味噌。
また、任意の波形の合成を考えた時、An*cons(nt+p)で表しちゃうと(pは位相角)、pは 無限に存在しちゃって都合が悪い。 そこで、任意の波形の合成をAn*cos(nt)+Bn*sin(nt)で表すとすっきりするとな。ここら辺が、 数学のずるい所ですな。
原理原則が分かったので続きはWebで。 物理のかぎしっぽの フーリエ解析 とか、 やる夫で学ぶディジタル信号処理 とかディジタル信号処理 (基礎編) がお勧め。
Windowsでもchickenするぞ
前回の後遺症で、Windowsでもchickenしたくなった。先例に倣ってまずは コンパイラを落としてくる。大きな玉になってるかと 思ったら、ネットワークインストなんで、以外に小さい。その代わりインストールが始まると ネットワークにアクセスしっ放しになるけど。。。
先例の通りにコンパイルしようとしたらエラーになったので、PATHを次のように通した
C:\MinGW\bin\;c:MinGW\msys\bin\;
おいらのPCは人様のやつと違うんですかね? まあ、自分で手を動かせ、頭を多少使えって事だな。
$ cd c:/chicken-4.7.0 sakae@NIL /c/chicken-4.7.0 $ make PLATFORM=mingw-msys PREFIX=C:/app/chicken : $ make PLATFORM=mingw-msys PREFIX=C:/app/chicken install
これでインストール完了。emacsから使おうとしたら、csiは起動してるにも関わらず、プロンプトが 出てこない(従って、csiを使えない)と言う状況になっちゃった。糞Windowsってこれだから 素直じゃないんだよな。msysが入って、大分unixっぽくなったと言うのに。 調べてみたら、
(setq scheme-program-name "csi -:c") The -:c is to force interactive mode, which is required on some platforms (most notably Windows).
軽めに遠慮がちに書いてあったけど、仲間外れはWindowsだけだろうに!
後は適当に、玉子達を入れてあげたよ。ちなみに、鶏の状態は
#;1> ,r Features: chicken chicken-4 chicken-4.7 csi data-structures dload extras files hygienic-macros irregex irregex-is-core-unit little-endian lolevel manyargs mingw32 ports ptables srfi-0 srfi-1 srfi-10 srfi-11 srfi-12 srfi-13 srfi-14 srfi-15 srfi-16 srfi-17 srfi-2 srfi-23 srfi-26 srfi-28 srfi-30 srfi-31 srfi-39 srfi-4 srfi-46 srfi-55 srfi-6 srfi-6 srfi-61 srfi-62 srfi-69 srfi-8 srfi-88 srfi-9 srfi-98 syntax-rules utils windows x86 Machine type: x86 Software type: windows Software version: unknown Build platform: mingw32 Installation prefix: C:/app/chicken Extension path: C:/app/chicken/lib/chicken/6 Include path: (C:/app/chicken/share/chicken) Symbol-table load: 1.39 Avg bucket length: 2.5 Total symbol count: 4194 Memory: heap size is 1004884 bytes with 895982 bytes currently in use nursery size is 131072 bytes, stack grows downward Command line: ("c:\\app\\chicken\\bin\\csi.exe" "-:c") interrupts are enabled
ruby
こうして、Windowsにも鶏が住み着いた訳であるが、その導入時に使ったmingw32がperl一族を 引き連れてきてるんだなあ。こうなると、既にPythonは入っているので、あれが無いなと気づいたよ。 そう、Matz Lispね。 mingw32記念に入れてみるか。
CPUを酷使する事数十分。./configure; make; make install で、一丁上がり。
$ ruby -v sh: ruby: command not found sakae@NIL ~
インストールが完了したはずなのに入っていない。はて何処へ行った? 調べてみたら c:\usr\local\bin の中に入ってた。何か、msys系と扱いが違うんですかね? C:\MinGW\msys\1.0\local\binが 相当してるんだけど。
$ cd /c/usr/local/bin sakae@NIL /c/usr/local/bin $ ruby -v ruby 1.9.3p0 (2011-10-30 revision 33570) [i386-mingw32]
どうでもいいけど、lib中とかに、1.9.1ってのが有るけど、紛らわしいなあ。互換性があるから こうしてるのかな?
$ irb.bat ./irb.bat: line 1: @echo: command not found ./irb.bat: line 2: @if: command not found ./irb.bat: line 3: usrlocalbinruby: command not found ./irb.bat: line 4: @goto: command not found ./irb.bat: line 5: :WinNT: command not found ./irb.bat: line 6: fg: no job control ./irb.bat: line 7: @goto: command not found ./irb.bat: line 16: require: command not found ./irb.bat: line 19: syntax error near unexpected token `__FILE__' ./irb.bat: line 19: ` IRB.start(__FILE__)'
しょうがないので、
$ cat irb.rb require "irb" IRB.start()
偽、replを書いて
$ ruby irb.rb irb(main):001:0> exit
やっと動いた。以上は、msysの中にあった、msys.batを起動したターミナル上の結果。ごちゃごちゃ やってbashが上がってくるのかな。
こちらは、素直にアクセサリの中のターミナルからです。
c:\usr\local\bin>irb.bat irb(main):001:0> exit
こうしてみると、bashがいらぬお節介を焼いてるって事になるな。こういうので足をすくわれる んだよな。心しておこう。
FreeBSDでもruby1.9.3が来てたのでportupgradeしたよ。んでもって、chicken-doc宜しくriしようと したら、何を調べても答えはnil。おっかしいなあ、Windowsではちゃんと動くのに。何処かに ri用のデータベース(今更ながら、これってrdocの成果物だったのね)が有るはず。昔の人が作ったtreeで、構造がどうなってるか調べてみた。
c:\usr\local> bin\ruby.exe bin\tree.rb -d -l=3 |-+ . |-+ bin |-+ include | |-+ ruby-1.9.1 | |-+ i386-mingw32 | |-+ ruby |-+ lib | |-+ pkgconfig | |-+ ruby | |-+ 1.9.1 | |-+ gems | |-+ site_ruby | |-+ vendor_ruby |-+ share |-+ doc | |-+ ruby |-+ man | |-+ man1 |-+ ri |-+ 1.9.1 19 directores
ってな事で、shareの下にあったやつを、FreeBSDにコピー。何たって共有しましょだからね。 人の物は俺の物です。物忘れが激しくなった人には助かるなあ。
[sakae@cdr ~]$ ri swap .swap not found, maybe you meant: String#swapcase String#swapcase! Symbol#swapcase
ruby1.9Xは、_ko1さんの成果物らしい。2.Xでは、Python宜しく、ただrubyって叩くと内蔵のirbが 起動されるらしい。ますます、Lispに近づいていくなあ。括弧をちゃんと書けば、昔懐かしいM式 だもんなあ。
ああ、どうせPythonと似せるならもう一つやって欲しい事があるぞ。rybyが起動してから、ソースを パースしてるはずなんだけど、毎回やるの無駄だろ。パースした結果を、hoge.rboとかに 保存出来ないかね。んでもって、hoge.rboが有ったら、それを使って即実行する。無かったら、 しょがないから、hoge.rbをえっちらおっちらとパースしてから実行。勿論、hoge.rbとhoge.rbo のタイムスタンプはちゃんとチェックしてからってのは、お約束ね。パースの結果をキャッシュ するだけじゃ、イケテないってんだら、JITの結果でもいいけど。これで、あの人の子分の卒論の テーマが出来たかな。おまけに難読化も付けると箔がつくかも。
だれかば昔、るびまでcgi.rbがいけてない10の理由とかを書いていたけど、この機構で少しはいけてる ようになるかな。それとも、大胆にcgi.rbを作り直しとか。。もう、cgi.rbを使う局面なんて 無いから、親父の戯言と聞き流してくだせえ。
おまけ
最近はIEして見つけた面白URLのメモ欄の様相を呈しているけど、懲りずに。
ディストリワッチ、最近はウブの人気が下火らしい。