2009-03-01から1ヶ月間の記事一覧

数値微分(5)

ここまでやると、あとはテキストに従って書くだけ。まず、次のようにimproveという関数を定義して、新たな近似を作る。 def order(s): a = s.next() b = s.next() c = s.next() return int(log((a - c) / (b - c) - 1, 2.0) + 0.5)def elimerror(n, l): b = …

数値微分(4)

Pythonにはpartialという関数がある。 from functools import partialdef f(x, y): return x - yg = partial(f, 3) print g(2) # 1「マハリクマハリタ」って呪文をかけると、f(x, y)がg(x) = f(3, x)という関数になる。カリー化っていうやつですね。こうする…

数値微分(3)

前回までは、数学的な補足をして、それをPythonで実装したが、従来の書き方、Cとなんら変わらない書き方になっている。なぜ関数プログラミングは重要かは、関数型なら徹底的に部品化ができて、数値微分をその例に出している。これをPythonで書けるかどうか試…

数値微分(2)

前回のグラフを見ると、両対数グラフで直線的に真値に近づいていく。だから、よりよい微分の近似値が得られる。Taylor展開して、 f(x+h) = f(x) + hf'(x) + h2/2!f''(x) + ... f'(x) - (f(x+h) - f(x)) / h = h/2!f''(x) + ...だから、近似と真値との差は、…

数値微分(1)

なぜ関数プログラミングは重要か http://www.sampou.org/haskell/article/whyfp.html の 4.2. 数値微分 に面白いことが書いてある。 微分の近似値を計算するのに、f'(x) ≒ (f(x + h) - f(x)) / hを使うが、当然hが小さくなるほど真値に近くなる。しかし、あ…

reduce

Pythonにはreduceというのが関数があって面白い。 a = [ 1, 2, 3, 4 ]def add(x, y): return x + y sum = reduce(add, a) print sum # 10ラムダ(無名関数)を使ってもいいが、 sum = reduce(lambda x, y: x + y, a)たぶん上のほうがわかりやすい。 reduce(a…

10kmビルドアップ

久しぶりに総合運動公園に行った。 まず1周ウォームアップで走って、それから上着を脱いで走る。昨日あまり走れなかったので、7周くらいと思っていたが、途中で明日走ればいいやと思い直して、5周のビルドアップにした。 1.888 10:17.19 1.888 9:48.28 1.888…

ループコースパズル

超難問ナンプレ & 頭脳全開数理パズル 2009年 03月号 [雑誌]出版社/メーカー: 学習研究社発売日: 2009/02/02メディア: 雑誌 クリック: 6回この商品を含むブログ (1件) を見る例えば、このような図があったとする。ここに一つのループを書く。 書いてある数字…

べき乗(2)

バイナリ法ってなんとなく美しくなくて嫌いなのだが、ジョギングしながらぼんやり考えていたら、再帰なら割ときれいにかけることに気がついた。 import timedef pow(a, n): if n > 1: b = pow(a, n >> 1) if n & 1: # odd return a * b * b else: return b *…

べき乗

昨日のコードでべき乗の計算を、10をn回掛けて行っていたが、Pythonはこれでよかったんだった。 a = 10**nこれだけでは面白くないので、再帰のコードを考えてみた。 def pow(a, n): if n > 1: half = n >> 1 return pow(a, half) * pow(a, n - half) elif n …

名城公園

名城公園は名古屋のランナーのメッカだと聞いたので、走りに行ってきた。 金山から名城線で名城公園駅で降りて、南側の出口から地上に出て、目の前の信号を渡ると名城公園。けっこう速いランナーが走っている。 少し北に歩いたところにロッカーがあるのでそ…

数学の日にちなんで、円周率クイズ

http://d.hatena.ne.jp/hyuki/20090314#piこれのいちおう解答。まだあまり慣れていないが、さらっとPythonで書いてみた。円周率の計算は、マチンの公式で。誤差評価とか全然していない。10000桁まで求めて、そっから1桁ごとずらして検査した。

初期化

C++

こんなコードがあったとして、 #include #include using namespace std;struct Test { int x; int y; int z; };void init(Test *t);int main() { Test t; init(&t); cout }void init(Test *t) { ... }この構造体を改変して(継承とかありえない)、mapを加え…

シカクいアタマをマルクする - あどけない話

こんな中学入試問題が電車の中にあったそうな。 6桁の数字がある。それぞれの桁の数字は異なる。 これを abcdef と表す。 この数字に 3 を掛けると bcdefa となる。 この数字に7を掛けると6桁の数字になる。 この数字に2を掛けた数字を答えなさい。 こんなの…

スパムコメントを一掃する

スパムコメントを一括して消すツールを作った。 今まで、タブとスペースを繰り返し打つことで消していたが、それもいい加減面倒になってきたので、自動でやれるようにした。数百とか手動で消すレベルではない。はてなにスパムコメントは受付けない機能がある…

第30回名古屋国際女子マラソン

走り終わってからすぐに名古屋へ。 いちおう地図と各地下鉄の駅の距離をメモってきて、さらに帰りの電車の中で予想通過タイムを計算して書いたので、それを参考に追っかける。携帯ラジオも参考に。ただし地下鉄では聞こえない。 金山で名城線に。しまった。…

’09ぎふ鵜飼マラソン・ウォーキング

どうしてこうレースの日は体調が悪いことが多いのだろう。昨日から膝が痛いし、頭痛いし、腰が痛いのは当然だが、寝不足まで加わっている。 電車乗っててなにか忘れたなあと思ったら、手袋を忘れたことに気がついた。 岐阜駅からそれらしい人たちについて行…

フィボナッチ数(2)

昨日のコードは、計算しなくてもいい0同士の和を計算していたので、そこを省いたら2割ほど速くなった。その改良版で1000万まで求めたら2時間くらいかかっていた。約200万桁である。 せっかく計算したので、100までの数列を出しておく。ついでにF1000とF10000…

フィボナッチ数(1)

フィボナッチ数を求めるのにO(1)とか言ってた人がいたが、実際のところはどうなのだろう。高校でも習う(今はどうか知らないが)公式を使えば結局べき乗になる。べき乗の計算はlog取って、掛け算して、expの計算をする。logってどうやって計算するのだろう。…

整数のフーリエ変換(1)

大きな整数の掛け算にはFFTを使うとよいのだそうだ。多項式の掛け算を考えればよい。 f(x) = a0 + a1x + ... + amxm g(x) = b0 + b1x + ... + bnxn 各項の係数は、畳込みで計算できる。畳込みはフーリエ変換すると単なる掛け算に変わる。これをまた逆変換す…