高校数学の窓過去問検索

質問<3591>2007/8/19 from=YH 「パスカル三角形と文字式に関係している問題」

すみません。はじめて質問します。

中3の宿題問題ですが、どうしてもわかりません。
高校数学ではないので、教えていただけないのかもしれないですが、
お願いします。教えてくださいませんか?

問題1.「マンモスパスカル」を三色で色分けする場合、その規則性を文字式を使って表しなさい。

※この場合、あまりの数が0、1、2で分けようという事までは思いついたのですが、
それを証明する文字式がわかりません。

問題2.「パスカル三角形」の数の並びからきまりを2つ以上みつけて分配法則、多項式を展開して
文字式で説明しなさい。

問題3.(x+1)の100乗を文字式を使って展開しなさい。

どれも、パスカル三角形を説明と関係している事はなんとなくわかります。
そして、パスカル三角形の法則も調べてわかるのですが、
自分で文字式で説明できるほどわかってないので、とても困っています。

質問の内容も変かもしれませんが、どうか教えてください。
よろしくお願いします。

★希望★完全解答★




質問の内容も変かもしれませんが、どうか教えてください。

すごく変です(笑)。
何がヘンか、と言うとマンモスパスカルなるモノが何なのかサッパリ見当が付かないんですよ(笑)。何のこっちゃ?

ええと、YHさんはまだ中学生でしょうか?
困るのはこういう定義が全く分からないモノに付いて質問されても何とも答えようが無いんですよ(笑)。
例えばですね、

ほげほげふがに付いて教えてください。

って言われてもどうにも答えようが無いでしょう?一体ほげほげふがとは何の事なのか?
たまにですね、ある一冊の教科書の中だけで通用するような定義を「一般的なモノ」として質問されるケースも見かけるんですが、これじゃあどうにもならない。何故なら、他の人が同じ本を持っている、とは限らないからです。
推測するに、この「マンモスパスカル」の問題の前に「マンモスパスカルとは何なのか?」説明(定義)が書いてあるんじゃないでしょうか?つまり、そこを記述しない限り、レスは付きようがないんです。中学生相手にちょっとキビしいかもしれませんが、一応数学とはそう言うモノなんですよ。「共通理解」が成り立たない限りニッチもサッチも進まないモノなのです。数学で質問する時はそう言う部分に注意を払うようにしましょう。
少なくとも、「マンモスパスカル」でGoogleで検索かけてみましたが、そんな数学用語は引っかかりませんでした。従って、YHさんが持っている教科書、ないしは参考書ローカルだけで通用する定義でしょう。

二項係数、と言われるモノが存在します。一般的には



と記述します。また、




とはn 個から k 個選ぶ組み合わせ数の事です・・・・・・・。
とここまで書いてきて心配になってきました(苦笑)。
そうか。中学生だと・・・・・う〜〜〜ん・・・・・・・・・。確かに上記の方法だと高校2年生以上、の表記ですね。こりゃあ困った(苦笑)。
まずは階乗表記から。例えば3!と書いた時、これはの事です。4!だったらの事ですね。また、定義します。
つまり、



の事なんです。読む方も大変でしょうが、書く方も大変です(笑)。涙がちょちょぎれてきますね(苦笑)。
まあ、取り敢えず、n個からk個取る組み合わせ数は上記の公式に従って計算します。
次に、と言う表記はk=0からk=nまで全て足し合わせてくださいと言う意味です。
つまり、





と言う事になります。打ち間違えてなければイイのですが(笑)。
まあ、基本的には問2、問3の解は上の式を指している、ないしは使う、と考えてイイでしょう。それだけなんですね。

中学校3年生辺りで数式の展開を習うと思います。例えば、



とか言うヤツですね。
これを二項係数で記述すると、




となります。と言う約束事を定義すると、



となりますね。
上の式を計算してみて、お馴染みのになるのかどうか、調べてみてください。

以上です。

質問<3595>2007/8/25 from=小豆 「行列」

いつもお世話になっています。

以下の問題を教えて下さい。
行列  



について

