タグ「数学」の一覧

小説「笑わない数学者」

ここ最近読み込んでいる森博嗣の第3作目、「笑わない数学者」を読んでみました。4つの数字を用いてある数字にするといった、ちょっとしたクイズも盛り込まれていたりするので、もし数学に自信がある方は挑戦してみてください。

ちなみに、これまで読んだ森博嗣の作品の感想はこちら。
[blog] 小説「すべてがFになる」 - LostMemories
[blog] 小説「冷たい密室と博士たち」 - LostMemories

この作品では、大学の助教授である犀川創平と大学生の西之園萌絵が、天才的な数学者である天王寺翔蔵に会うために三ツ星館を訪れることから始まります。この三ツ星館は非常に変わったデザインになっていて、オリオン座の三ツ星を象徴するような間取りになっています。一風変わったこの館でまた犀川と西之園は殺人事件に巻き込まれてしまいます。

[wiki] 笑わない数学者 - Wikipedia

この作品の中で、犀川と天王寺博士が殺人事件の核心となる会話をするのですが、そこで天王寺博士がひたすら「不定だ」というシーンが緊迫感があって面白いですね。ここでいう「不定」というのは、有限個に解を特定することができない状態のことを指しています。殺人犯に対してこの「不定」という言葉を用いれば、それはつまり誰でも実行可能だという意味になるわけですね。ただし、ここでは対象は犯人に対して使っているわけではないですけどねヽ(´ー`)ノ 詳しくは本編をどうぞ。

オリオン座が消える謎は、実はかなり初めの段階で気づいてしまったので、どうして作品中でそういう解がなかなか出ないのかがちょっと不思議でした。でも、やっぱりどんでん返しのような展開もあって楽しめました。

また、別の作品も読んでみたいのですが、古本屋においてなかったので、次は違う人の著作に挑戦したいと思います。

9人の人間が3つの部屋に入る組合せ

  • 更新日:
  • 雑記
  • SPI, 数学
今日ちょっと就活の話をする機会があった時に、「9人の人間が3つの部屋に入る組合せって何通りなんですか?」って話が出たので、メモ程度にここに解き方を書いておきます。


いきなりタイトルの問題を解こうとするとちょっと面倒なので、ちょっと問題の規模を小さくします。「4人の人間が2つの部屋に入る組合せは何通りか?」を考えます。ここでは、人間には区別があり、部屋には区別がないとします。

こういった組合せの問題を解くときに重要なのは2つあります。1つは「全て区別する時は何通りか?」をまず考えること、そして2つめは、「どういった場合が同じ組合せか?」を考えることです。簡単なほうの問題では、「全て区別するときは4! (4の階乗)」です。これは、部屋の存在を考えずに、単純に順列として考えたときの並び方と同じです。

combination1.jpg 次に、どういった場合に同じ組合せとみなすかを考えます。
この問題では、部屋には区別がないということなので、上の図と下の図は同じとみなせます。さらに、それぞれの部屋の中で場所が変化しても同じとみなせます*1。他の組合せの場合でも、同様にして必ず同じみなせる組合せが存在します。というわけで、この問題では「ある組合せに対して同じとみなせる組合せの数は2*2*2=8通り」です。

combination2.jpgここまで来たらほぼ解けたようなものです。問題の答えは、(全て区別するときの組合せ数)÷(同じとみなす組合せ数)なので、4!÷8 = 24÷8 = 3通り が正解です*2


さて、これまでのことを応用して「9人の人間が3つの部屋に入る組合せ」を考えてみましょう。ここでは、人間に区別があり、部屋に区別があるとします。全て区別するときの組合せ数は、9! (9の階乗)です。次に、どういった場合に同じとみなせるかというと、「部屋の中での位置が変わったとき」なので、その場合について考えます。それぞれの部屋で3人が入れ替わるので、3! * 3! * 3! = 216通りになります。で、最終的な組合せは 9! ÷ (3! * 3! * 3!) = 1680通りになります。

もし、この問題で部屋の区別がない場合は、さらに 3! で割って280通りになります。

Javaで行列式を計算する

Javaで行列式を計算させるのに一番手っ取り早いのはフリーのライブラリを利用することでしょう。ですが、そのようなことができない場合*3、自分でソースコードを書く必要があります。そのことについて、ちょっと前に話に挙がっていたので作ってみました。

public class Matrix {
  // 行列式を求めるメソッド
  public static double det(double[][] args){

    final int size = args[0].length;
    for(int i=0; i<args.length; i++){
      if(args[i].length!=size)
        throw new IllegalArgumentException();
    }

    double det = 0;
    for(int i=0; i<size; i++){
      double rightdown = 1;
      double leftdown = 1;
      for(int j=0; j<size; j++){
        rightdown *= args[(i+j)%size][j%size];
        leftdown  *= args[(i+size-j)%size][j%size];
      }
      det += rightdown - leftdown;
    }
    return det;
  }

  // テストコード
  public static void main(String[] args){
    double[][] matrix = new double[][]{
        {1,2,3},
        {4,5,6},
        {7,8,9}
    };

    System.out.println(det(matrix));
  }
}

これは行列式を計算させる時によく用いられるサラスの方法を実装したものです。引数として配列の配列を渡していますが、この配列のサイズは全て同じでないといけません。また、どちらが行でどちらが列とかそんなことは気にしなくても正しい結果が得られます*4

注意しなければいけないのが、サラスの方法では4次以上の正方行列の行列式は計算できないこと。4次以上の場合は、余因子展開をするなどして次数を落とす必要があります。

ちなみに、このコードはBSDライセンスです。とは言っても、普通に書いても同じようなコードになるんで、適当に利用してやってください。このコードで発生した不具合については、なんら責任を負いません。また、これに基づいたコードについては著作権表示を忘れないようにお願いします*5

続きを読む

スタージェスの公式

ヒストグラムを生成しようとしたとき、どの程度の階級数の設定(何本の棒グラフで表現するか)に悩むときはありませんか?そのようなときに参考になるのが、スタージェスの公式です。これを用いることで、それらしいヒストグラムの階級数を設定することができます。

スタージェスの公式は意外と簡単に表現されます。階級数を k 、観測値の数を n とすると、次の式のようになります。

k = 1 + log_2 n

例えば、観測値の数 n を100とすると、スタージェスの公式では k ≒ 7.6 となります。多くの場合、 k = 8くらいが見た目がよいヒストグラムになります。

もし、もっとスタージェスの公式をよく知りたいという方は、東京大学教養学部統計学教室が出している統計学入門 (基礎統計学) が分かりやすいです。

[web] 統計学入門 (基礎統計学) - Amazon.co.jp

オートマトンちょっと危険かも

サウンドカードの問題は、単にドライバが不明なだけでした。マザーボードの発行元を調べて、サウンドカードのドライバをダウンロード&インストールするだけ。なんか、単純な話で逆に拍子抜けです。

で、今日は今週の第1の山場のオートマトンでした。1問目とか、前回の問題の付け足しみたいなもので、かなりあせりました。先生が「出来が悪いところはもう1回出すかも」とかいってたけど、プラスアルファして出題するところがあの先生っぽいというか…。
さすがに飲み会の後だけあって、学習能力が低下していて、今週の範囲のところで手痛いミスをしてしまいました。中テストだから、さすがに単位取得がいきなり危険になると言うわけではないけど、これで優の可能性はぐっと減ってしまったわけです。やばいなぁ。

今週の山場は木曜日のシステム解析!!こっちのほうが重大です。だいたい状態方程式と、ラプラス変換、ジョルダン標準形が解ければOKと読んでいるんですが、真相はいかに!?

レポート作成

今日は昨日やり残したことを消化しようと奮闘。4限がかなり微妙かつ早く終わったのでメールでの時間より20分ほど早く先生の部屋へ。なんかいろいろ問題の解き方とか、アメリカの大学のこととか聞けて、ためになりました。先生曰く、「概念が大事」だそうでおもいっきりレポート問題が解けんかったのがちょっとつらい。。

ガウスの消去法ってどんなんだったっけ?という疑問があったので、近いうちに講義のページに追加しようと思ってます。

実は、夜中の2:30の今、友達とまだレポート作成してます。やっぱり苦手な場所は教えあうのに限ります。それでかなり間違いを発見してしまったので、助かったというのか実力が足りないというか。。。演習のテキスト買って演習します。(本音はそんな時間ないってとこなんですが)

今日もまだやり残しの仕事があります。明日こそは!!!

  • ホルンのサイト更新
  • メルマガ発行
  • 02期生のcommunityサイト作成
  • 講義関係のリファレンスページの作成
  • プログラミング言語論のプログラム

このページの上部へ

About

tetsuの日記・雑記です。
iPhoneなどのスマートフォン向けサイトもあります。スマートフォンでこのページを開くか、URLの最後に i を付けていただけばOKです

広告

サイト内検索

最近のピクチャ

  • リアディレーラ

月別アーカイブ

最近のコメント

Powered by Movable Type 7.5.0