blog2015年3月29日日曜日Lucasの定理Lucasの定理というものを知った。大きな数の重複なし組み合わせの値を素数を法として求めるときに使える。素数pについて以下が成り立つ。niはそれぞれ以下を満たす。証明はここが分かりやすい。この定理を見て思ったのは、ほとんどゼロになるのでは?ということだった。p=2の場合を考える。なるようなiが存在すると右辺が0になってしまう。niである場合のみ右辺は非零となる。0.0563程度である。本当か?ということで試してみた。0;}上のプログラムを実行すると、確かに0.0563と出る。d)程度だと考えられる。2007多変数微積分学の10回目の講義。testを使った極値判定について。cy2一般例テイラー展開を使った一般例の説明ヘッセ行列が出てくると思ったが出てこなかった。二変数の場合の説明なので、それで事足りている。1.の特殊例の話は単なる導入部の例題かと思っていたが、3.の説明に繋がっていた。停留点付近の関数値を二次のテイラー展開近似で表すと、一般の関数でも1.の場合に帰着する。補足ヘッセ行列を使った判定法を忘れていたので、調べてみた。xは鞍点これは停留点付近の関数を二次のテイラー展開近似すると分かる。二次のテイラー展開はヘッセ行列の二次形式になる。ヘッセ行列の固有値がすべて正ということは、ヘッセ行列は正定値行列である。よって停留点からどの方向に移動しても関数値は増加する。ヘッセ行列の固有値がすべて負の場合は、停留点からどの方向に移動しても関数値は減少する。ヘッセ行列の固有値が正負両方ある場合は、ある固有ベクトル方向に移動すると関数値が増加し、別のある固有ベクトル方向に移動すると関数値が減少する。2007多変数微積分学の9回目の講義ビデオを見た。pointとも言うらしい。pointという呼称を使っている。停留点が出てきたらすぐに二次微分に入って、極大/極小の判定をするのかと思いきや平方完成を使って極小の判定をするところまでで終わっている。二次微分を使った判定は次回の講義で、ということらしい。このワンテンポおく感じが何とも絶妙だ。現在の知識だとこういうアプローチが出来るけど、実はもっと汎用的なやり方があるという伏線を張っている。最小二乗法では直線での補完を行ったあと、ムーアの法則に話がうつる。ムーアの法則は指数関数で表記できるが、対数を取ることで直線と同様の手法が使えることを紹介している。2007第8回目の講義。相変わらず丁寧である。この人の講義が特別丁寧なのか、アメリカの大学の講義はどれも同じくらい丁寧なのか気になるところ。偏微分gnuplotで講義で出てきたグラフを描いてみた。グラフを書くだけだとつまらないので、視点を変えながらグラフを眺める様子をgifにしてみた。2007多変数微積分学の第7回目の講義。翌日テストがあるらしく、これまで学んだことの復習および演習問題の解説が行われる。演習問題はこれまでの講義を聞いていれば理解できるレベル。BY-NC-SA前回までのビデオはほぼ一語一句完全に聞き取れていたが、今回のビデオは一部よく聞き取れない部分があった。講師は”講義をわかりやすく”ということでゆっくり喋ってくれていたのだなと実感するとともに、早口で喋られるとまだまだ自分のリスニング力では聞き取れないのだなと痛感した。2007多変数微積分学の第6回目の講義を聞いた。大学の講義らしくなってきた。応用ケプラーは、観測から以下の2つの事実をつきとめた。太陽のまわりを回る惑星の軌道は同一平面上にある太陽と惑星を結ぶ直線が一定時間内に通過する面積は一定である惑星が太陽のまわりを回るのは太陽の重力によるものだとニュートンによって明らかにされた。ケプラーの時代はそれが未知であった。3.の応用では、ケプラーの主張から惑星の加速度ベクトルは太陽と惑星を結ぶベクトルと平行である(重力)ことを導出する。2007多変数微積分の5回目の講義を聞いた。余裕で理解できるレベル。直線と平面の交点サイクロイド2.の直線と平面の交点は大学入試レベルだと思われるが、面白い問題。3.のサイクロイドでは、y~0のときの軌跡をテイラー展開で解析するということをやっていた。講義開始のときに「昨日は〇〇を学びました」と言っていた。授業完了時には、「よい週末を。次の講義は火曜日です。この授業は週に1コマではない。日本の大学だと1つの授業は週に1コマというのが普通だけど、そうではないらしい。どうりでペースがゆったりしているわけだ。「もう青色のチョークは使わないよ」で笑いが起きたり、サイクロイドのデモで拍手が起きたり、と学生たちの反応がいい。2007多変数微分積分学の第4回目の講義を聞いた。0)その他気づいたこと理科系の授業なのに女性が多い。積極的に質問をするのも女性が多い気がする。講師がたまにクイズを出す。学生たちは答えるときに番号が書かれた紙を頭の上にあげる。あの紙はアメリカの大学では必須なアイテムなのだろうか。紙を持ってない人もいて、手で数字を示す学生もいる。2007多変数微積分学の第3回目の講義を見た。外積の応用と行列の基礎の話だった。だいたい知ってる内容だった。これらの点は平面上にある。ひとつの点Pが与えられる。Pは上の3点と同一平面上にあるか?という問題が面白かった。vectorを出した後、それが平面上のvectorと直交するかどうかで判定する方法の2つが紹介されていた。BY-NC-SAまた、講義の終盤で逆行列を求める方法(小さいサイズの行列に対してのみ有効)が紹介されていた。プログラムを作って動かしてみた。4*4の行列まで動作確認済。parallelepipedなど。BY-NC-SAこの英語の勉強法かなりいい。英語の勉強も出来、大学の数学の復習もできるなんて、なんという効率の良さ。「英語自体を勉強するのではなく、英語で好きなことを勉強する。その他気づいたことなど。9面の黒板を使っている。学生がノートを取りやすいように配慮しているのだろう。講師は適切なタイミングで「質問はないか?」と問いかける。学生たちの質問が活発。途中で講師は質問攻めに合う。学生たちは意外と単純な質問をする。MITだからといってみんな天才というわけではないらしい。単純な質問に対して、講師は親切すぎるくらい丁寧に答える。そんなことも分からないのか?というような態度を決して取らない。lectureの他にrecitationというのがあるらしい。どんな感じか見てみたい。2007昼飯食ってるときに見た動画。MITの多変数微積分学の講義。1回目の講義ということもあって易しい。英語の勉強も兼ねて、一通り見てみようか。英語ドロップダウンリストのオプションをAjaxで変更するドロップダウンリストAで選択した値に応じてドロップダウンリストBのオプションを変更したいという場合。都道府県DDLで東京都を選んだら、市区町村DDLのオプションが選択した都道府県配下の市区町村になるというような機能など。古いシステムだとこういうの毎回ポストしてやってる場合が多いです。これをAjaxで作ってみようというただの暇つぶしです。出来たものデモ補足ですが、僕はにゃんにゃんよりこじまこちゃんが好きです。ソース久しぶりにjQuery使った気がする。About?数学とは何かを教えてくれる動画。本当の数学のやり方を教えてくれる動画。Keynoteを彷彿とさせて感動的です。数学2015年3月9日月曜日formulaで大きめのフォントで数式を書くブログに数式を埋め込む場合、formulaというサイトを使っている。フォーム内にTexのコマンドを入力すると、数式の画像を作ってくれる。\frac{x^n}{n!}のように入力すると、という画像が出来る。これだとフォントが小さすぎて、拡大してパワポに貼りつけたときに画素が粗くなってしまう。\frac{x^n}{n!}$}のように入力すると、のようにフォントサイズが大きい画像が出来る。これだとパワポに貼りつけても綺麗。雑記2015年3月8日日曜日numpy.poly1dと母関数とサイコロ「部屋とYシャツと私」みたいなタイトルになってしまいました。サイコロを振ったときの確率・統計量を母関数を使って計算するテクニックを知ったのでその紹介をします。母関数を扱う際に多項式の計算ライブラリがあると嬉しいです。今回はPythonのnumpy.poly1dクラスを使います。多項式の加算、乗算、べき乗、根の計算、微分、特定の点での評価などが出来ます。3以下が実行結果です。指数の部分とそれ以外の部分を2行に分けて、いい感じに出力してくれます。26母関数とは?応用に入る前に母関数について簡単に説明しておきます。xnと定義される多項式のことです。f(x)のxnの係数がanと等しいというのがポイントで、うまく利用すると「分割数の計算」や「漸化式の一般項の計算」が出来たりします。サイコロの統計量と母関数6つの面を持つサイコロを振ります。各面が出る確率は等しいとします。x6という関数を定義します。xnの係数は「サイコロを振った時にnが出る確率」と同じです。f(x)を1回微分してみます。6x51回微分することで、xnの指数部のnが係数のところに出てきます。6となり、x=1を代入すると平均値を計算することが出来ます。次にf(x)を2回微分してみます。30x42回微分するxnの係数はn(n-1)になります。1回微分して出てきたnと足すと、n2が出てきます。62となり、二乗の平均が出せます。平均の二乗」、つまり、分散を計算することが出来ます。ここまではサイコロを1回ふったときの話を考えました。次はサイコロを複数回ふった場合、母関数がどうなるかを考えてみます。係数は3/36になることが分かります。次のように言い換えることも出来ます。1回目の試行で1が出て、2回目の試行で3が出た確率1回目の試行で2が出て、2回目の試行で2が出た確率1回目の試行で3が出て、2回目の試行で1が出た確率の和。これは「サイコロを2回振った時の目の和が4になる確率」です。よってf(x)の2乗を計算してxnの係数を見ることで、「サイコロを2回投げたときに目の和がnになる確率」を求めることが出来ます。一般化すると、f(x)のm乗を計算することで、「サイコロをm回投げた時の目の和の分布」を計算できるということになります。f(x)のm乗の微分を行うことで、平均や分散などを計算することができます。例題6面のサイコロがある。サイコロには細工がされていて1,2,3,4,5,6が出る確率が1:2:3:4:5:6となっている。サイコロを30回振った時に出た目の合計が120以上になる確率を求めよ。普通に動的計画法で解いてみます。0;}答えは、0.898544となりました。次に、母関数を用いた解法。sum(p[120:])短っっ。実行結果は動的計画で計算したものと一致していました。ついでに母関数の微分を使って平均、分散を出してみます。sigma因みに今回の問題の場合は各試行が独立なので、平均・分散は以下のように普通に計算できます。結果は母関数から導出したものと同じになりました。数学2015年3月5日木曜日エンジニア日記(4)こんなとこで働きたい最近、職場の居心地が良い。居心地は良いのだけれど、楽しくはない。ココロオドラないのである。こんなところで働くとココロオドルのではないだろうか、と思う職場像を考えてみた。1.プログラム好きな人がたくさんいる。2.アジャイルな開発手法を取り入れている。3.ドキュメントよりもソースが重視される。4.テストが自動化されている。5.ROWEを取り入れている。仕事2015年3月1日日曜日おいら、レベル6に上がったっぺこんばんはごわす。おいら、レベル6にあがったっぺ。Postsmemset()とmemcpy()恥ずかしながら、Cのmemset()とmemcpy()を今まで使ったことがなかった。みたいな話を聞いたことがあったので、「あーじゃ要らない機能なんだー。editorialに投稿された解答がmems...便利なPythonライブラリ(5)retryデコレータつけるだけで、リトライしてくれるという便利ライブラリ。失敗するかもしれない不安定な関数に@retryをつけると成功するまで実行してくれる。ret...S3のファイルを一般公開するAWSのS3のファイルを一般公開する方法について説明します。2つの場合に分けて説明します。本番中ゴリ押し解を思いつくには思いついたのだが、C++でマルチスレッドの処理を書いたことが無くて、ごにょごにょやってるうちにタイムアップとなってしまった。C++...C#入門(9)Action、Func、Predicateの違いAction、Func、Predicateについて簡単に整理しておく。メソッドへのDelegate。メソッドへのDelegate。スライド区間に対するクエリ処理の種類とそれに対するアルゴリズムをいくつか紹介します。「スライド区間」の定義ですが、窓関数のようなものを想像してください。まではコンピュータの力を使って正多面体をt色以下で塗るパターン数を数えていました。今回は手計算で計算してみようと思います。そのためにはまず回転を表す対称群をうまく列挙するために回転軸について考える必要があります。見聞きする木の用語を整理しておく。節点vから最も離れた節点をwとする。w)の長さをvの離心数と呼ぶ。記号で表すときは、ε(v)と書く。使って遊んでみました。いった便利な機能を提供してくれるテストフレームワークです。repor...キャッシュヒット率の測定perfというツールを使ってキャッシュヒット率を測定してみた。キャッシュの影響なんてたかが知れていると甘くみていたら、痛い目るので要注意。知らない用語がちらほらあったので、簡単にまとめておく。