の正規直交基底をなす3つの固有ベクトルを求めよ。


* 計算したら、固有値がt=8,−1(重根)となり3つの固有ベクトルが
直交しないのですが、計算が間違っているのでしょうか?
アドバイス宜しくお願いします。

* 以前質問した行列の問題はよくわかりました!落ち着いて解いてみて
納得しました。解答を下さった皆様、ありがとうございました。

★希望★完全解答★



計算が間違っているのでしょうか?

いや、計算は間違ってませんよ。合ってます。
以前、3566でも書きましたが、Maximaでは固有ベクトルの計算もあっと言う間に行えます。
従って、検算なんかにも役立つんで、「この計算合ってるかしら?」等と不安に陥った時にもMaximaに頼ってください。特に線形代数の分野は計算がややこしいんでね・・・・・・。
また、別のトコにも書きましたが、MaximaではAlgebraと書かれたプルダウンメニューに大体、頻出の「良く使う」線形代数関連の命令が入っています。従って、労力的な事を考えたら、まずはMaximaで問題を解くにあたって使えそうな関数が無いか探す癖を付けてください。数年前、「高校数学の窓」でMaximaを初めて紹介した時よりも格段に使い易くなってはいるのですから。
万が一、小豆さんの計算とMaximaが出した答えが食い違って、小豆さんの解の方が正しかったら、それは立派な「バグ発見」です。Maximaの提供元に胸を張ってバグ報告しましょう(笑)。そうする事でオープンソース界への立派な貢献となります。

さて、取り敢えずMaximaを起動しましょうか。


では、デスクトップの壁紙に萌えながら作業を開始しますか(笑)。僕だけですがね(笑)。
まずは行列AをMaximaに入力しましょう。これも方法は3566に記述してありますね。従って、細かい手順は省いてサクサク進めます。




さて、Maximaで固有ベクトルを求めるコマンドは以下のようになります。

eigenvectors(固有ベクトルを求めたい行列)

以上です。
なお、eigenvectorとはドイツ語で固有ベクトルを意味しています。英語で言うと、eigenとはproperの意味なんですが、元々eigenとはドイツ語での数字の1(ein)から来ていて、従って「たった一つの〜」→「固有の」と言う意味になるんです。豆知識だよッ!!!(by 桜塚やっくん)
今、Maxima上では問題の行列をAとして定義してるので、次のようにMaxima下段の入力セクションに入力します。

eigenvectors(A)

さて、[Enter]キーを叩いてみましょう。

Maximaでは

[[[固有値],[固有値の個数]],固有ベクトル]

の順番で出力されます。
従って、上の出力を見る限り、小豆さんが計算した通り、固有値をとすると、

(個数=1)
(個数=2:重解)

ってのは間違ってないんですね。合ってます。
従って、固有値の総数が三つだとすると一次独立な固有ベクトルは三つ存在し、それぞれの固有ベクトルをとすると、





となるのは確かに間違い無いんです。
そして性器化、もとい(笑)、正規化された固有ベクトル(正規基底)、はそれぞれ





となります。
ところで、得られる固有ベクトルは確かに一次独立ですが、必ずしも直交している必然性はありません。いわば、

3つの固有ベクトルが直交しないのです

ってのは当たり前なんです。小豆さんはこのあたり、ちょっと勘違いしている気がします。確かに直交は一次独立のうちの一つですが、逆は成り立たないのです。一次独立のベクトルが全て直交しているワケではありません。この辺り、もう1回教科書に戻って良く確認して下さい。
すなわち、この問題は解くにあたって、固有ベクトルを求めれば終わり、と言うような問題ではないんです。追加作業が必要なのです。
・・・・・・とか言いながら、実は僕も一次独立の正規基底を直交化する方法なんて知らなかったんですね(笑)。いいなあ、高校数学の窓って(笑)。色々新しい事柄覚えられる(笑)。
ええと、一次独立の正規基底を直交化する方法論ってのはキチンと確立されている模様です。それをグラム・シュミットの直交化とか言うらしいです。
んで、僕も今初めて知ったくらいなんで(笑)、解説できません(笑)。理論的な背景、またはその計算手順に関してはこのページでも参考になさってください。
(もっとも幾何学的には一つの軸を基準としてそれに交差している面を直交させた後、二軸を開いたりして互いに直交させるような作業は充分アリ、でしょう。)
ここではMaximaを使って得られた固有ベクトルをグラム・シュミット方式で正規直交化してみましょう。
Maximaのグラム・シュミット直交化のコマンドは

