「爆笑問題のニッポンの教養」

昨日、テレビで「爆笑問題のニッポンの教養」のダイジェストを見ました。その中で「万物は渋滞する」の回でゲストの西成活裕教授が説明していた行列の待ち時間の計算式が「なるほど!」という感じでちょっと興味深かったです。説明は、おおよそ以下のような…

諸々の定理の証明

先に進むために、以下の定理の証明を確認しておきます。簡単のため、それぞれ2次の正方行列に限定していますが、おそらく3次以上の場合でも成立するはずです。 正則行列の列ベクトル は互いに一次独立である ある正則行列をPとし、その列ベクトルをそれぞれ,…

ベイズの定理

今回は線形代数から脱線して確率論の分野から。確率論やこれに関連する統計学は扱うテーマが具体的なので、演習問題を解いていたりすると、「これってプログラムのネタに使えないかな?」というような考えが浮かんでおもしろいです。その中で最近流行のベイ…

相似な行列の特性多項式

前回のエントリーで相似について触れましたが、ある行列AとBが相似である場合、互いの特性多項式は一致することが分かっています。すなわち、Aの特性多項式を、Bの特性多項式をとすると、 であり、したがって、AとBの固有値(と特性根)が一致します。つまり…

数式処理ソフトmaximaの導入

3次以上の行列の計算を手でやろうとすると、計算量が多いのでちょっとした問題を解くにしても大変面倒です。おまけに計算間違いを犯してしまう事もしばしばあり、このままだと効率が悪いと思ったので、数式処理ソフトの「maxima」を使い始めました。主に演…

基底の変換と相似

線形写像という概念は抽象度が高く単純そうに見えて意外と難しいです。特に基底の変換から相似にかけて理解があやふやだったため少々躓きました。以下、個人的なまとめです。 基底の変換 いつものように定義だけだと分かった気がしないので、次の線形変換Fを…

行列の余因子

線形代数を学習していると、とっつきにくいと思う概念が幾つも出てくるんですが、その中の一つに行列の余因子があります。ある行列に含まれる小行列の行列式がどんな意味を持つのかイメージとして掴みにくいんですよね。どうも私は新しい概念を理解する時、…

英文ページを読むのに便利なブックマークレット

英文のウェブページを読んでいて意味が取りにくい場合、おおまかな意味を掴むために時々翻訳サービスを使います。 そんな時、Google依存度が非常に高い私は(ブログははてダですけど)、大抵Google 翻訳を使ってしまうのですが、公開されているブックマーク…

固有値と固有ベクトル

突然ですが、思うところあって数学の学習を始めました。これから新しく学んだことの復習の目的で、非定期にエントリーを書いていこうと思います。まずは、線形代数の固有値と固有ベクトルについて。 一般に固有値と固有ベクトルは、次のように定義されます。…

MacOSXでp4mergeを使う

MacOSXのターミナルからSubversionの差分ビューワとしてp4mergeを使う方法です。 本来ならば、TortoiseSVNと組み合わせて使うのが理想なのですが、あいにくTortoiseSVNがMacOSXに対応していないので、CLIツールと組み合わせて利用できるよう工夫してみました…

Rails1.*で新旧のGemパッケージを両立させる方法

RubyGems(1.0)とCapistrano(2.0)のアップグレードにともなって、Rails1.*で開発したアプリケーションの起動やデプロイが失敗する場合があります。 素直にRailsをアップグレード出来たら良いのですが、プロジェクトの事情により古いバージョンのまま運用…

「英辞郎」検索用ブックマークレット

普段から英語の単語やフレーズを調べる時はスペースアルクの英和・和英辞書「英辞郎」を使っています。 デスクトップアプリなのでオフラインでも使えて重宝しているのですが、職場のPCには「英辞郎」をインストールしていないので、代わりに次のようなブック…

Hashオブジェクトのキー変換

Railsでアプリケーションを作っていると、Hashオブジェクトのキーをシンボルで扱うことが多いので、わざわざキーを文字列からシンボルに変換して統一することがあります。 でも、Hashオブジェクトがネストしたりしていると、このキーの変換処理がとても煩雑…

RDocの文字セット

今仕事で作ったRailsアプリケーションのドキュメントを書いているのですが、気になった点が一つ。RailsにはRDocを生成するためのdoc:appタスクが用意されていますが、rakeコマンドからRDocの文字セットを指定できません。 このため、デフォルト文字セット(I…

遅延評価によるifの再実装

組み込みの条件式(ifやcondなど)を使わずに遅延評価を使ってifを再実装してみました。 もっと簡潔に書けそうな気がしますが、とりあえずここまで。 (define-syntax my-if (syntax-rules () ((_ test then else) (let ((proc (lambda (test then else) (or …

UIデザインはコミュニケーションデザイン

分からないことがあれば質問したり、曖昧なことがあれば確認したり、何か変化があれば報告したり。ソフトウェアの使いやすさを人の性格に例えた場合、不便なソフトウェアとはこちらの言うことがなかなか伝わらない付き合いにくい人で、便利なソフトウェアと…

π計算(Scheme版)

既に誰かがやっているんだろうが、クロージャによる超軽量並行プロセスの簡単実装法で紹介されたπ計算をSchemeで実装してみた。実際にコードを書いてみることで、並行プロセスを使用したプログラミングスタイルがちょっと掴めた気がする。 (use util.queue) …

分割数・続き

自然数を[分割]して得られた数列を各要素と同じ数だけ点を並べて表現してみよう。例えば、 14 = 6 + 4 + 3 + 1 をこのルールに従って表現すると次のようなパターンができる。 ●●●● ●●● ●●● ●● ● ● このように分割を複数の点で視覚化したパターンのことを[Fer…

[プログラミング]分割数

数論には「分割数」という概念があって、与えられた任意の自然数NをN以下の自然数の和で表現したものを言うんだそうだ。 例えば、4の分割数は下記の5種類となる。 4 = 4 = 3 + 1 = 2 + 2 = 2 + 1 + 1 = 1 + 1 + 1 + 1 ここで自然数nを分割する関数をp(n)とし…

Longest Increasing Subsequence

最近「Longest Increasing Subsequence」という問題を知りました。問題の内容は、 自然数からなるランダムな数列の中から最長の増加部分列(Longest Increasing Subsequence)を探す という単純なものでグラフ問題の一種だそうです(http://en.wikipedia.org…

Fizz-Buzz問題(Scheme版)

巷で「Fizz-Buzz問題」が流行っているみたいなので、私も解いてみました。 ただし、3分以上かかってしまいましたが...。 (define (fizz-buzz) (letrec ((loop (lambda (n result) (if (< n 1) result (cond ((= (remainder n 15) 0) (loop (- n 1) (cons…