Comments
Description
Transcript
テキスト(PDF
第2章 数学を分析する - 23 - 1.数学を分析する(その1) 1-1 自然数の性質を調べる関数 自然数にはいろいろな性質がある。今回はその自然数の性質を調べてみよう。 自然数の性質を調べるために,次のような関数を使うので覚えておこう。 また,同時に Mathematica のプログラミングについても学習していくが,このような関数をうまく取り入 れながら組み立てることになる。 書式 意味 IntegerQ[a] 整数かどうかを調べる Divisors[a] 約数のリスト DivisorSigma[1,a] If[ ] 約数の和 条件式 Do[ ] 繰り返し Floor[a] 整数部分の取り出し Range[n] 1~n の整数のリスト [例題1] 次のように入力,実行して,結果を見ながら,関数およびプログラムを理解せよ。 ① If[PrimeQ[37]==True,"yes","no"] ② Do[Print[Prime[i]],{i,1,10}] [練習問題1] 次のように入力,実行して,結果を見ながら,関数およびプログラムを理解せよ。 ① IntegerQ[Sqrt[9]] ② Divisors[120] ③ DivisorSigma[1,12] ④ Floor[7/3] ⑤ Range[10] 1-2 (テーマ例1) ピタゴラス数の分布 1-2-1 ピタゴラス数とは 自然数 a,b,c について,a2 + b2 = c2 が成り立つような a, b, c の組をピタゴラス数という。 [例題2] 次の手順でピタゴラス数の性質を求めよ。 ①まずはこのような数を,a, b それぞれ 100 までの自然数の範囲で列挙してみよう。 pita[n_]:=Do[If[IntegerQ[Sqrt[x^2+y^2]]==True,Print[{x,y}]],{x,1,n},{y,1,n}]; pita[100] ②どのように分布しているが図式化してみる。 上のやり方では座標データがリストになっていないので図式化ができない。 そこで,以下のように修正する。 pita[n_]:=Do[If[IntegerQ[Sqrt[x^2+y^2]]==True,plist=Append[plist,{x,y}]], - 24 - {x,1,n},{y,1,n}]; plist={}; pita[100]; plist としてから,下記を実行する。 ListPlot[plist,AspectRatio->Automatic] ③グラフには規則的に並んだ点の列が見られる。直線上に並ん だ点は辺の比が同じもの(例えば,(3,4)と(6,8)など)の集ま りであり,いわば倍数の集合といえる。 この重複をさけて, もっとも小さい値の組だけを記載するよ うに,すなわち,(x, y) が互いに素である整数の組だけを取り 出して列挙し直してみよう。 これには,x と y の最大公約数が 1 となる条件を加えればよ いので,次のようなプログラムになる。また,x と y の範囲を 200 にまで拡大して求めてみよう。 pita2[n_]:=Do[If[IntegerQ[Sqrt[x^2+y^2]]==True,If[GCD[x,y]==1, plist=Append[plist,{x,y}]]], {x,1,n},{y,1,n}]; plist={}; pita2[200]; plist ListPlot[plist,AspectRatio->Automatic] [練習問題2] 例題2で描いた点の分散図を見て,直線状,放射状,円形状,対称性などの規則性を見つ けてみよう。ピタゴラス数の性質について新たな発見があるかもしれない。 1-2-1 n 次元ピタゴラス数 自然数 a,b,c,d について,a2 + b2 + c2 = d2 が成り立つような a, b, c, d の組を 3 次元ピタゴラス数という。 同様に発展してい行けば n 次元ピタゴラスう数を得ることができる。n 次元ピタゴラスう数をリストアップ することで,どのような性質があるかを考察してみよう。 1-3 (テーマ例2) カプレカー操作 1-3-1 カプレカー操作とは ① 4桁の自然数を考える。ただし4桁とも同じ数字(1111 など)は省く。 ② その数字を並べ替えてできる最大の自然数を求める。 ③ その数字を並べ替えてできる最小の自然数を求める。 ④ ②から③を引く。 ⑤ ④で出来た数字で再度②からの操作を行う。 この一連の計算をカプレカー操作という。 引き算の結果が 3 桁以下になったときでも,0123 という 4 桁の数字として考える。 [例題3] 199 にカプレカー操作を施して,結果を考察せよ。 [練習問題3] このように操作を繰り返していったとき,ある面白い現象が見られる。どのような結果が 得られると予想するか。例題2の結果から予測せよ。 - 25 - 1-3-2 Mathematica によるカプレカー操作 [例題4] ①次のようなプログラムを考える。 vector[n_]:={e1=Floor[n/1000],e2=Floor[n/100-e1*10],e3=Floor[n/10-e1*100-e2*10], e4=Floor[n-e1*1000-e2*100-e3*10]}; num[n_]:=n.{1000,100,10,1}; kap[n_]:=num[Reverse[Sort[vector[n]]]]-num[Sort[vector[n]]] まずは,上のプログラムを実行する。(関数の定義なので,実行しても変化はない) ②続いて次のようにカプレカー操作を実行する。直前の値を利用するには%を用いるのが便利。 kap[1999] (結果:7992) kap[%] (結果:7173) kap[%] (結果:6354) ③Do ループを使って計算の繰り返しを自動的に行ってみよう。 a=1999; Do[a=kap[a];Print[a],{i,1,10}] <参考> ・ vector[ ]は入力した数 3241 を{3,2,4,1}の様にリストに直す関数である。 ・ num[ ]は vector[ ]でリスト化したもの{3,2,4,1}を逆に 3241 に変換する関数である。 ・ Sort[ ]はリストを小さい順番に並べる関数。 ・ Reverse[ ]はリストの並びを逆にする関数。 [練習問題4] いろんな4桁の数を初期値にして,カプレカー操作を実行してみよう。どんな性質が見つ かっただろうか。またそれはどんな数で始めても必ず成り立つといえるだろうか。 1-3-3 3桁および5桁の数字でカプレカー操作 3桁,5桁の数字でカプレカー操作を行ってみよう。 4桁のときと同じような性質が成り立つだろうか,たくさんのケースについて調べて整理してみよう。 1-4 (テーマ例3) 角谷の予想 1-4-1 角谷の予想とは 2以上の整数を考えます. ① 正の整数 a で割って割り切れたら割ります。 ② a で割り切れないとき,整数 b を掛けて,整数 c を加えます。 ③ これを繰り返します。 [例題5] 次の a,b,c の値に対して,上の操作を施し,結果を考察せよ。 ① a = 2,b = 1,c = 1 として,7 及び 9 に上の操作を施して,結果を考察せよ。 ② a = 3,b = 2,c = 1 として,6 及び 11 に上の操作を施して,結果を考察せよ。 [練習問題5] a = 2,b = 3,c = 1 として,10 及び 13 に上の操作を施して,結果を考察せよ。 - 26 - これらの操作のうち,「a = 2,b = 3,c = 1 の場合,これらの操作を繰り返すと有限回で 1 に到達する」 というのが,角谷の予想(あるいはコラッツの予想)とよばれています。 実はこの予想は未解決ですが,この問題を調査した多くの数学者は直感的に正しいと考えています。 1-4-2 Mathematica による角谷の予想 [例題6] a = 2,b = 3,c = 1 に対して予想をたてよう。 ①次のようなプログラムを考える。 a = 2; b = 1; c = 1; kakuya[n_] := If[Mod[n, a] == 0, n/a, b * n + c]; plen = {}; m = 30; Do[plist = {n}; While[n != 1, n = kaku[n]; plist = Append[plist, n]]; Print[plist], {n, 3, m}] ②続いて次のようにリストの長さを求めるプログラムを考える。 Do[plist = {n}; While[n != 1, n = kaku[n]; plist = Append[plist, n]]; Plength = Length[plist]; plen = Append[plen, Plength], {n, 3, m}] ③②の結果をグラフに表してみよう。 ListPlot[plen, PlotJoined -> True] 10 9 8 7 6 5 4 5 10 15 20 25 <参考> ・ While[test, body]は,test が True を与えなくなるまで,test と body を繰り返し評価する。 ・ != は Unequal であることを表す演算子である。 [練習問題6] いろいろな m の値に対してのリストやグラフを考察することでどのようなことが推測さ れるか考えてみよう。また,その理由はなんだろうか。 1-4-3 角谷の予想への前段階 角谷の予想は難しいので,「a = 2,b = 1,c = 1」「a = 2,b = 1,c = -1」の場合について,1 に収束す る速さと,なぜ 1 に収束するのかを考察してみよう。 1-5 (テーマ例4)完全数と友愛数 1-5-1 完全数について 自然数6の約数は,1,2,3,6 の 4 個あり,それ自身(6)以外の約数の和はまた 6 になる。このように,ある 数がそれ自身をのぞく約数の和と一致するような数を完全数という。このような完全数が他にないか探して みよう。 [例題7] ①まず自分自身をのぞく約数の和を求める関数を次のようにして作る。 x = 6; Divisors[x] yakuwa[n_]:=DivisorSigma[1,n]-n; yakuwa[x] - 27 - ②約数の和とそれ自身の数が一致するものを 100 までの数から探してみよう。 kanzen[n_]:=Do[If[yakuwa[k]==k, Print[k]],{k,1,n}]; kanzen[100] [練習問題7] 20000 までの完全数を調べてみよう。 1-5-2 友愛数について 220 の自分以外の約数の和は 284 となり,また 284 の自分以外の約数の和は 220 になる。このような関係 にある数を友愛数という。本当にそうなるか,以下のようにして確かめてみよう。 また,この他に友愛数を探してみよう。 [例題8] ①まず,220 と 284 の約数と,約数の和を求めてみよう。 Divisors[220] Divisors[284] yakuwa[220] yakuwa[284] ②次のような友愛数を列挙させるプログラムを考え,100 までの数から探してみる。 yuai[n_]:=Do[If[(yakuwa[yakuwa[k]]==k)&&(yakuwa[k]!=k),Print[{k,yakuwa[k]}]],{k,1,n}]; yuai[1000] [練習問題8] 20000 までの友愛数を求めてみよう。 1-5-3 完全数の現れ方の規則性 完全数を小さいものから列挙すると,6,28,496,8128,・・・・となる。 これらの数はいずれも, 2n-1(2n - 1) の形を満たしていることが分かっている。 しかし,n に対してどんな自然数を代入しても成り立つというわけではない。 どのような n の場合に,完全数となるのか,調べてみよう。 1-6 (テーマ例5)1/n にあらわれる循環少数 1-6-1 循環小数について 1/ n(n は整数)の値は大きく分けて次の 2 つに分類される。 ①: 1/4 = 0.25 ②: 1/3 = 0.33333 … ①のように割り切れる少数を有限小数,②のように割り切れず少数部分が続く少数を無限小数という。 [例題9] ①まず 1/ n(n は整数)の値から循環節をとりだす。 f[x_] := N[1/x, 40]; g[x_] := RealDigits[1/x]; h[x_] := First[Take[g[x], 1]]; ②Table を用いて循環小数の値を調べてみる。 j[x_] := Table[{n, f[n], g[n], h[n]}, {n, 2, x}] - 28 - j[50] <参考> ・ RealDigits[x]は,近似実数 x における桁と小数点の左にある桁数とのリストを与える。負の場合は小 数点以下の値を与える。 ・ First[式]は,式の第 1 要素を与える。 [練習問題9] 50 までの 1/ n の値を調べて有限小数はどんな場合か考察せよ。 1-6-2 純循環小数と混循環小数 無限小数も,次の A のように同じ数字が小数第 1 位から循環するタイプと,小数第 1 位でない部分から循 環するタイプの 2 つに分けることができる。 A: 1/7= 0.142857 142857 … B: 1/28 = 0.03 571428 571428 … A のタイプの少数を純循環小数,B のタイプを混循環小数という。どちらのタイプにおいても,循環する 数字のワンセットを循環節という。 さて,n がどんな数の時に 3 つのタイプになるのか考えてみよう。 [例題10] 次のようにリストの中から行列部分を持つ場合(循環節を持つ場合)を取り出してみる。 jyunkan[x_] := Do[Table[If[ VectorQ[Part[h[n], k]] == True, {Print["n=", n], Print[f[n]], Print[h[n]]}], {k, 1, Length[h[n]]}], {n, 2, x}]; jyunkan[50] <参考> ・ VectorQ[式]は式がリストあるいは 1 次元の要素それ自身がリストであるような要素を持たない行列 オブジェクトの場合は True を与える。それ以外の場合は False を与える。 ・ Part[リスト, i]は,リストの第 i 部分を与える。 [練習問題10] 50 までの循環節を持つ n の値から,純循環小数になる場合はどんな場合か考察せよ。 1-6-3 循環節の長さ 次に n の値と循環節の長さの関係について考えてみよう。 [例題11] 次のように循環節を持つ場合に循環節の長さを調べてみる。 jyunkan2[x_] := Do[Table[ If[VectorQ[aa = Part[h[n], k]] == True, {Print["n=", n], Print[f[n]], Print[h[n]], Print["L=", Length[aa]]}], {k, 1, Length[h[n]]}], {n, 2, x}]; jyunkan2[50] [練習問題11] 50 までの循環節を持つ n の値から,循環節の長さとの関係を考察せよ。 1-6-4 オイラー関数 整数 n に対して 1, 2, 3 ・・・, n の の中で n と互いに素(つまり公約数を持たない)な数の個数をオ イラー数といってφ(n) であらわす。たとえば, n = 5 のとき,素な数 x は x = 1, 2, 3, 4 より φ(5) = 4 - 29 - n = 8 のとき,素な数 x は x = 1, 3, 5, 7 より φ(8) = 4 n = 6 のとき,素な数 x は x = 1, 5 より φ(6) = 2 もし n が素数ならば公約数を持たないのでφ(n) = n - 1 となります。循環節の長さはこのオイラー関数 と深い関係を持っている。 [例題12] 次のように循環節を持つ場合に循環節の長さを調べてみる。 jyunkan3[x_] := Do[Table[ If[VectorQ[aa = Part[h[n], k]] == True, {Print["n=", n], Print[f[n]], Print[h[n]], Print["L=", Length[aa]], Print["E=", EulerPhi[n]]}], {k, 1, Length[h[n]]}], {n, 2, x}]; jyunkan3[50] [練習問題12] 50 までの循環節を持つ n の値から,循環節の長さとオイラー関数との関係を考察せよ。 2.数学を分析する(その2) 2-1 (テーマ例6)πの求め方 円周率πの近似値を求める方法は実に様々である。いくつかの方法でπを求めながら, Mathematica のプログラミングについても学習していこう。 はじめに,πの近似値を確認しておく。N[Pi,20] を実行してみよ。 2-1-1 級数を使う方法 [例題13] 次の級数式を用いて,近似的にπの値を求めよ。 π 4 (−1)n −1 n =1 2n − 1 ∞ =∑ P[n_] := N[4*Sum[(-1)^(x - 1)/(2x - 1), {x, 1, n}], 20]; P[100] [練習問題13] n = 10000 まで計算してどれくらいの誤差があるか比較せよ。 [例題14] 例題13と同様にして,次の級数式を用いて近似的にπの値を求めよ。 π2 6 ∞ 1 2 n =1 n =∑ [練習問題14] n = 10000 まで計算して,例題13の級数式の精度を比較せよ。 2-1-2 積分を使う方法 - 30 - 1 ∫0 1 1 + x2 dx という定積分については,数学Ⅲの教科書で学習するが,x = tan θ とおいて置換積分するこ とによって求めらる。 この左辺を区分求積法の形に表すと(数学Ⅲで学習する) n ∑ x →∞ lim k =1 1 ⎛k⎞ 1+ ⎜ ⎟ ⎝n⎠ 2 ⋅ 1 n ・・・(※) のように書くことができる。この式を用いて円周率の値を求めて見よう。 [例題15] 級数式(※)で n = 10 のとき,次のような計算結果はπ/4 に近い値をとると考えられる この式をを用いて近似的にπの値を求めよ。 1 ⎛1⎞ 1+ ⎜ ⎟ ⎝ 10 ⎠ [練習問題15] 2 ⋅ 1 + 10 1 ⎛ 2⎞ 1+ ⎜ ⎟ ⎝ 10 ⎠ 2 ⋅ 1 + 10 1 ⎛ 3⎞ 1+ ⎜ ⎟ ⎝ 10 ⎠ 2 ⋅ 1 +"+ 10 1 ⎛ 10 ⎞ 1+ ⎜ ⎟ ⎝ 10 ⎠ 2 ⋅ 1 10 n = 10000 まで計算して,例題15の級数式の精度を考察せよ。 2-1-3 モンテカルロ法(確率実験1) 次の図のように 2×2 の正方形の中にランダムに点をうつとき,原点からの距離 が1以下である点(円の内部の点)と全体の点(正方形の内部の点)の数の比は およそその面積比(π: 4)になると考えられる。 このことを利用してπを求めてみよう。 [例題16] ① 10 個の点を打つとき,各点と原点の距離が 1 以内のものと 1 を越えるものの数を調べてみよう。 nn = 10; Table[Random[Real, {-1, 1}]^2 + Random[Real, {-1, 1}]^2, {nn}] 何度か繰り返して実行したとき,10 個の内,1 を越えるものが 2~3 個程度入っていることが確認できた だろうか。(π/4≒0.785) ② 点の数を 1000 個にして,図も描かせながら実験してみよう。 nn = 1000; en = Graphics[Circle[{0, 0}, 1], AspectRatio -> Automatic]; grph = Graphics[Map[Point, ptxy = Table[{Random[Real, {-1, 1}], Random[Real, {-1, 1}]}, {nn}]], AspectRatio -> Automatic]; Show[grph, en, Frame -> True] N[Length[Select[ptxy, #[[1]]^2 + #[[2]]^2 <= 1 &]]/nn*4] <参考> ・ Random[ ]は, 0 から 1 の範囲に一様に分布する Real タイプの擬似乱数を与える。 ・ Random[型, 範囲]は,指定された範囲に指定されたタイプの擬似乱数を与える。可能なタイプとして は Integer,Real そして Complex がある。デフォルト設定の範囲は 0 から 1 である。 範は最小値, 最大値を明示することができる。 - 31 - ・ ・ ・ ・ ・ AspectRatio は,図の縦横比を指定する。 Point[座標]で点を表す。 Select[リスト, 条件]は,条件を満たすようなリストのすべての要素を取り出す。 #[[n]]は,第 n 引数の値を表す。 条件式をつけるときは,式の末尾にアンド記号(&)を付けることを忘れないようにする。 [練習問題16] n = 10000 まで計算して,どの程度円周率に近い値が得られるか調べてみよう。 2-1-4 ビュフォンの針(確率実験2) 幅 h で平行線が引かれている床の上に,長さ m (m < h)の針をアトランダムに落とすとき,針と平行線が 2m ・・・(※)となることが知られている。 hπ 実はこのことは積分を用いて説明することができる。 交わる確率は P = [例題17] 図を描かせながら平行線と交わる針の割合を計算させてみよう。 ①まずは 5 本の平行線を描く。平行線の長さを 5,間隔を 1 とする。 lines = Table[Line[{{0, y}, {5, y}}], {y, 0, 5}]; Show[Graphics[lines]] ②次に①の 5 本の平行線に,長さが 1/2 の針をランダムに落としてみる。 t = 2 Pi Random[]; x1 = Random[Real, {0, 5}]; y1 = Random[Real, {0, 5}]; x2 = x1 + 1/2 Cos[t]; y2 = y1 + 1/2 Sin[t]; ColumnForm[{x1, y1, x2, y2}] g = Line[{{x1, y1}, {x2, y2}}] Show[Graphics[{lines, g}]] ③y1,y2 の値の差が 1 になるかどうかを計算して,平行線と交わるかどうかを判定する。②のプログラ ムを次のように変更する。 n = 10; count = 0; needles = Table[ t = 2 Pi Random[]; x1 = Random[Real, {0, 5}]; y1 = Random[Real, {0, 5}]; x2 = x1 + 1/2 Cos[t]; y2 = y1 + 1/2 Sin[t]; count = count + If[Floor[y1] == Floor[N[y2]], 0, 1]; Line[{{x1, y1}, {x2, y2}}], {n}]; Show[Graphics[{lines, needles}], AspectRatio -> Automatic]; Print[count] ④ ③のプログラムを関数 buffon に格納したあと,落とした針が線 にかかる確率を求めて表示する。 ③のプログラムを次のように変更する。 buffon[n_Integer] := Module[{lines, needles, y, t, x1, x2, y1, y2, count}, lines = Table[Line[{{0,y},{5,y}}],{y,0,5}]; - 32 - count = 0; needles = Table[ t = 2 Pi Random[]; x1 = Random[Real, {0,5}]; y1 = Random[Real, {0,5}]; x2 = x1 + 1/2 Cos[t]; y2 = y1 + 1/2 Sin[t]; count = count + If[Floor[y1] == Floor[N[y2]],0,1]; Line[{{x1,y1}, {x2,y2}}],{n}]; Show[Graphics[{lines,needles}], AspectRatio -> Automatic]; Print["1/frequency = ", N[n/count]]] ⑤次に実際に針の数を代入して実行してみよう。 buffon[100] (※)ここでは,平行線の間隔を 1,針の長さを 1/2 とすることによって,その相対頻度が 1/πになる ことを使っている。 <参考> ・ Module[{x, y, … }, 式]は, 式における記号 x,y,… を局所変数として取り扱うことを指定する。 ・ Floor[x]は,x 以下の最大の整数(切り下げ)を返す。 ・ ColumnForm[{a, a, … }]は,垂直の並びで Print する。 [練習問題17] 針の本数をいろいろに変えて実験してみよう。また,なぜ円周率πが現れるのか,考え てみよう。 (ヒント)平行線の間隔を h,針の長さ m (m < h),平行線と針のなす 角をθとしたとき,θ=θ1 のときの平行線と針の交わる確率は, m sin θ1 となる 。 h 2-1-5 幾何学的方法 直径 1 の円に内接する正 2n 角形の周の長さ(a(n))と,外接する正 2n 角形の周の長さ(b(n))を求める ことでπを近似することを考える。 [例題18] 内接する正 2n 角形の周の長さから調べる。内接する正 2n 角形の周の長さを a(n)とするとき ①三角関数で表現すると, a(n) = 2n sin π 2n Mathematica の書式に直すと, a[n_] := 2^n Sin[Pi/2^n] 正 16 角形では, N[a[4],20] 正 1024 角形では, N[a[10],20] ②三角関数を用いないで表すと, b(1)=2 n≧2 に対して ⎛ b(n − 1) ⎞ b(n) = 2n −1 2 − 2 1 − ⎜ n −1 ⎟ ⎝ 2 ⎠ 2 Mathematica の書式に直すと, - 33 - b[1]=2; b[n_]:=2^(n-1) Sqrt[2-2 Sqrt[1-(b[n-1]/(2^(n-1)))^2]] 正 16 角形では, N[b[4],20] 正 1024 角形では, N[b[10],20] [練習問題18] ②の方法で,その他の正 2n 角形についても調べてみよう。 [例題19] 外接する正 2n 角形の周の長さから調べる。内接する正 2n 角形の周の長さを c(n)とするとき ①三角関数で表現すると, c(n) = 2n tan π 2n Mathematica の書式に直すと, c[n_]:=2n Tan[Pi/(2n)] 正 16 角形では, N[c[4],20] 正 1024 角形では, N[c[10],20] ②三角関数を用いないで表すと, d(1)=2 n≧2 に対して d ( n) = b( n) ⎛ b( n) ⎞ 1− ⎜ n ⎟ ⎝ 2 ⎠ 2 ⎛ b(n − 1) ⎞ ただし, b(n) = 2n −1 2 − 2 1 − ⎜ ⎟ ⎝ 2n −1 ⎠ 2 Mathematica の書式に直すと, d[1]=2; d[n_]:=b[n]/(Sqrt[1-(b[n]/2^n)^2]) 正 16 角形では, N[d[4],20] 正 1024 角形では, N[d[10],20] [練習問題19] ②の方法で,その他の正 2n 角形についても調べてみよう。 3.数学を分析する(その3) 3-1 (テーマ例7)二項定理とパスカルの三角形 3-1-1 二項定理とは 二項定理とは, (a + b)n の展開式に現れる規則性または展開式そのもののことをいう。 [例題20] 次のプログラムを実行することで下の( - 34 - )に適当な数字を入れなさい。 TableForm[Table[Expand[(a + b)^n], {n, 1, 5}]] ① (a + b)2 ② (a + b)3 ③ (a + b)4 ④ (a + b)5 = ( )a2 +( )a b +( )b2 = ( )a3 +( )a2 b +( )a b2 +( )b3 4 3 2 2 = ( )a +( )a b+( )a b +( )a b3 +( )b4 =( )a5 +( )a4 b +( )a3 b2 +( )a2 b3 + ( )ab4 +( )b5 [練習問題20-1] 見つけた法則を使って,図 1 を埋めてみなさい。このようにして築かれた数字のピ ラミッドは「パスカルの三角形」と呼ばれている。パスカルは“賭けを中断した際の公平な配分方法”の 中から「パスカルの三角形」を発見したといわれています。 図1 図2 [練習問題20-2] 「パスカルの三角形」を調べると,いろいろな数列が現れます。どのような数列が 隠されているか考えてみよう。 [練習問題20-3] 「パスカルの三角形」に色を塗ってみよう。図 2 を用いて図 1 の数字で奇数の箱だ け,マーカーなどで色を塗ってみると,どんなデザインが現れるだろう。 3-1-2 Mathematica による実験 「Mathematica」を使って,コンピュータ上で「パスカルの三角形」の色塗り実験をしてみよう。 [例題21] 2項係数の表示 次のコマンドを実行して,2項係数を計算しよう。 n (a + b) n の展開は (a + b) n = ∑ n Cr a n − r b r で与えられ,右辺の係数 n Cr を 2 項係数という。 r =0 隣接する 2 項の和になっていることを式で表すと n Cr = n −1 Cr −1 + n −1 Cr となる。 Table[Binomial[3, r], {r, 0, 3}] Table[Binomial[4, r], {r, 0, 4}] - 35 - Table[Binomial[5, r], {r, 0, 5}] Pascal1[m_] := TableForm[Table[Binomial[n, r], {n, 1, m}, {r, 0, n}]] <参考> ・ Binomial[n, r]は,2 項係数 n Cr を与える。 [練習問題21] Pascal1[30]を実行してみよ。 [例題22] 偶数と奇数の塗り分け 次のコマンドを実行して,2項係数の中で奇数のものを青で塗りつぶそう。 pascal2[m_] := Module[{a, b, c}, a = {1/2, -Sqrt[3]/2}; b = {-1/2, -Sqrt[3]/2}; p[n_, k_] := n b + k(a - b); c = Table[If[EvenQ[Binomial[n, k]], Circle[p[n, k], 1/2], {RGBColor[0, 0, 1], Disk[p[n, k], 1/2]}], {n, 0, m}, {k, 0, n}]; Show[Graphics[c, AspectRatio -> Automatic]];] pascal[20] <参考> ・ Circle[{x, y}, r]は,半径 r で点 (x,y)を中心とする円を表す。これに対して Disk[{x, y}, r]は, 円の内部を塗りつぶす。 ・ RGBColor[red, green, blue]は,与えられた色で表示されるように指定する。red, green, blue は 0 ~1 の値を指定する。 [練習問題22] Pascal2[30]を実行してみよ。 塗りわけされた図をみると,自分自身を拡大(縮小)したものを自分自身の中に含むという構造が,無限 に繰り返された形をしている。これを自己相似な図形(フラクタル図形)という。 [例題23] ある数 r で割り切れるかどうかの塗り分け 次のコマンドを実行して,2項係数の中である数 r で割り切れるものを青で塗りつぶそう。 Pascal3[r_, m_] := Module[{a, b, c}, a = {1/2, -Sqrt[3]/2}; b = {-1/2, -Sqrt[3]/2}; p[n_, k_] := n b + k(a - b); c = Table[If[Mod[Binomial[n, k], r] == 0, Circle[p[n, k], 1/2], {RGBColor[0, 0, 1], Disk[p[n, k], 1/2]}], {n, 0, m}, {k, 0, n}]; Show[Graphics[c, AspectRatio -> Automatic]];] Pascal3[2, 80] [練習問題23] Pascal3 で r,m の値を変えて試してみよう。synmetric でなかなか美しい模様が姿を 現します。特に奇数で割り切れる数の描く模様は面白いですよ。 - 36 - 4.数学を分析する(その4) 4-1 (テーマ例8)コーヒーカップの描く軌跡 4-1-1 コーヒーカップの描く軌跡 2000 年 4 月に放送の『所さんの目がテン!』のテーマは,『楽しさの科学 遊園地』というものでした。 遊園地にある遊具をめまい系(ジェットコースタやフリーフォールなど)となごみ系(観覧車やメリーゴー ランドなど)に分け,めまい系の代表選手としてコーヒーカップを分析していくという内容でした。めまい 系のベスト?5は, 1. コーヒーカップ 2. ビックリハウス 3. バイキング 4. ジェットコースター 5. フリーフォール と,なんとコーヒーカップが1番めまいを起こしやすい乗り 物だったのです。さて,そんなコーヒーカップの描く軌跡を 調べてみましょう。 コーヒーカップのしくみは次のようになっています。 「回転する大きなステージの上に円盤が回っていて,そ の上に自分でまわすコーヒーカップの回転が加わり複雑 な動きをする」 大きなステージを大円盤,その上の円盤を中円盤,コーヒ ーカップを小円盤とすると,3 つの円盤が回転していると考 えることができます。そのコーヒーカップに乗っている人の軌跡を調べていきましょう。 大・中・小の 3 つの円盤の動く速度をいろいろと変えて,それが時間の変化とともにどのような動きをする か,その軌跡が問題です。 [例題24] この軌跡の元になる式は,右の図のように 3 つのベクトルの和と考えれば,次のように極座 標であらわすことができる。 ⎧ x = R0 cos[2π n0 t ] + R1 cos[2π n1t ] + R2 cos[2π n2 t ] ⎨ ⎩ y = R0 sin[2π n0 t ] + R1 sin[2π n1t ] + R2 sin[2π n2 t ] ここで R1,R 2,R 3 はそれぞれ,中円盤の回転半径、小円盤の回転半径、 乗っている人のコーヒーカップの中心からの距離をあらわします。 また,n0,n1,n2 は大・中・小 3 つの円盤の回転する速さ(角速度)をあ らわします。次のプログラムを実行してみよう。 R = 10; g0 = Graphics[Circle[{0, 0}, R], AspectRatio -> 1, Axes -> None]; R0 = 6; R1 = 2; R2 = 0.8; n0 = 1; n1 = 2; n3 = 0; t = 0.1; x1 = R0*Cos[2*Pi*n0*t]; y1 = R0*Sin[2*Pi*n0*t]; x2 = R0*Cos[2*Pi*n0*t] + R1*Cos[2*Pi*n1*t]; y2 = R0*Sin[2*Pi*n0*t] + R1*Sin[2*Pi*n1*t]; - 37 - x3 = R0*Cos[2*Pi*n0*t] + R1*Cos[2*Pi*n1*t] + R2*Cos[2*Pi*n2*t]; y3 = R0*Sin[2*Pi*n0*t] + R1*Sin[2*Pi*n1*t] + R2*Sin[2*Pi*n2*t]; g1 = Graphics[{Circle[{x1, y1}, 3], Circle[{-y1, x1}, 3], Circle[{-x1, -y1}, 3], Circle[{y1, -x1}, 3], Circle[{x2, y2}, 1], Disk[{x3, y3}, 0.2]}, AspectRatio -> 1, Axes -> None] Show[g0, g1] [練習問題24] n0 = 1 は固定して,n1,n2,t の値を変えて,点の位置を確かめよう。 4-1-2 軌跡のアニメーション 手当たり次第ランダムに変化させても規則性を見つけるのは大変です。アニメーションにして軌跡の描く 軌跡に何か規則性がないか調べてみよう。 [例題25] ①例題24のプログラムを次のように変えて,点の動きを観察してみる。 R = 10; g0 = Graphics[Circle[{0, 0}, R], AspectRatio -> 1, Axes -> None]; R0 = 6; R1 = 2; R2 = 0.8; n0 = 1; f[n1_, n2_] := Do[ x1 = R0*Cos[2*Pi*n0*t]; y1 = R0*Sin[2*Pi*n0*t]; x2 = R0*Cos[2*Pi*n0*t] + R1*Cos[2*Pi*n1*t]; y2 = R0*Sin[2*Pi*n0*t] + R1*Sin[2*Pi*n1*t]; x3 = R0*Cos[2*Pi*n0*t] + R1*Cos[2*Pi*n1*t] + R2*Cos[2*Pi*n2*t]; y3 = R0*Sin[2*Pi*n0*t] + R1*Sin[2*Pi*n1*t] + R2*Sin[2*Pi*n2*t]; AppendTo[listxy, {x3, y3}]; Show[g0, Graphics[{Circle[{x1, y1}, 3], Circle[{-y1, x1}, 3], Circle[{-x1, -y1}, 3], Circle[{y1, -x1}, 3], Circle[{x2, y2}, 1], Disk[{x3, y3}, 0.2]}, AspectRatio -> 1, Axes -> None]], {t, 0, 2*Pi, Pi/90}] ②つぎのようにプログラムを実行したあと,全てのセルにかかっているセルプラケットをクリックし,反 転表示させる。[CTRL] + Y を押す。アニメーションが実行される。 listxy = {}; f[-1.2, 0] ③最後に点の軌跡を図示する。 g2 = ListPlot[listxy, AspectRatio -> 1, Axes -> None, PlotStyle -> PointSize[0.014]]; Show[g0, g2] <参考> ・ アニメーションのスピードを変えるには,ウインドウの下のほうについているボタンを用いる。 [練習問題25] f[n1, n2] において n1,n2 の値を,次の順序で変化させ考察してみる。 1. 回転する速さの比が整数の場合 例:(n1,n2) =(2, 0), (3, 0), (5, 0), (-2, 0), (-3, 0), (-5, 0) - 38 - 2. 3. 4. 回転する速さの比が簡単な小数の場合 例:(n1,n2) =(1.5, 0), (2.5, 0), (1.2, 0), (-1.5, 0), 1,2 から折り返し点の規則性を考察する 回転する速さの比が複雑な場合 例:(n1,n2) =(1, 1), (1, 5), (1, -5), (2, 1), (2, 5), (-1, 1), (-1, 5), (-1, -5), (-2, 1), (-2, (3, 1), (3, 5), (3, 9), (3, -3), (3, -5), - 39 - (-2.5, 0), (-1.2, 0) (2, -5) 5), (-2, -5) (3, -9) 課題研究 数学的現象で,興味あるテーマを決め,詳しく調査し,気づいたこと,予想されることなどをレポートに まとめて提出せよ。 [テーマ例] ① ピタゴラス数の分布 ② カプレカー操作 ③ 角谷の予想 ④ 完全数と友愛数 ⑤ 1/n にあらわれる循環少数 ⑥ πの求め方 ⑦ 二項定理とパスカルの三角形 ⑧ コーヒーカップの描く軌跡 ⑨ その他 - 40 -