gramschmidt(x)

で行えます。ここでxは固有ベクトル(ないしは正規基底)を縦に並べた行列、とします。
例えば、上の例で言うと



と並べたような行列ですね。
ではMaximaに行列Xを入力してみましょう。






次にMaxima下段の入力欄に以下のように入力して[Enter]キーを叩きます。

gramschmidt(X)




はい。答えが出てきましたね。
ここで正規直交基底をとすると、





となるようです。
各基底が直交していて、かつ、長さが1であることを確認してみてください。

以上です。




Maxima Manual: 行列と線形代数

質問<3590>2007/8/18from=なおひ「j期待値の問題」

1つのサイコロを振って出た目の数の得点がもらえるゲームがあります。
(1)出た目が気に入らなければ1回だけ振り直すことを許すとする。
  このゲームでもらえる得点の期待値が最大となるようにふるまったとき、
  その期待値はいくらか・
(2)最高2回まで降り直すことができるとすると、
  このゲームの得点の期待値は最大いくらか。

(1)の解答
サイコロを1回振って出る目の期待値は、



1回だけ振り直すことが許される時、最初に振って出た目が3以下のならばもう1度振り直して、
そのときの得点は上の計算結果よりを期待する。
最初に振って出た目が、4,5,6ならばその数を得点とする。
したがって、1回だけ振り直すことが許される場合の、期待値の最大値は、



どうしてこのような式が出るかいまひとつ意味が理解できません。(なぜなのか?)

詳しく教えていただけないでしょうか?宜しくお願いします。

ちなみに(2)も同じような解答で答えはでした

★希望★完全解答★



どうしてこのような式が出るかいまひとつ意味が理解できません。

僕もですね(笑)。理解できません(笑)。

ええと初めに言っておきますが、僕もこれ解くの挫折しました(笑)。と言うか正攻法では解けないんです
実は数日間この問題かかりっきりだったんですが、どうにも上手く行かない。かと言ってここである程度纏めて書いておかないと、またもや数日間浪費しちゃいそうです(笑)。それが怖い(笑)。
んで、まあ、もっと数学が得意な人の目に止まるやもしれん、と言う期待を込めて、ある程度背景にある考え方だけ解説しておきます。まあ、1番中心に、と言う事で。

僕もその解法見て確かに「アレ?」とは思ったんですよ。恐らくなおひさんも同じトコで詰まったんじゃないかと。それは次の一文です。

最初に振って出た目が3以下のならばもう1度振り直して
ここですね。
確かにサイコロを一回だけ振るなら期待値はですね。と言う事は3以下の目が出た場合、これは期待値以下です。ただし、3以下が出たからと言って、それが二回目にサイコロを振った場合も合わせて、最善の「1回目でこの目以下だったら振りなおす基準」として考えてイイのか・・・・?ここが問題なんですよ。
まあ、このテの問題ってのは数理経済学者とかが熱中している「最適化戦略問題」の一種なんでしょうが、いきなり上記の回答方法で「3以下だったら・・・・・・」ってのはあまりにも「決め打ち」に見えちゃうんですよね。だから分かります。

「何で3以下って決めつけんやねん!!!もう一回振りなおしてもエエんやったら2とか4の可能性もあるんやないか!?」

と言う意見はもっともです。僕も全く同じ事を感じたのです。
んで、結論から言うと上の方式以外じゃ(少なくとも僕が何種類か試した限りは)解けなかったんですよ。ハイ。んで、確かに回答の解は最大の期待値でした。

まずはちょっと状況を整理してみます。
例えば、どんな状況であろうと2回必ずサイコロを振る、としてみます。ここで一体最終的に1の目が出る確率は何だ?と考えてみましょう。多分これは簡単ですし、暗算で出るとは思いますが、敢えてちょっと表にしてみますか。




通常では、一回目にサイコロを振る、と言う行為と二回目にサイコロを振る、と言う行為は独立だと仮定して、結局二回目に振ったサイコロは一回目の結果に影響無く転がるハズなんで、1が出る確率は1/6と計算します。
まあ、それはそれで構わないんですが、ここで上の表の意味をちょっと説明します。
一回目にサイコロを振って出た目をここではと表現して、二回目にサイコロを振って出た目をとしましょう。また、が特定の目(つまり1~6)が出る確率をと表現します。んで、上の表を見て欲しいんですがと言うのは表の中には存在しません。代わりにあるのはと言うステレンキョウな表記です。一体これは何なのか・・・・・・?
のような表記で表される確率を条件付確率と呼びます。意味は日本語で言うと、が特定の値を持った場合のが特定の値を持つ確率、って事ですね。つまり、ここではの目の出方がに左右されている、と考えているんです。
ちょっと注目して欲しいんですが、表内のを全て足しても1にはなりません。その代わり、特定のに付いてのの和は1となっています。あくまで内で確率の公理が成り立っている、って事ですね。
さて、ではは一体どうやって求めるのか・・・・・・?
一般に、こう言う場合のは次の式で求められます。



人によっては上記の式をエビデンスと呼んだりするようですが、要するに全てのケースでのの総和を求めます。
上の例では



となって、確かに独立事象として計算した解に一致するのが分かりますね。

とまあ、基本はここまで、です。では一回振りなおす、と言う事柄をどうやって表現すればイイのでしょうか?
例えば1回目に6が出たとします。すると、2回目に振りたくないのですが・・・・・・。これはまた表を作れば上手い事表現出来るのに気づくハズです。




そうですね。としてしまえばイイんですね。そうすると、の時必ずなんでこれが振りなおさない事、として表現している事となります。
では、を求めてみましょう。


        
となりますね。
では他のはどうなんでしょうか・・・・・・?とここでハタ、と立ち止まる。全部計算するのメンド臭えぞ(笑)。
以上は基本ではあるんですが、数学者も同じ事考えたんでしょうね(笑)。一気に計算してしまえる上手い方法が無いものか・・・・・・?極端な話、こう言う計算を行うジャンルを確率過程と呼ぶんです(ママ、やったよ!!!とうとう確率過程に到達したよ・笑!!!)。
一般に、上の表を用いたエビデンスの計算は、行列を用いて



と表現します。ここで、はそれぞれ全てのを成分に持つベクトルです。また、行列Aはを要素に持つ行列で、特に推移確率行列と呼びます。
例えば上記のの時だけ振りなおさないケースを、推移確率行列を用いた表現で記述すると次のようになります。



これを計算する事で、各々のが求められるんですね。
まあ、これは良し、としましょう。そして、結局のトコ・・・・・・推移行列Aのカタチを色々変えて、しらみつぶしに調べていけばどの道期待値の最大値は求められるのです。
いつもだったらMaxima導入してここで実際計算してみるんですが・・・・・まあ、イイでしょう(笑)。ココでも参考にしてご自分で試してみて下さい。
なお、期待値自体はベクトルを使って記述すれば、結局コレはとの内積



の事です。
すなわち、Maxima上で計算するんだったら、



とでもして入力すれば良いでしょう。

さて、ここまで見てきても、結構複雑ですよね。問題は、を何らかの単一の関数で書き表せないのか、と言うのが焦点だとは思ったのですが・・・・・・。
平たく言うと、の範囲ですと、の範囲ですととなるようです。
つまり、適当な関数、を用いれば



として表現できて、つまり、



なんじゃないか、と踏んだのですが・・・・・・。
ここで、uは二値関数で、の時1、の時0を取る、と言う大変都合のイイ関数として設定して、最大値を求めよ、と言う題意に従って微分すれば何とかなるんじゃないか、と思ったんですね
(しかも二値関数であるuはであるのは自明)。
ところがこの計算が上手く行かなかったのです。まず一つの理由として、問題の確率分布は離散分布だ、と言う事があげられます。連続関数用である微分はそもそも適さないようなのです。
では微分の代わりに差分ならどうだ?とも考えたのですが、差分が0の時離散関数が極大値を取るか、と言うとそれは分かりませんでした。ネットで色々検索かけてはみたんですが、そう言った情報は特に見つけられなかったのです。
他にも内積に着目して6次元ベクトル同士の内積の最大値を探す、と言うような手段も試みたのですが、同様に計算が複雑になり過ぎて上手く行きませんでした。
従って、今のトコロは、背後にある考え方はともかくとして、回答の解のようにして解くしか道はなさそうだな、と思います。




以前、モンテカルロ法を紹介した事がありましたが、この問題の場合もSchemeで書いたモンテカルロ法のソースコードを紹介しておこうと思います。
Schemeでモンテカルロ法を行うにあたって、色々なちょっとしたテクニックを投入してるので、少々複雑になってます。んで、ココで全てを説明するのが困難なので(しかしながら、基本は以前と同じです)、とりあえず下のソースをDrScheme上段のテキストエディタにコピペして、適当に名前を付けてファイルを[保存]して下さい。

    (define Q3590
      (lambda (n)
        (Q3590-engine n 0 0 0 0 0 0 0 0 0 0 0 0)))

    (define Q3590-engine
      (lambda (n a b c d e f g h i j k l)
        (if (zero? n)
          (list (/ a g) (/ b h) (/ c i) (/ d j) (/ e k) (/ f l))
          (let ((dice (+ (random 6) 1)) (threshold (+ (random 6) 1)))
            (if (>= dice threshold)
              (cond ((= threshold 1) (Q3590-engine (- n 1) (+ a dice) b c d e f (+ g 1) h i j k l))
                ((= threshold 2) (Q3590-engine (- n 1) a (+ b dice) c d e f g (+ h 1) i j k l))
                ((= threshold 3) (Q3590-engine (- n 1) a b (+ c dice) d e f g h (+ i 1) j k l))
                ((= threshold 4) (Q3590-engine (- n 1) a b c (+ d dice) e f g h i (+ j 1) k l))
                ((= threshold 5) (Q3590-engine (- n 1) a b c d (+ e dice) f g h i j (+ k 1) l))
                (else (Q3590-engine (- n 1) a b c d e (+ f dice) g h i j k (+ l 1))))

              (cond ((= threshold 1) (Q3590-engine (- n 1) (+ a (random 6) 1) b c d e f (+ g 1) h i j k l))
                ((= threshold 2) (Q3590-engine (- n 1) a (+ b (random 6) 1) c d e f g (+ h 1) i j k l))
                ((= threshold 3) (Q3590-engine (- n 1) a b (+ c (random 6) 1) d e f g h (+ i 1) j k l))
                ((= threshold 4) (Q3590-engine (- n 1) a b c (+ d (random 6) 1) e f g h i (+ j 1) k l))
                ((= threshold 5) (Q3590-engine (- n 1) a b c d (+ e (random 6) 1) f g h i j (+ k 1) l))
                (else (Q3590-engine (- n 1) a b c d e (+ f (random 6) 1) g h i j k (+ l 1)))))))))


そして、[実行]ボタンを押した後、下段のインタプリタに次のように入力した後、[Enter]キーを叩いてプログラムを走らせます。

(Q3590 実行させたい回数)

例えば亀田のパソコンで100万回の試行をさせたら次のようになりました。



これは閾値(threshold:この場合は)が1〜6までのそれぞれに於いて、モンテカルロシミュレーションで計算された期待値をリスト(カッコで括られた数字のセット)で返してくれているんです。
パッと目を引くのは、やはり閾値が(左側から4番目)の場合ですね。この時、モンテカルロ法による100万回のシミュレーションではなんで、大体のトコ、理論値と合っているようです。
当然乱数ベースなんで、常に同じ値が出るとは限りませんし、また、あくまで近似値であって正確な値ではないのですが、それでも何度かプログラムを走らせてみて、他の閾値に期待値の最大値が移る事があるのかどうか試してみてください。

註:

  1. Schemeの基本に関しては3567参照。

  2. プログラムQ3590はプログラムQ3590-engineを呼び出し、各引数の初期値を与える為だけに存在している。nは外部入力だが、その他は全て0と言う初期値としてプログラムQ3590-engineに渡される。

  3. プログラムQ3590-engineは13個の引数を持つ。nはモンテカルロ法に於ける試行回数でプログラムを走らせる側が入力する数値、そしてそれはプログラムQ3590から渡される。引数a~fはそれぞれ、閾値に従ったサイコロの目の総和、引数g~lは、モンテカルロ法により、閾値が乱数で変動した場合、何回その閾値内でサイコロが振られたかの総数をカウントしている。

  4. (zero? n)は「nが0となったら~」の意。if節との組み合わせ方に付いては3567参照。

  5. Schemeでは(list 数値1 数値2 ・・・)と言うスタイルでリストを作る。nが0になった時(つまり計算が終了した時点で)リストを返すように設定している。なお、中身の(/ a g)、(/ b h)・・・・・・と言うのは設定したn以外の引数の意味を考えれば自明。と言うのも、例えばaは閾値が1の場合のサイコロの目の総和、gはそこでサイコロを振った総数なので、中置記法で書くと、これはa/gなので、まさしく平均(=期待値)を表している。つまりここで期待値のリストを返すように設定しているワケだ。

  6. 局所変数let。このletはこれが記述された場所からプログラムQ3590-engineの最後までの範囲で有効な変数を定義できる。Q3590-engineが一回起動し終わればあとはその変数は消去される仕組みになっている。ここではdice(サイコロの意)とthreshold(閾値の意)の2つを局所変数として定義している。なお、書式は(let ((変数名1 変数の中身1) (変数名2 変数の中身2)・・・) 計算の手順)となる。そして、今回はdice、thresholdの二つの値は乱数で決定している。

  7. Schemeでの乱数の書式は(random 上限値)。これで0以上上限値未満の整数を一様乱数として返す。すなわち、(random 6)で0~5の6個の整数を乱数として返す。これに1加える事によって、サイコロの目と閾値を与える事に成功しているわけだ。

  8. 以下の部分は再帰と言う方法で書かれている。再帰に付いても3567参照。ここでは末尾再帰と言われるちょっと特殊な形式でプログラムを記述してある。このお陰で、ハードウェアが許せば1億回の試行の計算も行える。ただし、プログラミングの文脈で考える必要は全く無くって、数学的には単に漸化式とか級数と同義である、と言うことを忘れない事。モンテカルロ法は数列で記述できるのだ。形式的にはn回目の操作はn-1の結果に何かした、と考えれば良い。

  9. 原理的にはSchemeではlet以下は1行で書く事も可能だった。が、見た目はともかく、目で追うには少々複雑に見える形の方が初心者には分かりやすいんじゃないか、と思い直し、そのままにした。何せ、基本的にはやってる計算は全て同じである為、どう言う操作をしているのか、目で追いやすいとは思う。

  10. 基本的な考え方は閾値とサイコロを乱数で設定して、サイコロの値が閾値以上だったらそのままサイコロの値を採用、そうじゃなかったら、また新しく乱数を生成してその値を採用するだけ、だ。ルーティンとしては大した内容じゃないと思う。

  11. 条件節はif節が有名、かつ基本だが、条件がたくさんになると、入れ子で記述する事も可能だが、それなりの表記を好んで使う場合が多い。普通のプログラミング言語だと、elseifで記述したり、ないしはcaseで記述する場合が多い。これで複数の条件を並べまくるのだが、Schemeの場合、これに相当するのがcondと言う命令。condはそのままcondition(条件)の意。Schemeでは(cond ((条件1) (結果1)) ((条件2) (結果2))・・・・・・(else (最後の結果)))と記述する。