無理数に見えるのに整数になる?

このページは[url=https://www.geogebra.org/m/ddm5798j]マス旅[/url]の一部です。[br][br]ラマヌジャンというと、無限に続く式というイメージがありますね。[br][br]一見、無理数に見えるけれど、計算すると整数になる式。[br]そんな式からはじめてみよう。
1.数式とウォーミングアップ
[br][b][size=150]sqrt(1+2 sqrt(1+ 3 sqrt(1+ 4 sqrt( 1+ 5 sqrt(1+ ...... =?[br][/size][/b]geogebraのTexでかくと、[br] [math]\sqrt{1+2\sqrt{1+3\sqrt{1+4\sqrt{1+5\sqrt{1+...}}}}}=[/math][b][color=#0000ff][size=150]?[/size][/color][/b][br][br]無理数の計算をすれば無理数になるんじゃないか?[br]と思いがちですが整数になります。[br][br]では、ウォーミングアップから入りましょう。[br][br][size=150][b]<[/b][b]平方根の連分数展開>[/b][/size][br]入れ子の分数の極限が無理数になるというのは知ってますよね。[br][size=200][color=#0000ff]1+1/(2+1/(2+1/(2+1/......)))=√2[br][/color][size=100]geogebraのTexでかくと、[br][/size][/size][br] [math]1+\frac{1}{2+\frac{1}{2+\frac{1}{2+....}}}=[/math] √2[br][br]√2となる結果をわからないとしてxとおきましょう。[br]すると、x=1+1/□ [br]という形に見えますよね。[br]その分母□のところをじっと見よう。[br]□=2+1/△になりますね。[br]ここで、□と△を見比べてみよう。無限があることから□と△が同じになってしまう。[br]ということは、[br]最初の式の分母□=2+1/□=1+(1+1/□)=1+x。[br]つまり、最初の式全体は[br]x=1+1/(1+x)[br]となるね。[br]x-1=1/(1+x)[br](x-1)(x+1)=1[br]x^2=2[br]x=√2(正だから)[br][br][b][size=150]<分数が√にかわると。。。>[br][/size][/b][br]視界をずらす練習ができたところで、次にいこう。[br][br] [math]\sqrt{2+\sqrt{2+\sqrt{2+\sqrt{2+\sqrt{2+...}}}}}=[/math][b][color=#0000ff][size=150]?[/size][/color][/b][br][br]これも同じ作戦でいこう。[br]式の結果をxとすると、[br]x=√(2+□)と見える。[br]今度は□を見ると、□は無限性からxに見えるね。[br]x=√(2+x)となるから、[br]x^2=2+x[br]x^2-x-2=(x-2)(x+1)=0[br]x=2(正だから)[br]
2.数式の値を求めよう
さあいよいよ、[br][size=150]sqrt(1+2 sqrt(1+ 3 sqrt(1+ 4 sqrt( 1+ 5 sqrt(1+ ...... =?[/size]だ、[br]これまでの数式では一定数だったのが、sqrtの前が1,2,3,4,5と変化しているので、[br]とおいて、漸化式のようなものが作れたらいいですね。[br]そこで、計算結果をxとおくのではなく、[br]平方根にかける数列をx,x+1,x+2,...とするときのxの関数値になるとしてf(x)とおくのです。[br]たまたま、最初の問題ではx=2にしていただけだということにするのですね。[br]もし、だから、計算結果はf(2)になるでしょう。[br][br]さて、[br][b]f(x)=sqrt(1+x sqrt(1+ (x+1) sqrt(1+ (x+2) sqrt( 1+ (x+3) sqrt(1+ ...... [br][/b]すると、[br][b][f(x)^2-1]/x=sqrt(1+ (x+1) sqrt(1+ (x+2) sqrt( 1+ (x+3) sqrt(1+ ......[br][/b]となるね。[br][br]右辺はf(x)のxが1つ進んだだけなので、[b]f(x+1)[/b]だ。[br][b]f(x)^2=1+ xf(x+1)[br][/b][br]一見ややこしそうにみえるが、f(x)が1次式だとすると、左辺も右辺も2次式になる。[br]そして、左辺がf(x)の2乗の典型の定数項が、右辺で1になることから、f(x)=x+1が予想できるね。[br]まさに、[b](x+1)^2=1+x(x+1+1) [/b]が成り立つ。[br]もう解けたと同じです。[br][br]計算結果は[b]f(2)=2+1=3[/b]。[br][br][b][size=150]<f(2)の収束の速さ>[br][br][/size][/b]このf(2)の値をもし、推定するとしたら、どのくらいで3に近くなるでしょうか。[br][b][color=#0000ff][size=150]a1=√(1+2*0)=1[br]a2=√(1+2√(1+3*0)=√3=1.73205...[br]a3=√(1+2√(1+3√(1+4*0)))=√5=2.23606...[br]a4=√(1+2√(1+3√(1+4√(1+5*0)))=....=2.559...[br][/size][/color][/b][br]結構、スピードが速そうですね。[br]akは、根号がk個あり、最後の根号の中は1+0になりますね。[br]根号の最後(内側)から前(外側)に向かってする1回の操作を関数にしましょう。[br]直前の値をprevとすると、次の結果は[br]ret=sqrt(1+k*prev)になります。この関数をnext(k,prev)としましょう。[br]たとえば、k倍はk=4の場合2,3,4では足りないので2,3,4,5と4回まわす形にしたいですね。[br]そこで、a4を出すには最初のprev=0にして、k=5,4,3,2とカウントダウンしながらnext(k,prev)を[br]まわせばよいですね。[br]そこで、[br]ループの変数をi として、range(n)とすると[br] result = next(n+1-i, result)にすると、[br] n=4のときは、iは0から3まで動き、n+1-iは4+1-0=5から4+1-3=2まで変化します。[br]これで、a4=√(1+2√(1+3√(1+4√(1+5*0)))と同じ計算ができることが、脳内デバッグできるでしょう。[br][br]実際まわしてみると、n=10でほぼ3になるという猛スピードで収束することがわかるね。
[b][u][color=#9900ff][size=150]課題:どのくらいで3になるかをPythonで視覚化しよう。[/size][/color][/u][/b][br][br]from math import sqrt[br]import matplotlib.pyplot as plt[br]def next(k,prev):[br] ret =sqrt(1 + k * prev)[br] if ret<0:[br] ret=0[br] return ret[br][br]def nested(n):[br] result = 0[br] for i in range(n):[br] result = next(n+1-i, result)[br] return result[br]# ==========================================[br]max_depth = 15[br]# ==========================================[br]# 視覚化してみる:深さnに対する値の収束プロット[br]depths = range(1, max_depth + 1)[br]values = [nested(d) for d in depths][br][br]plt.figure(figsize=(10, 6))[br]plt.plot(depths, values, marker='o', linestyle='-', color='#674ea7', markerfacecolor='#e06666')[br]plt.axhline(y=3, color='black', linestyle='--', label='convergence: 3')[br]plt.xlabel('depth(n)')[br]plt.ylabel('value')[br]plt.title('where to (√1+2√1+3√...)')[br]plt.legend()[br]plt.grid(True)[br]plt.show()[br][br][OUT]
入れ子の根号式の収束
[b][size=150]<振り返り>[/size][/b][br][br]ラマヌジャンの発想を想像してみよう。[br]以下は、zenの勝手な想像であることを承知して読んでください。[br][br]ラマヌジャンにとっての数式は全体としてある1つの生き物であり、[br]登場する数はその生き物の状態を変えられるパラメータだ。[br]しかもそれが、ちまちま変えるのでなく、[br]一斉にブロードキャストできるものだ。[br][br]つまり、こんなイメージ[br][size=150]f(2, 3,4,5,.....)=sqrt(1+2 sqrt(1+ 3 sqrt(1+ 4 sqrt( 1+ 5 sqrt(1+ ......=??? [/size][br][size=150]f(1, 2,3,4,.....)=sqrt(1+1 sqrt(1+ 2 sqrt(1+ 3 sqrt( 1+ 4 sqrt(1+ ......=?? [br][size=150][color=#0000ff]f(0, 1,2,3,.....)=sqrt(1+0 sqrt(1+ 1 sqrt(1+ 2 sqrt( 1+ 3 sqrt(1+ ......=[b]sqrt(1+0 )=1[/b][/color][/size][/size][color=#0000ff][br][size=150]f(-1, 0,1,2,.....)=sqrt(1-1 sqrt(1+ 0 sqrt(1+ 1 sqrt( 1+ 2 sqrt(1+ ......=[b]sqrt(1-1 sqrt(1+0))=0[/b]  [/size][br][/color][br]そこで、sqrtの前の数を一斉に変化させるために[br][b][color=#0000ff]f(2,3,4,5,.....)をf(2)とすると、[br]f(0)=1, f(-1)=0だから、f(x)=x+1が予測できる。[br][br][/color][/b]ラマヌジャン自身は証明しなくても自明だったのではないでしょうか。[br]証明をしない数学者は、[br]「[b]証明するまでもなく自明な筋道[/b]」を見つけているということだと思います。[br][br][b][size=150][u][color=#9900ff]課題:geogebraでnextを回す感じで3に近づくことを確かめよう。[br][/color][/u][/size][/b][br]タイトルは「ラマヌジャンの入れ子の根号計算」[br][b][color=#0000ff]g(k,x)=sqrt(1+ k x)[br]a10=g(2,g(3,g(4,g(5,g(6,g(7,g(8,g(9,g(10,g(11,0))))))))))[br]#2.98992[br][/color][/b][br]a11=g(2,g(3,g(4,g(5,g(6,g(7,g(8,g(9,g(10,g(11,g(12,0)))))))))))[br]#2.9948[br]a12=g(2,g(3,g(4,g(5,g(6,g(7,g(8,g(9,g(10,g(11,g(12,g(13,0))))))))))))[br]#2.99733[br][br] IterationListを使わなくても、関数を入れ子にするだけで、済みますね。[br]1回の処理を1つの関数としておくことで、[br]関数の入れ子の式をそのまま再現していることもわかるし、[br]あっけなく計算できてしまうね。[br][br]ということは、Pythonでも同様な関数の入れ子ができるはずだね。[br]# 1回分のルートの皮を被せる関数[br]def g(k, x):[br] return sqrt(1 + k * x)[br][br]# 数式をそのままコードに翻訳する[br][b]a10 = g(2, g(3, g(4, g(5, g(6, g(7, g(8, g(9, g(10, g(11, 0))))))))))[br][/b]print(a10) # 2.98992...
ラマヌジャンの入れ子の根号計算

圏論には「ファンクター」から入ろう

このページは[url=https://www.geogebra.org/m/ddm5798j]マス旅[/url]の一部です。[br][br][b][size=150][color=#0000ff]「圏」は「集合」と「ベクトル」と「群」をゆる~くアレンジしてできた、[br]何かのつながりを俯瞰するときに使える数学のアイディアです。[br][/color][/size][/b][br]知らないものを学ぶという感覚ではなく、[br]ぼんやり気づいていることの明確化だ、と思って付き合いましょう。[br][br]さて、「圏」は「集合」と「ベクトル」と「群」をゆる~くアレンジしてできたものとかきましたが、[br]ざっくり、「圏」(カテゴリー)というカタマリの共通ルールを確認しましょう。[br][br]そして、1つめキーワードである「ファンクター(関手)」に親しもう。
6の約数圏
1.圏の具体と抽象
圏の具体と抽象[br][br][size=150][b]<圏とは何か>[br][/b][/size][br][color=#0000ff][b][size=150]「圏」とは、対象と「射」という矢印を持っていて、1という矢印があり、[br]矢印の結合ができて、結合法則が成り立つ、そういうカタマリです。[br]たったこれだけのルールです。[br][/size][/b][/color][br]対象があるところが「集合」と同じだけど、その中身は特に指定されてない。対象は数どころか、同種のものがあつまってれば何でもOK。[br]矢印があるのが「ベクトル」と同じだけれど、始点と終点はあっても位置はない、長さは自由。[br]1と結合法則については「群」と同じだけれど、逆は特になくてOK。[br][br]ここまで読んで、どう思いますか。[br][br]矢印中心で対象はあいまいです。これでいいのか?[br]と思いますよね。あえて、矢印中心にしたのです。[br]これが「圏」の物重視ではな関係重視の思想です。[u][b]internalよりも[/b][/u][u][b]external重視[/b][/u]です。[br][br]矢印の位置も長さがどうでもよくて、つなげ方が大事です。[br]これが、同型なら同じとみなすという位相的な発想が基本にあります。[br]「射」中心の圏論では、対象を[b][u]同型を除いて(up to isomorphism)[/u][/b]区別するのが自然なのです。[br][br][br][b][size=150]<圏の具体>[/size][/b][br]人間の認知構造として、モデルがないと、わかった気にならないものです。[br]そこで、圏の具体を並べます。[br][br]ヒットするものがあるとうれしいです。[br][br][color=#0000ff][b][size=200]圏の名前={対象、射、結合、1}[br][/size][/b][/color]の順に並べてみますね。[br][br][br]整数の整除圏={整数たち、整除、整除の連続、自身を割る}[br]半順序圏={半順序集合の要素、半順序 、半順序の合成、自身との半順序」[b][br]6の約数圏={[1,2,3,6]、xはyの約数、約数の約数、1}[/b][br]先祖圏={[私、母、祖母]、xはy以上の先祖、先祖の先祖、自身}[br][br]Grps(群圏)={群たち、群準同型、群準同型の合成,恒等写像}[br]Sets(集合圏)={集合たち、写像、写像の合成、恒等写像}[br]Tops(位相空間圏)={位相空間たち、連続写像、写像の合成、恒等写像}[br]空圏={空、空、空、空}[br]1圏={1、1→1、1、1}[br][br]グラフ圏={ノード、矢、矢をつなぐ、自己ノードをさすループ}[br]データ型圏={データ型たち(数値、文字列、リスト)、型変換、変換の連続、無変換}[br]すごろく圏={すごろくの位置(振り出し、とちゅう、ゴール)、進む、進むを続ける、休み}[br][br]まだまだありそうですね。[br][br]半群の圏、環の圏、体の圏、.......[br]集合で対象を1つの集合の要素たちにして、射を部分集合にした「部分集合の圏」もできるでしょう。[br]集合たちでも2つの集合の共通部分を射にすると、「共通部分の圏」もできるでしょう。[br]いろいろできそうですね。[br][br]「圏」のアイディアが「[b]普遍性[/b]」のあるものだということが感じられるでしょう。[br][br]さて、次はいよいよ、[br][br][b][size=150][size=200][color=#0000ff]圏と圏をつなぐ矢印であるファンクター(関手)[br][/color][/size][/size][br][/b]を見てみよう。
2.ファンクターはこわさず持ち上げる
[b][size=150]<ファンクターはこわさず持ち上げる>[/size][/b][br][br]functorはfunctionと最初の4文字が同じです。[br]働きは似てますが、厳密には違うからこそ違う名前がついています。[br]見慣れないコトバだと思っている人には朗報です。[br][br][color=#0000ff][b][size=150]「ファンクターはセットメニュー化」[br][/size][/b][/color][br]というブンゲン先生の「はじめての圏論」でのたとえが超わかりやすいです。[br][br]H=ハンバーグ圏[br]={[ハンバーグ、チーズハンバーグ、和風ハンバーグ、…]、[br][和風にする、チーズをのせる、...]、[br]射を組み合わせる、素のまま}[br][br]fmap(H)=ハンバーグライスセット圏[br]={[ハンバーグライスセット、チーズハンバーグライスセット、和風ハンバーグライスセット、…]、[和風にする、チーズをのせる、...]、射を組み合わせる、素のまま}[br][br]ここで、Hの2つの対象a=ハンバーグ、 b=チーズハンバーグと、射cheeze:a→b(チーズをのせる)を[br]とりあげましょう。[br]f(a),f(b)の関係はcheezeなので、fmap(cheeze):f(a)→f(a)ですよね。[br][br]HaskellのFunctorの型クラスの定義は次のようになってます。[br][br][b][size=200][color=#0000ff]class Functor f where[br] fmap f :: (a->b) -> fa -> fb[br][/color][/size][/b][br](Haskellは関数の引数にかっこをつけないの上にかいたことと同じです。)[br][b]射をまるごと始点と終点もいっしょに移します[/b]が、始点、終点はライスセットのfが効いてますが、[br]射のチーズをのせるのはそのまま保存されてますね。[br][br]Functorの型には、[b]Maybe[/b]というインスタンスもあります。[br]Maybeはたぶんコケるかもというデータ型です。[br]こけても安全にデータとして渡されます。[br]「fmap」はmapだけどファンクターのマッピングですよという、[br]一般のmapと区別するためのワードですので深入りしないでいいです。[br]「where」はHaskellの条件句の開始部分で左カッコ程度の意味ですね。[br][br]instance Functor Maybe where[br] fmap f (Just x) = just (f x)[br] fmap f Nothing = Nothing[br][br]似たものに[b]Either[/b]というインスタンスもあります。[br]instance Functor (Either a) where[br] fmap f (Right x) = Right (f x)[br] fmap f (Left x) = Left x[br][br]Haskellは型が厳密な言語なので、ファンクター型が種類わけされています。[br]Pythonとは現状真逆で型にうるさくないなのでFunctorはもっとゆるく使えましたね。[br][br]たとえば、[b]PythonのFunctorのMaybe[/b]の使い方は、[br]from pymonad.maybe import Just, Nothing[br]def extract_addressM(X):[br] return Just(X["A"]) if "A" in X else Nothing[br]というように、[br]辞書型のデータのaddress項目を調べて、欠損してないとJustでくるみ、欠損してるとNothing[br]を返す。JustもNothingも予定された値だから欠損値でもエラーがおきずに動かせます。[br][br]Nothingじゃあさみしいと思ったら、[br]def extract_addressE(X):[br] return Right(X["address"]) if "address" in X and X["address"] is not None else Left("Address がありません")[br]Either型を使って、欠損値のときはLeftにメッセージをくるみ、データがあればRightにくるんで送ります。[br][br]これは、単独処理ではなく、複数の項目があればこのような関数をバケツリレーできます。[br]変なデータがまざっていても、エラーが起きずに情報収集ができます。[br]くわしくは、こちら「[url=https://www.geogebra.org/m/twxxx3yq#material/huczjcdf]FP:モナドで現実データ世界を安全に過ごそう」[/url]をご覧ください。[br][br][b][size=150]<振り返り>[br][/size][/b]今の3つの例からわかることは何でしょう。[br]ブンゲン先生の例は[br]「ハンバーグ圏」の構造を持ち上げて「ライスセット圏」を作りました。[br]Maybeは[br]「データ圏」の構造を変えずに、「Maybe圏」を作りました。[br]Eitherは[br]「データ圏」の構造を変えずに、「Either圏」を作りました。[br][br]これって、圏を圏に移す射です、1対1で構造を壊さず全体を持ち上げてますね。[br]ということは[br]ファンクター={圏たち、ファンクター、合成、恒等射}という圏になっているということですね。[br]このしくみは、[br]2の約数圏={[1,2]、約数、合成、自分自身の約数}という超シンプルな圏と対応がつくね。[br]ファンクターを使うと、圏の同型写像の圏を作れそうですね。[br]だた、準同型ではなく、同型といえるためには逆戻りできないといけない。[br]厳密には、逆射としての逆ファンクターが構成できると、「[b]圏同型[/b]」と言えそうだね。また、ファンクターは射の1つだから、[br]射の合成としてファンクターのバケツリレーができるということも言えるでしょう。[br]たとえば、「ライスセット圏」にビールをつけて「ビールライスセット圏」もできるでしょう。[br][br][br][b][size=150]<さらに俯瞰しよう>[br][/size][/b][br]圏たちが、対象でファンクターが射となる圏が作れるということは、[br]圏と圏をつなぐファンクターを複数用意することができるはずだ。[br]さっきの例では、[br]1つのデータ圏に対して、ファンクターを変えたために、Maybe圏とEiger圏ができた。[br]でも、圏Cに2つのファンクターF,Gをして同じ圏Dができることもありうるでしょう。[br]そうすると、F、Gは違ってみえても、[br]2つの[color=#0000ff]ファンクター[b]FをGに翻訳する対応が自然にできるはず[/b][/color]ですね。[br]これを[b][color=#0000ff][size=200]自然変換(natural transformation)[/size][/color][/b]という。[br][br]圏Cの中の[b]射f:a→b[/b]に目をつけてみよう。[br]射がそれぞれ持ち上げられるとして、[b]F(f): F(a)→F(b)とG(g):G(a)→G(b)[/b]とする。[br]そして、FモノからGモノへの翻訳をφとしたら、[br]F(a)からG(b)への射は[br][b]φaしてG(f)でも、F(f)してからφbしても[/b]同じはずだ。[br]これを「[b]図式が可換[/b]」だという言い方をします。[br]圏論の証明の基本技です。[br][br]群論の証明でもよく出てきましたね。[br]グラフをかくと、四角形ABCDができてて、AからCへの矢印は[br][b]AB+BCでも、AD+DCでも射の合成は同じ[/b]になりますよ[br]というものでしたね。[br][br]イメージとしたら、「ビールライスセット圏」は[br][b]ピールが先でもライスが先でも、[br]結局は、「ビールライスセット圏」ができる[/b]でしょということですね。
3.圏の視覚化
圏の視覚化をしてみる。[br][br][size=150][b][u][color=#9900ff]課題:自然変換φの図式が可換であることを視覚化しよう。[br][/color][/u][/b][/size][br]#Pythonを使わなくても、geogebraで図式がカンタンにかけます。[br]#オブジェクトの設定のラベルの変更によって、記述の自由度があがりますね。[br]#タイトル「自然変換φの図式が可換」[br]#四角形ABCDをかきます。[br]A=(-3,3)[br]B=(-3,-1)[br]C=(3,-1)[br]D=(3,3)[br]φa=Vector(A,B)[br]φb=Vector(D,C)[br]Ff=Vector(A,D[br]Gf=Vector(B,C)[br]4点A,B,C,Dの設定を順にひらいて[br]ラベルをF(a),G(a),G(b),F(b)に変更します。[br]ビューの格子と軸を設定で非表示にすると、図に見えますね。[br]
自然変換φの図式が可換
[b][size=150][u][color=#9900ff]課題:データ圏をMaybe圏やEither圏に持ち上げるようすを視覚化しよう。[br][/color][/u][/size][/b][br]Pythonを使わなくても、geogebraでカンタンに作れます。[br]#タイトル「データ圏をファンクターを使って、Maybe圏またはEither圏へ持ち上げる」[br]a=slider(-10,10,1) #アニメーションにする。[br]JorN={"Just " + a, "Nothing"}[br]Maybe=if(a>=0, JorN(1), JorN(2)) #太字で青で文字サイズを大にする。[br]RorL={"Right( " + a + " )","Left(負のデータです)")[br]Either= if(a>=0, RorL(1), RorL(2)) #太字で緑で文字サイズを大にする。[br]b=CheckBox(if(On),Maybe,Either) #Maybeに連動して作る。Eitherの設定で上級でb==falseとする。[br]ビューの格子と軸を設定で非表示にすると、図に見えますね。[br][br]
データ圏をファンクターを使って、Maybe圏またはEither圏へ持ち上げる

4元数の計算ルールに親しもう。

このページは[url=https://www.geogebra.org/m/ddm5798j]マス旅[/url]の一部です。[br][br]ハミルトンさんの人物像や4元数の歴史などの周辺はすっとばして、[br]初回である今回は、計算中心で、[br]複素数の拡張版としての4元数の特徴をつかんでいきましょう。
1.4元数をベクトル・複素数につなげよう
[b][size=150]<ハミルトン流のベクトル積=外積ー内積>[/size][/b][br][br]R_3のベクトルの[b]正規直交基底ベクトルをi,j,k[/b]とすると、[br][b]i^2=j^2=k^2=1,i・j=j・k=k・i=0[/b]であり、[br]コトバの意味から自明な結果だね。[br][br]一方で、[br]4元数が作る空間の[b]4基底ベクトルをi,j,k[/b]とすると、[br][b][color=#0000ff][size=200]i^2=j^2=k^2=-1,[br]ij=-ji=k,jk=-kj=i,ki=-ik=j, ijk=-1[br][/size][/color][/b]と基底の積については[br][b]交代性[/b]と[b]サイクリック性[/b]があるという奇怪な定義がされる。[br]なぜだろうか?[br][br]これは、ベクトルの積についてのハミルトン流の定義があることから出てくる。[br]ハミルトンの[b]4元数の基底ベクトルの積は外積ー内積[/b]で定義されている。[br][br]通常の[b]内積a・b=|a||b|cosθ[/b]から、a・a= |a|^2 、θ=π/2のとき、a・b=0[br][b]外積=a×b[/b](a,bに垂直なベクトルで、aからbに向かう右ねじの位置にある。)[br][b]外積は交代性[/b]がある。[br][br][b]ij=i×j -i・j =i×j[/b]から、直交基底どうしの積は外積と同じ性質を持ち、右手系なら、[b]ij=i×j=k[/b]となる。[br]また、[b]i^2=0- |i|^2=-1[/b]となる。さらに、[b]ijk=kk=-1[/b]もすぐわかる。[br][br]これで、R_3の正規直交基底ベクトルについて、ベクトルの[b][color=#0000ff][size=150]ハミルトン流の積=外積ー内積[/size][/color][/b][br]というルールの追加をするだけで、[br]4元数の基底ベクトルの性質がすべて導けたね。[br][br][b][size=150]<4元数の演算と複素数の演算に似ている>[br][/size][/b][br][b][color=#0000ff][size=200]4元数=スカラー部+R_3ベクトル部[/size][/color][br][/b][br]という定義をする。[br][b]スカラー部をq0[/b], ベクトル部qvの基底をi,j,kとしたときの成分が[b](q1,q2,q3)[/b]ならば、[br][b][size=150]4元数q=(q0,q1,q2,q3)[br][/size][/b]と4つの実数で表記できるから、4元数という。[br][br][color=#9900ff]「表記」について、[br][/color]クォータ二オンはチルダを上につけて表すが、誤解がなければ何もつけない。[br]クォータというと4分の1というイメージが強いのでただ要素が4つあるという感じで[br]4元数という名称を使うことにする。[br]対象が4元数とわかるときはそれすら書かない。[br][b][size=150][color=#0000ff][br][size=200]q=q0+qv[br][/size][/color][/size][/b]や(q0,qv)とかくと面白い。4元数を2要素のようにかけるからだ。[br][br]複素数は共役は虚部の符号を反対にしたように、[br][b][color=#0000ff]共役*はベクトル部の符号を反転[/color][/b]する。[br]複素数のノルムが共役との積の平方根だったように、4元数のノルムも同じだ。[br]複素数の逆数が共役をノルム2乗で割ったように、4元数の逆数も同じだ。[br]複素数の和差の実部は実部の和差、和差の虚部は虚部の和差でした。[br]4元数の場合も同様で、和差は実部どうし、ベクトルどうしになります。[br][br]すっとばしてしまったが、大切な4元数の積はどうだろう。[br]p=p0+pv,q=q0+qvの積だね。[b]積=外積ー内積[/b][br]pq=(p0+pv)(q0+qv)=p0q0+q0pv+p0qv+pvqv[br]=p0q0+q0pv+p0qv+pv×qv-pv・qv[br]ここで、pv,qvの成分p1,p2,p3,q1,q2,q3と基底i,j,kにまで落とし込むと複雑な公式ができる。[br]それよりも、外積はベクトルで、内積は実数になることを考えて、実部とベクトル部に[br]わけてみましょう。[br][b][color=#0000ff][size=150](p0+pv)(q0+qv)=(p0q0-pv・qv)+(q0pv+p0qv+pv×qv)[br][/size][/color][/b]とかけば、きれいに見えますね。
2.4元数を行列につなげよう
[b][size=150]<回転を行列にする>[/size][/b][br][br]オイラー等式e^{ix}= cosx+isinxを使うと、[br]nを単位ベクトルにして、e^{nθ/2}でθ/2回転を表す4元数が作れる。[br][b][color=#0000ff][size=150][size=200]θ回転の4元数をq=cosθ/2+n sinθ/2=q0+qv[br][/size][/size][/color][/b]とする。[br]なぜθ回転なのに、θ/2を入れるかというと、qとq*をセットにして使うからだ。[br]n^2が、i^2のときのように-1になり、qの共役はベクトル部だけ符号が反転することから、qのノルムは1になる。[br][b][color=#0000ff][size=150][size=200]位置ベクトルのθ回転はr'=qrq*で、[br]座標系のθ回転はr'=q*rqで[br][/size][/size][/color][/b]実現できる。[br][br]r・nの値をrnとすると、[br]位置ベクトルのθ回転でr'=qrq*=(cosθ/2+n sinθ/2)r(cosθ/2-n sinθ/2)[br][b]=(rn)n+(r-(rn)n)cosθ+n×r sinθ[br][/b]n=(0,0,1)とr=(x,y,z)とすれば、行列R=[br]{{cos θ, -sinθ, 0}, {sinθ, cosθ,0 }, { 0,0,1}}によって、r'=Rr[br]r'=(q0+qv)r(q0-qv)を展開して、qの成分でRを表すこともできるね。[br][br]同様に座標系の回転でr'=q*rq=(cosθ/2-n sinθ/2)r(cosθ/2+n sinθ/2)[br][b]=(rn)n+(r-(rn)n)cosθ+r×n sinθ[br][/b]n=(0,0,1)としてz軸回りの行列Sは[br]{{cos θ, sinθ, 0}, {-sinθ, cosθ,0 }, { 0,0,1}}によって、r'=S r[br]r'=(q0-qv)r(q0+qv)を展開して、qの成分でSを表すこともできるね。[br][br]RとSの関係は視点の変更でしかないから、転置行列になる。[b]tR=S[/b][br]しかも、RとSは直交行列なので、[b]RS=I[/b](単位行列)[br]また、どちらももとのベクトルに対して行列をかけるだけだから、[br][b]連続的な回転は、行列の積で実現できる。[br][/b][br]具体的な設定で3D回転を4元数でやってよう。[br][br]#位置ベクトルkをj(y軸)を軸にπ/2回転する場合[br]n=(0,j,0),r=(x,y,z)[br]q=cosπ/4+nsinπ/4=1/√2(1+j)[br]k'=1/√2(1+j) k 1/√2(1-j)=1/2(1+j)(k-kj)=1/2(k+jk-kj-jkj)[br]=1/2(k+jk+jk-k)=jk=i[br]k(z軸上)が90度回転して、i(x軸上に移動する)[br][br]#位置ベクトル3j(y軸上)を直線y=xを軸にπ回転する場合[br]n=(1/√2,1/√2,0),r=(x,y,z)[br]q=cosπ/2+1/√2(i+j)sinπ/2=1/√2(i+j)[br](3j)'=1/√2(i+j) 3j 1/√2(-i-j)=-3/2(i+j)(ji+jj)[br]=-3/2(i+j)(-k-1)=3/2(ik + i +jk +j)=-3/2(ki+kj-i-j)[br]=-3/2(j-i-i-j)=3i(x軸上)[br]基底ベクトルの積のルールから、回転の行先がわかるね。[br]予想どうりの結果になりましたね。[br][br][size=150][b]<回転の合成>[br][/b][/size][br]剛体Pの進行方向の方向ベクトルをp=[[px],[py],[pz]]とする。[br][b]z軸を中心にPをγ(ヨー角)回転[/b]するとき、cosをc、sinをsとかくと、[br]Rz={{cγ, -sγ, 0}, {sγ, cγ,0 }, { 0,0,1}}だった。[br]同様にして、[br][b]y軸を中心にPをβ(ピッチ角)回転[/b]するとき、[br]Ry={{cβ,0, sβ}, {0, 1,0 }, { -sβ,0,cβ}}となり、[br][b]x軸(ベクトルp)をα(ロール角)回転して姿勢変化[/b]するとき、[br]Rx={{1,0,0}, {0,cα,-sα }, { 0,sα,cα}}となる。[br][br]回転の合成によって、[br][b]G=Rz◦Ry◦Rx=[br][size=150][color=#0000ff][[cγcβ, cγsβsα-sγcα, cγsβcα+sγsα],[br] [sγcβ, sγsβsα+cγcα, sγsβcα-cγsα],[br] [-sβ, cβsα , cβcα ]][br][/color][/size][/b][br]となる。[br]また、4元数のまま積を求めることもできる。[br]成分で表すと[br]rz=(c(γ/2),0, 0, s(γ/2)), ry=(c(β/2),0,s(β/2),0),rx=(c(α/2),s(α/2),0,0)[br]G=(c(γ/2),0, 0, s(γ/2))(c(β/2),0,s(β/2),0)(c(α/2),s(α/2),0,0)[br][color=#0000ff][b][size=150]= ( [br] c(γ/2) c(β/2) c(α/2 ) + s(γ/2)s(β/2)s(α/2),[br] c(γ/2)c(β/2)s(α/2)-s(γ/2)s(β/2)c(α/2),[br] c(γ/2)s(β/2)c(α/2)+s(γ/2)c(β/2)s(α/2),[br] s(γ/2)c(β/2)c(α/2)-c(γ/2)s(β/2)s(α/2))[br][/size][/b][/color][br]4元数を成分として表した方が、cとsの双対ペア表現が見られるね。[br]3次行列SO3(特殊直交3次行列)の方が実用的ではあります。[br][br]どちらで計算しても、位置ベクトルpは[br][b]p = G (0, 1, 0, 0) G∗ = (0, cγcβ, sγcβ,−sβ)[br][/b][br]つまり、pの成分にはαが出てきません。[br]当然ですが、[b][color=#0000ff]剛体Pの向きは姿勢変更角αの影響を受けてない[/color][/b]ことがわかりますね。[br]
3.振り返り
[b][size=150]<振り返り>[/size][/b][br]こんなに4元数の計算がうまくできた理由は何だろう。[br]振り返ってみよう。[br][br]4元数の積が外積ー内積で定義されるという、単純明快なルールがあったから。[br]3つの基底i,j,kの積の交代性と2乗がー1になることはそのルールから導けたから。[br]共役がベクトル部の符号反転であることは複素数と似ていて違和感なく使えたから。[br][br]なによりも大きかったのは、[br][br]単位ベクトルnを軸にθ回転がq=e^{n θ/2}=cos θ/2 + n sin θ/2とかけることだった。[br]しかし、肝心のこの事実は天下りで使い、検証すらしていなかった。[br]r'=qrq*で2回かけているからθ/2でいいだろうくらいにしていた。[br]軸にする単位ベクトルをn=(ux,uy,uz)とするとき、[br]4元数q=(cosθ/2,ux sinθ/2,uy sinθ/2,uz sin θ/2)=(q0,q1,q2,q3)とおけば、[br]4元数r=(0,x,y,z)として、r'=qrq*を展開整理するとロドリゲスのθ回転の公式と[br]一致する。ロドリゲスの公式自体は、ベクトルの外積と内積から導くことができる。[br][br][color=#0000ff][u][b][size=150]課題:4元数成分の数式が回転後の3D座標になることを確認しよう。[br][/size][/b][/u][/color][br]タイトルは「目でみるロドリゲスの公式」[br]θ = Slider(0, 2π, 0.01) #回転角(これだけアニメーションにします。)[br]α = Slider(0, 2π, 0.01) #回転軸の傾き[br]β = Slider(-π/2, π/2, 0.01)[br]n = (cos(β)*cos(α), cos(β)*sin(α), sin(β)) #単位回転軸ベクトルn[br]R = (1, 2, 3) #回転させたい点[br]Vector((0,0,0), R) #位置ベクトルR[br][br]#4元数成分(q0, q1, q2, q3)[br]q0 = cos(θ / 2)[br]q1 = x(n) * sin(θ / 2)[br]q2 = y(n) * sin(θ / 2)[br]q3 = z(n) * sin(θ / 2)[br]x_p = (q0^2 + q1^2 - q2^2 - q3^2)*x(R) + 2*(q1*q2 - q0*q3)*y(R) + 2*(q1*q3 + q0*q2)*z(R)[br]y_p = 2*(q1*q2 + q0*q3)*x(R) + (q0^2 - q1^2 + q2^2 - q3^2)*y(R) + 2*(q2*q3 - q0*q1)*z(R)[br]z_p = 2*(q1*q3 + q0*q2)*x(R) + 2*(q2*q3 + q0*q1)*y(R) + (q0^2 - q1^2 - q2^2 + q3^2)*z(R)[br]R' = (x_p, y_p, z_p)[br]Vector((0,0,0), R') #回転後のベクトルR'[br]Circle((R n) n, Distance(R, (R n) n), n)#R'の軌道円(設定は点線)[br][br]見た目は、点がきれいに動くだけのことだけれども、[br]やっている内容はすごいですね。[br]4元成分を関数式扱いにして、そのまま3Dの座標にうまく入れ込んでいるのですからね。[br][br]詳しい計算は省きますが、4元数の積qrq^* を代数的に計算すると[br][b]たとえば、iを軸に回転したとき、r=xi+yj+zkをサンドイッチして、線形にわけると、[br]xiのサンドは何もしないと同じになるのですが、yj+zkのサンドは左からのかけ算と右からのかけ算が同じ方向として重なりあい、θ回転を生みます。[br][/b]「挟み込むことで、軸方向を変えずに垂直面だけを綺麗に2倍(θ/2 + θ/2 = θ)回転させるフィルターとして機能している」という事実が、ロドリゲス公式との一致から一目瞭然になりますね。[br][br]
目でみるロドリゲスの公式

同次座標を使って並進を行列のかけ算で表そう

このページは[url=https://www.geogebra.org/m/ddm5798j]マス旅[/url]の一部です。[br][br]同次座標の仕組みを知ることで並進を行列の積で実現しよう。[br]
1.同次座標は空間の串刺しだ
同次座標は空間の串刺しだ[br][br][b][size=150]<同次座標と直線>[br][br][/size][/b]次元を1つふやして比例による串刺しで表す座標を同次座標といいます。[br]たとえば、[br]2次元の[b]点A(a,b)[/b]は、1次元増やした点(a,b,1)と原点を通る直線[b]t(a,b,1)=(ta,tb,t)[/b]を同一視します。[br]3次元の[b]点A(a,b,c)[/b]は、1次元増やした点(a,b,c,1)と原点を通る直線[b]t(a,b,c,1)[/b]と同一視します。[br]このとき、[b]連比[/b](ta:tb:t)=(a1:a2:t),(ta:tb:tc:t)=(a1:a2:a3:t)をもとの点Aの[b]同次座標[/b]と言います。[br][b]同次座標を列ベクトルで表す[/b]と(a,b)=[a1,a2,1]t,(a,b,c)=[a1,a2,a3,1]tとかきます。[br][b]丸カッコが通常座標[/b]の列ベクトル、[b]角カッコが同次座標[/b]の列ベクトルということです。[br] [br][b][size=150]<平行移動の同次座標表示>[br][/size][/b][br]たとえば、3次元の点A(a)をベクトルpだけ[b]平行移動(並進)[/b]したときの点B(b)は[br]ふつうならば、v+u=(a,b,c)+(u1,u2,u3)=(a+u1,b+u2,c+u3)と成分のたし算でかきます。[br]しかし、これを次元を1つつけたして同次座標でかくと、行列の積で表現できるのです。[br]今後ベクトルの積は内積だけなので、[b]ドット記号などは省略[/b]します。[br]また、行列とベクトルの積も内積の多次元化と考えられるので、[b]積記号は省略[/b]します。[br]そして、[b]行列は{{行ベクトル}....{行ベクトル}}か{[列ベクトル]...[列ベクトル]}[/b][br]という表示をすることで、テキスト表示をします。[br]ただし、[b]{E3,p}[/b]は3次の単位行列の右に列ベクトルをくっつけた[b]3行4列の行列の断片(胞)[/b]を表します。[br]また、geogebraの流儀に合わせて、変数としては[b]ベクトルは小文字で、行列は大文字[/b]とします。[br][b][color=#0000ff]脳内でtexに置き換えて読んでください[/color][/b]。[br][br][b]b=a+p[size=150][color=#0000ff]=(a+u1,b+u2,c+u3)=[a+u1,b+u2,c+u3,1]t[/color][/size][/b][br]  =[ta+tu1,tb+tu2,tc+tu3,t][br] =[a1+tu1,a2+tu2,a3+tu3,t][br] ={{1,0,0,u1},{0,1,0,u2},{0,0,1,u3},{0,0,0,1}}}[a1,a2,a3,t][br][b][color=#0000ff][size=150] ={{E3,p},{0,0,0,1}}[a1,a2,a3,t][br][/size][/color][/b] [b]=S a'[/b][br]つまり、点Aをベクトルpだけ平行移動した点Bの位置は[br]第4の座標tを適当に決めましょう。[br]3次の単位行列E3のとなりに移動列ベクトルpをくっつけて4行目に{0,0,0,1}をくっつけた行列Sを作る。[br]Sは3行4列の行列の断片の下に1行4列の行列の胞をくっつけたので、4行4列の行列、[br]4次の正方行列になりますね。[br]そして、Aの列ベクトルaをtを使って同次座標にしたa'にする。[br]Sとa'の積がBの同次座標になるので、それをさっきのtで割ってあげれば、最初の3つの成分がa+pの成分になるということですね。[br][br][color=#9900ff][b][u][size=150]課題:geogebraで空間内の点A(3,4,5)をp=(3,2,1)並進した点の位置を行列の積で求めよう。[br][/size][/u][/b][/color][br]タイトルは「並進をたし算ではなく、かけ算で求める」[br]A=(3,4,5)[br]t=slider(-10,10,1)[br]p=(3,2,1) #位置ベクトルとして表示されるので非表示[br]a=(3,4,5) #点Aをさします。[br]u=a+p #(6,6,6)の列ベクトルが表示されます。[br]ad={{3t},{4t},{5t},{t}) #ad=(3t,4t,5t,t)と入力すると4次元目が無視されます。[br]S={{1,0,0,x(p)},{0,1,0,y(p)},{0,0,1,z(p)},{0,0,0,1}}[br]m1=S ad[br]b1=Element(m1,1,1)/Element(m1,4,1)[br]b2=Element(m1,2,1)/Element(m1,4,1)[br]b3=Element(m1,3,1)/Element(m1,4,1)[br]B=(b1,b2,b3) #点Bはベクトルuで指されます。[br][br]tを動かしてみましょう。特に変化はないですね。[br][br]でも[br][b]t=0になった瞬間点Bが消えます。[/b][br]なぜでしょうか。Bのもとになったm1を見てください。[br]同次座標は[列ベクトル]tで表されました。[br]だからオールゼロになっていますね。[br][br]これを復元しようとすると、点Bの座標であるb1,b2,b3を求めるときに、0による除算が起きます。[br][b]同次座標の空間にはオールゼロは許されない[/b]ということですね。[br]言い換えると、[br]同次座標空間のオールゼロはあらゆる直線が通るため、[b]方向すらない、空間全体を指すので「不定」[/b]です。これを通常座標に変換すると、0/0による除算でどの成分も「不定」、未定義になります。[br][br]同次座標空間の[b][x,y,z,0]は方向はあるけれど大きさが無限大だから「無限遠点」[/b]を表しますね。
並進をたし算ではなくかけ算で求める。
2.行列といえば、逆行列を考えたくなる
[br]並進といえば後退を、[br]行列といえば逆行列を考えたくなるね。[br][br]さっきの例でいうと、[br]p=(3,2,1)の逆進はpr=-(3,2,1)だ。これを表す行列はpの部分がprにすればよいね。[br]bにprをたせば、もとのaに戻れるはずだ。[br][b]a=b+pr={{E3,pr},{0,0,0,1}}[a1,a2,a3,t][br] =Sr b'[br][/b]Sのベクトルpを逆ベクトルprにおきかえて作った行列Srは本当に逆行列になるのだろうか。[br]積S・Srが単位行列になればよいね。[br][br]S・Sr={{1,0,0,u1},{0,1,0,u2},{0,0,1,u3},{0,0,0,1}}{{1,0,0,-u1},{0,1,0,-u2},{0,0,1,-u3},{0,0,0,1}}[br]={{1,0,0,u1},{0,1,0,u2},{0,0,1,u3},{0,0,0,1}}{[1,0,0,0],{0,1,0,0},{0,0,1,0},[-u1,-u2,-u3,1]}[br]={[br] [{1,0,0,u1}(1),{0,1,0,u2}(1),{0,0,1,u3}(1),{0,0,0,1}(1)]. [br] [{1,0,0,u1}(2),{0,1,0,u2}(2),{0,0,1,u3}(2),{0,0,0,1}(2)],[br] [{1,0,0,u1}(3),{0,1,0,u2}(3),{0,0,1,u3}(3),{0,0,0,1}(3)},[br] [{1,0,0,u1}[-u1,-u2,-u3,1],{0,1,0,u2}[-u1,-u2,-u3,1],{0,0,1,u3}[-u1,-u2,-u3,1],{0,0,0,1}[-u1,-u2,-u3,1]][br] }[br]={[1,0,0,0],[0,1,0,0],[0,0,1,0],[br] [-u1+u1,-u2+u2.-u3+u3,1]}[br][b]=E4[br][/b][br]単位行列になりますね。[br][br]もっと簡単に検証できないでしょうか?[br]胞体のままかけてみよう。[br]{0,0,0}=Oと行ベクトルの胞にします。綺麗に4胞×4胞になりすね。[br]pは列ベクトルのまま入れます。紛らわしので、ベクトルの先頭に行、列という文字をつけます。[br][b][color=#0000ff]サイズが3のときは、列ベクトル×行ベクトルは3×3行列になり、[br]行ベクトル×列ベクトルは内積でスカラーになることに注意しよう。[br][/color][/b][br]S Sr={{E,列p},{行O,1}}{{E,-列p},{行O,1}}[br]={{E,列p},{行O,1}}{[E,行O],[-列p,1]} [br][br]左上=EE+列p行O=E+3行3列O=E(3行3列)[br]左下=行OE+1*行O=行O+行O=行O(1行3列)[br]右上=E(-列p)+列p*1=-列p+列p=列O(1列3行)[br]右下=行O(-列p)+1*1=0+1=1(スカラー)[br][br]だから[br][b]S Sr={[E,行O],[列O,1]}[br]=E4[/b]
3.変換と表現
[b]<振り返り>[/b][br][br]ちなみに、「SやSrはアフィン変換をしている」という人がいます。[br]どういうことでしょうか。[br][br]これまでは、変換とその表現である行列をあまり区別せずに、コトバを使ってきた。[br]振り返りを兼ねて、コトバの使い方の視点で変換と表現をざっと見てみよう。[br][br][b]「合同」変換[/b]というのがあります。[br]図形を合同な図形に移すことだね。[br]平行移動(ずらす)、回転移動(まわす)、対称移動(うらがえす)の3種類があるね。[br]これらの合成も、証明するまでもなく合同変換だ。[br][br]また、[br][b]「相似」変換[/b]というものがあります。[br]図形の形を変えず相似な図形に移すことだ。[br]拡大縮小(向きを変えずにスクリーンに映す)、相似回転(等角らせん)、対称移動の3種類があり、この組み合わせも相似変換だ。[br][br][b]合同でも相似でもない「平行投影」[/b]というものがあります。[br]平行光線によって影を作ることに相当しますよ。[br]ガラス窓の影が床に移る、空間内の図形を平面や軸上に[b]正射影[/b]するなどです。[br][color=#0000ff][b][size=150]辺の比は保存されます。平行も保存されます。[/size][/b][/color][br][br]さて、2つの平面E,E'があり、Eの点P(x,y)をE'の点P'(x',y')に移す変換で、[br][b]x’=ax+by+k[br]y'=cx+dy+l (ad-bc≠0)[br][/b][br]となるものをアフィン変換という。[br]これをベクトル行列方式で表すと[br][b]x’=Ax+p(Aの行列式が非ゼロで、pが並進)[/b][br]x、x’が3次元ならば、Aは3次の正方行列になり、[br]y、y’が4次元ならば、Aは4次の正方行列になる。[br]a,b,c,dがどうであれ、Aが正則だから常識的な世界です。これが[b]アフィン変換[/b]ですね。[br][br]また、[br][b]「射影」変換[/b]というものがありますね。[br]点光源によってスクリーンに影を作ることに相当しますね。[br]要するに、投影図法のことですね。[br]投影図では、直線は直線に移りますが、[b]平行関係は維持できません[/b]。[br][b]だから、辺の比もゆがみます。(複比は保存)[/b][br]しかし、だからこそ、平面図形の辺の比についての定理がからむおもしろい世界です。[br][br]さっきの[b]アフィン空間[/b]に1つの点(無限遠点)をくっつけ[b]射影空間[/b]を作ります。[br]これが、[b]同次座標[/b]だったのです。[br]つまり、ゼロベクトル以外の点を分類した点を射影空間の点といい、その点のあつまりを射影空間というのです。ゼロベクトル自体は不定を表す。[br][br]さっき作った行列S,Srは4次の同次座標を同次座標に変換する線形変換でした。[br]これは、「形式的」には「射影変換」です。[br]しかし、「意味的」には、[b]3次のアフィン空間の点を並進[/b]しているので、[br][b]「アフィン変換」を表す「表現」[/b]になっていますね。

対称性のある等式・不等式

このページは[url=https://www.geogebra.org/m/ddm5798j]マス旅[/url]の一部です。[br][br]今回は[b]「対称性(双対性、同次性、サイクリックなど)」[/b]がある数式を観察してみよう。
1.ウォーミングアップ
ウォーミングアップ[br][br][b][size=150]<ガウス少年>[/size][br][/b]対称性といえば、[br]ガウス少年の1から100までの和を求める数式が有名だね。[br]1から9までの和をSとすると、[br][b] S = 1 + 2 + 3+ 4 + 5 + 6 + 7 + 8 + 9[br] S = 9 + 8 + 7+ 6 + 5 + 4 + 3 + 2 + 1[br]2S=10+10+10+10+10+10+10+10+10=10×9=90[br][/b]S=90/2=45ですね。[br]1つの式を逆順にしたものを並べて、[b][color=#0000ff]「点対称に配置する」[/color][/b]ことがポイントだ。[br]単調増加や要素出現の対等性が、対称性のベースにあることが感じられるね。[br][br][b][size=150]<ウィルソンの定理>[/size][/b][br]「[b]任意の素数pに対して(p-1)!+1≡0(mod p)[/b]」がウィルソンの定理だった。[br]たとえば、p=7のときは、1×2×3×4×5×6+1≡0(mod 7)[br]素数のかけ算表を作ると1が単位元で、2×4≡3×5≡1、1×1≡6×6≡1(mod 7)のように[br]1から6までの単調増加数列の両端は2乗が1となり、残りはペアが1になる。[br][br]だから、2から5までの積は1になるので、1から6までの積は6と合同になる。[br]つまり、(p-1)!=p-1(mod p)のように、階乗記号がはずれるね。[br]これから、(p-1)!+1≡p-1+1=p≡0(mod p)となる。[br]綺麗な点対称ではないけれど、[b][color=#0000ff]「要素出現の対等性とペアが重複しないこと」[/color][/b]がポイントだね。[br][br][b][size=150]<相加平均は相乗平均以上>[br][/size][/b]「[b](a+b)(b+c)(c+a)≧8abc [/b]」というサイクリック、対等出現、次数が両辺とも3次という不等式。[br]3種の文字を2種にすれば、「[b](a+b)≧2√ab(相加平均が相乗平均以上)[/b]」という式ができるね。[br]この不等式自体は両辺2乗の差が平行完成できるから0以上ということで、簡単に証明できるし、[br]等号はa=bに限ることも自明だ。[br][br]これを文字を[b]「サイクリックに変えていく」[/b]と、[br](b+c)≧2√bc、[br](c+a)≧2√caと[br]全部で3式できる。[br]だから、辺々かければ右辺は8√(abc)^2=8abcになる。[br]証明終わり。なお、等号はa=b=cに限る。[br][br][b][size=150]<3文字の因数分解>[br][/size][/b]「[b]a^3+b^3+c^3-3abc[/b]」の因数分解。a,b,cについて対等で次数が3次の式だね。[br]だから、(a+b+c)を因数にもつことが予想できる。[br][b][color=#0000ff]「あえて対称性をくずす」[/color][/b]作戦でやってみよう。[br][br]a=xとおき、xの3次式の係数をならべると、[br](1,0,-3bc, b^3+c^3)となるね。これが(a+b+c)つまり(1, b+c)で割り切れるはずだ。[br]係数分離法で割り算してみよう。[br](1,0,-3bc, b^3+c^3)÷(1, b+c)は、最初の商は1で、余りは(-b-c,-3bc, b^3+c^3)[br](-b-c,-3bc, b^3+c^3)÷(1, b+c)は、最初の商は-b-cで、[br] 余りは((b+c)^2-3bc, b^3+c^3)=(b^2+c^2-bc, b^3+c^3)[br](b^2+c^2-bc, b^3+c^3)÷(1, b+c)は、最初の商はb^2+c^2-bcで、[br]余りはb^3+c^3-(b+c)(b^2+c^2-bc)=-(bc^2+cb^2)+(b+c)bc=0となり割り切れた。[br]だから、商は(1,-b-c,b^2+c^2-bc)。これは、x^2,x,1つまり、a^2,a,1の係数だから[br]商は1*a^2+(-b-c)a+(b^2+c^2-bc) *1=a^2+b^2+c^2-ab-bc-caとサイクリックになる。[br]a^3+b^3+c^3-3abc=(a+b+c)(a^2+b^2+c^2-ab-bc-ca)
2.コーシー・シュワルツの不等式
美しく役に立つ不等式といえば、[br][b][size=200]「コーシー・シュワルツの不等式」があるね。[br][/size][/b][br](x_1^2+x_2^2+....+x_n^2)(y_1^2+y_2^2+....+y_n^2)≧(x_1 y_1+x_2 y_2+....+x_n y_2)^2[br][br][color=#0000ff][b][size=200](Σxi^2)(Σyi^2)≧(Σxiyi)^2[/size][/b][/color][br][br]等号はxi/yiがすべて等しいとき。[br][br]これを2次元に制限したものは、[br][b](a^2+b^2)(c^2+d^2)≧(ac+bd)^2[br][/b]もし、ブラーマグプタ・フィボナッチ恒等式、[b](a^2+b^2)(c^2+d^2)=(ac+bd)^2+(ad-bc)^2[/b][br]を知っていると、当たり前の式に感じられれるかもしれないね。[br][br][b][size=150]<証明1>[br][/size][/b]2つのベクトルX=(x_1,x_2,....,x_n)とY=(y_1,y_2,....,y_n)があるとき、[br]内積はX・Y=(Σxiyi)[br]ノルムは|X|=√(Σxi^2)、|Y|=√(Σyi^2)となるね。[br]内積の成分を使わない定義から、X・Y=|X||Y|cosθがいえる。(cosθ)≦1なので、[br](X・Y)^2≦(|X||Y|)^2だ。ここで、成分を使う式に置き換えると、[br](Σxiyi)^2≦(√(Σxi^2)√(Σyi^2))^2=(Σxi^2)(Σyi^2)[br]証明終わり。等号は2ベクトルのなす角θが0のときだから、XがYの定数倍になるとき,各成分についてyi=kxiとなる定数kがあるときに限る。[br][br][b][size=150]<証明2>[br][/size][/b](x_1^2+x_2^2+....+x_n^2)(y_1^2+y_2^2+....+y_n^2)≧(x_1 y_1+x_2 y_2+....+x_n y_2)^2[br]左辺の展開ー右辺=Pとする。[br]Pの項はたとえば、x_i,y_j(i=1,2, j=1,2)だけ取り出すと、[br]x_1^2 y_1^2+x_1^2 y_2^2+x_2^2 y_1^2+x_2^2 y_2^2[br]-[(x_1 y_1)^2+(x_2 y_2)^2+2 x_1 y_1x_2 y_2][br]=x_1^2 y_2^2+x_2^2 y_1^2 - 2 x_1 y_1x_2 y_2[br]=(x_1 y_2 - x_2 y_1)^2のように平方完成できる。[br][br]Pには、x_i, y_jのi,jを1からnまで動かすと、i,jが異なるペアnC2組だけの(x_i y_j-x_j y_i)^2ができる。[br]Pは平方完成の和だから、ゼロ以上である。証明終わり。[br]等号はカッコ内がすべてゼロ、異なるijについてx_i y_j=x_j y_iがすべて成り立つときだから、各成分の比が一定のときに限る。[br][br][color=#9900ff][b][size=200]#ここからはコーシー・シュワルツのありがたさ#[br][/size][/b][/color][br]不等式の証明に使えます。[br][br][b][size=150]<複素数の三角不等式>[br][/size][/b]任意の複素数z1,z2について、|z1+z2|≦|z1|+|z2|[br]z1=a+bi, z2=c+diとすると、[br]左辺の2乗ー右辺の2乗=(a^2+b^2)(c^2+d^2)-(ac+bd)^2≧0。[br]これは2次元のコーシー・シュワルツの不等式そのものです。[br][br][b][size=150]<3次元のコーシーシュワルツの不等式の変形>[br][br][/size][/b](a^+b^2+c^2)(x^2+y^2+z^2)≧(ax+by+cz)^2[br][br]変数x,y,zは変数a,b,cと[b]無関係に選べること[/b]に着目しましょう。[br]x=b,y=c,z=aとおくと[br](a^+b^2+c^2)(b^2+c^2+a^2)≧(ab+bc+ca)^2[br](a^+b^2+c^2)^2≧(ab+bc+ca)^2[br]両辺の平方根にします。[br][b](a^+b^2+c^2)≧(ab+bc+ca)[br][/b][br]a=b=c=1とするだけで、[br][b]x^2+y^2+z^2≧(x+y+z)^2/3[br][/b]ベクトルX=(x,y,z)のノルムの2乗の下限が成分の和の2乗/3と分かる。[br][br]2乗するとゼロ以上になるので、正数の合計の下限がわかる。[br]たとえば、(a^2、b^2、c^2、x^2、y^2、z^2)=(A,B,C,D,E,F)とおくと、[br](a、b、c、x、y、z)=(√A,√B,√C,√D,√E,√F)だから、[br][b](A+B+C)(D+E+F)≧(√AD+√BE+√CF)^2[br][/b]と2組の3数の和の積の下限がわかる。[br][br][b][size=150]<相関係数はベクトルのなす角のコサイン>[br][/size][/b][br]コーシーシュワルツ不等式はデータ分析にもつながる。[br]2項X,Yについてのx偏差とy偏差の積の平均Sxyを、xyの共分散(covariance)という。[br][math]Sxy=\frac{1}{n}\sum\left(x-m_x\right)\left(y_{ }-m_y\right)[/math][br]xy平面を平均値を表す2直線x=m_x, y=m_yによって4種のデータ領域に区分できるね。[br]偏差X=x-m_x,偏差Y=y-m_yとすると、X、Yともに正だとXYも正、X,Yのともに負でもXYが正になる。[br]この2領域にデータの大半があるならば、データ全体は(X,Y)=(0,0)を通る右上がりの[br]直線に多く分布するから、共分散が正で絶対値が増えると正の相関が高いことに対応する。[br]逆に、X,Yの正負が反対の場合は、平均からのXの変位とYの変位が逆になるデータが多くなり、[br]積XYが負のデータが多くなる。だから、XY総和の平均である共分散が負になっていく。[br][br]相関係数rは2量の共分散Sxyを2変量の標準偏差の積SxSyで割った商。[br] r=[math]\frac{1}{n}\sum\left(x-m_x\right)\left(y-m_y\right)\cdot\frac{1}{\sqrt{\frac{1}{n}\sum\left(x-m^x\right)^2}\sqrt{\frac{1}{n}\sum\left(y-m_y\right)^2}}=\frac{\sum\left(x-m_x\right)\left(y-m_y\right)}{\sqrt{\sum\left(x-m_x\right)^2}\sqrt{\sum\left(y-m_y\right)^2}}[/math][br][br][b]「相関係数の絶対値は1以下である」[/b]という性質がある。[br]n人のXとYの偏差データを、n要素をもつaベクトル、bベクトルとする。[br]r=Sxy/(SxSy)=[math]\frac{\left(a\cdot b\right)}{\parallel a\parallel\parallel b\parallel}[/math]=cosθ (θは2つのベクトルの作る角)[br]相関係数の絶対値が1以下だというのは多次元データ空間のコーシーシュワルツの不等式そのものです。[br][br][b]r=1のとき、 θ=0(最大の正の相関)2つのベクトルは同じ向きに重なる。[br]r=0のとき、θ=90°(無相関)。[br]r=-1のとき、θ=180°(最大の負の相関)2つのベクトルは逆向きに1直線。[br][/b][br][color=#0000ff]rはー1以上1以下の連続量なので、[b]データベクトルの類似度[/b]を表せます。[br][/color][br]AIなどの言語データをベースにするシステムでは、コトバの意味をベクトルで表します。[br]だから、コトバとコトバの類似度をこのrで求めることによって、意味の近さを判断して次にくるコトバを選ぶなど、「[b]AIのコトバの選択[/b]」を支援するのに使われたりもしてますね。
3.チェビシェフの不等式
単調増加する2系統の数列ai,biがあるとき[br][color=#0000ff][b][size=150](1/nΣa_ib_i)≧(1/nΣa_i)(1/nΣb_i)[br][/size][/b][/color]つまり、[br][b][color=#0000ff][size=150]「積の平均は平均の積以上、平均の積は積の平均以下」[/size][/color][/b][br]というのがチェビシェフの不等式だ。[br]等号は、数列が定数数列のときに限る。[br]単調増加が対称性につながる。[br][b]買い物イメージ[/b]で考えると当たり前の結果だ。[br][color=#0000ff][b]「お菓子屋さんに行って好きなチョコを6個買いに行くとする。[br]100円、200円、300円の3種類から選ぶなら、300円をまるごと6個買うのが一番高くつく。[br]もし、3種類を全部混ぜるけど、1個、2個、3個のように差をつけて買うことにする。」[/b][/color][br]一番安いのは100×3+200×2+300×1=1000 (円)の買い物で、[br]一番高いのは100×1+200×2+300×3=1400 (円)の買い物になる。[br]チョコの平均単価は(100+200+300)/3=200(円)[br]チョコの平均個数は(1+2+3)/3=2(個)[br]チョコの最高代金は100×1+200×2+300×3=1400(円)。[br]1個当たりの平均代金は1400/3= 466.7[br]これ以外の買い方をしても、この代金には達しない。[br][b]平均の積は200×2=400で、積の平均は466.7だから、[br]平均の積は、積の平均以下になっている。[br][/b]これを一般化すると、[br](1/nΣa_i)(1/nΣb_i)≦(1/nΣa_ib_i)となるはずだ。[br]もともと単調増加数列のペアがあること、[br]そして、このペアを壊さずにかけ算した積の平均が、平均の積の最大値になるということだね。[br][br][b][size=150]<証明1>[/size][/b][br]あらゆる差のペアの合計Pを考えてみよう。[br]そのために適当な2ペアを取り出す[br]2ペア(a_i,b_i)(a_j,b_j)だ。[br]この差のペアを作るDij=(a_i-a_j)(b_i-b_j)[br]aもbも単調増加なので、jがi以上ならば、a_i-a_jも、b_i-b_jも0以下だから、積Dijは0以上となる。[br]iがj以上ならば、a_i-a_jも、b_i-b_jも0以上だから、積Dijは0以上となる。[br]だから、いずれにしても、Dijは0以上となるね。[br]その総和であるPも0以上になる。[br]i,jを1からnまで無関係に動かすと、[br]P=ΣΣDij=ΣΣ(a_i-a_j)(b_i-b_j)[br]=ΣΣ(a_ib_i-a_jb_i-a_ib_j+a_jb_j)=nΣ(a_ib_i)-2ΣΣa_ib_j+nΣ(a_jb_j)[br]=2(nΣ(a_ib_i)-(Σa_iΣb_j))[br]だから、nΣ(a_ib_i)≧(Σa_iΣb_j)が言える。[br]これから、(1/nΣaibi)≧(1/nΣai)(1/nΣbi)[br][br][size=150][b]<証明2>[/b][/size][br]n=2のとき、[br]2(ax+by)-(a+b)(x+y)=ax+by-ay-bx=(a-b)(x-y)≧0[br]n=3のとき、[br]3(ax+by+cz)-(a+b+c)(x+y+z)[br]=(ax+by-ay-bx)+(by+cz-bz-cy)+(cz+ax-cx-az)=(a-b)(x-y)+(b-c)(y-z)+(c-a)(z-x)≧0[br]一般に、nΣ(a_ib_i)-Σa_iΣb_j)の展開は、[br]前半からa_ib_j(i=j)がn項できて、係数がnになる。[br]後半からa_ib_j(i,jが独立に変化)がn^2項できるが、[br]iとjが別なのがn^2-n=n(n-1)項あり、-a_ib_jと-a_jb_iの2項を1組にすると、n(n-1)/2組できる。[br]iとjが同じものは、前半と同数のn項あり係数が1だから、前半ー後半で、n-1が係数でn項できる。[br]さて、このi=jのn項の係数n-1を係数1にして、反復して書き出すとn(n-1)項できる。[br]これをn(n-1)/2組に配分すると、n(n-1)/(n(n-1)/2)=2項ずつ割り当てることができる。[br]それが、a_ib_iとa_jb_jだ。[br]これから、任意の組は-a_ib_jと-a_jb_i+a_ib_i+a_jb_j=(a_i-a_j)(b_i-b_j)となり、証明1と同様に0以上となる。だから、値が0以上の組の合計は0以上。[br][br]証明1が部分からの積み上げだとすると、証明2は部分への分解になっている。[br]どちらも同じ部分を使うけれど、方向性が逆なのが面白いね。[br][color=#9900ff][b][u][size=150][size=200]#チェビシェフ不等式のお役立ち#[br][/size][/size][/u][/b][/color][b][size=150]<積和の最大化するには大小の順位が同じペアで>[br][/size][/b]利益率の部門のランキングと生産性の高い人材のランキング。[br]学習効率の高い科目のランキング、学習効率の高い時間帯のランキング。[br]積の大きいものが価値が高いときはランキングの高いもの同士をかけます。[br]このように、組み合わせの最適化によって、ポートフォリオ効果をねらいます。[br]これは説得力がありますね。[br][br][b][size=150]<積最大化は要素を等しくする>[br][/size][/b]aが増加数列で、bが減少数列だと、その順で積を作るときが最初になります。[br]これが逆順チェビシェフ不等式です。[br][b](1/nΣa_ib_i)≦(1/nΣa_i)(1/nΣb_i)[br][/b]直方体の3辺が単調増加でa,b,cだとします。直方体の体積はV=abc。[br]辺の対面の面積は、bc,ca,abで単調減少になります。直方体の表面積はS=2(bc+ca+ab)です。[br]辺×対面の合計はabc+bca+cab=3abc=3Vです。[br]辺の数列と面の数列を逆順チェビシェフ不等式にあてはめましょう。[br]nΣ辺×面≦Σ辺Σ面ですから。[br][b]3(3V)≦(a+b+c)(bc+ca+ab)=(a+b+c)S/2[br]9V≦(a+b+c)S/2[/b]ですね。[br]a+b+c=6として、実験します。[br](a,b,c)=(1,2,3)のとき、S/2=(1×2+2×3+3×1)=11,V=1×2×3=6。[br]9V=54, (a+b+c)S/2=66なので、54<66で成り立ちます。[br](a,b,c)=(2,2,2)なら、、S/2=(2×2+2×2+2×2)=12,V=2×2×2=8。[br]9V=72, (a+b+c)S/2=72なので、72=72で成り立ちます。[br]直方体の辺の和a+b+c を一定としたとき、[br][b][color=#0000ff]立方体(a=b=c)のときにVが最大化(あるいは等号成立)する[br][/color][/b]ということです。[br][b][size=150]<共分散を正にする>[br][/size][/b](1/nΣa_ib_i)≧(1/nΣa_i)(1/nΣb_i)[br]この左辺はa_i,b_iを偏差X,Yと見ると、共分散そのものです。[br]右辺は、偏差Xの数列も、偏差Yの数列の変化が増加どうしか減少どうし、[br]つまり、同方向に変化するときは正になります。[br]ということは、共分散は2種のデータの増減が同じ方向に変化するときに正になる[br]ということがチェビシェフ不等式が支持してくれているのです。[br][br][b]<振り返り>[br][br][/b][b]複雑に見える数式も、「どのような対称性があるか」という視点を持つと、[br]いろんな使い道があることがわかるね。[br][/b][br][color=#9900ff][b][u][size=150]課題:2種のデータの変動の仕方で共分散、相関係数の変化を感じよう。[br][/size][/u][/b][/color][br]タイトルは「データの変動の特徴と[size=150][size=100]共分散、相関係数」[/size][/size][br]#単調増加数列のペア[br]a={1,2,3,4,5}[br]b={1,3/2,9/4,27/8,81/16}[br]#一定数列のペア[br]p={2,2,2,2,2}[br]q={3,3,3,3,3}[br]#ランダム整数のペア[br]s= RandomBetween(1, 10, 5)[br]t= RandomBetween(1, 10, 5)[br]Xs={a,p,s}[br]Ys={b,q,t}[br]num=slider(1,3,1)[br]X=Element(Xs,num)[br]Y=Element(Ys,num)[br][b]XY=Zip((p,q),p,X,q,Y)[br]Cov=Sxy(XY) #共分散[br]Sx=sqrt(Sxx(XY))[br]Sy=sqrt(Syy(XY))[br]r=Cov/(Sx Sy)#相関係数[br][/b]text1="X=" + X + ",Y="+Y+ ""[br]text1="共分散Sxy=" + Cov + ",相関係数r="+r+ ""
データの変動の特徴と共分散、相関係数

エントロピーを視覚化しよう

このページは[url=https://www.geogebra.org/m/ddm5798j]マス旅[/url]の一部です。[br][br]今回はデジタル情報の基本になる「エントロピー」という量について探ってみよう。
1.ウォーミングアップ
[b][size=150]<自己情報量>[/size][/b][br][br][color=#0000ff][b]シャノンさんは珍しいことが起きたら情報量が多いと考えました。[br][/b][/color]つまり、シャノンは「[b]情報量は、確率に反比例する[/b]」としました。[br]たとえば、イベントA、B、C、Dの確率が順に1、1/2,1/4,1/8だと[br]しましょう。[br]反比例をそのまま数式化するには、逆数で定義するのが自然です。[br]情報量はA,B,C,Dの順に1、2、4、8です。[br][br]動き方が派手すぎますね。それに情報量が倍々になってしまいますが、[br]8分の1の確率というだけで、情報量が8というのは大きすぎますね。[br]確率が微小数の256分の1だと情報量は256になり、意味不明ですね。[br][br]そこで、逆数にしたあと、[b]2を底とした対数[/b]を使います。[br]つまり、[br][b][color=#0000ff][size=150][br]「確率pの(自己)情報量I=log_2(1/p)=-log_2(p)」[br][/size][/color]確率pの逆数のlog2、つまり、確率のlog2にマイナスをつける[br][/b][br]と決めてみよう。[br]-がついて定義のみかけはいやな感じですが、これでいいのです。[br][br]たとえば,イベントDではp=1/8=2^(-3)ですね。[br]定義に当てはめてみよう。Dが起きたときの情報量は[br][b]I_D=-log_2(2^(-3))=-(-3)=3[/b][br]となって、マイナスを打ち消してくれます。[br]AからDの確率を情報量に直して、順に並べてみよう。[br][b][color=#0000ff][size=200]A,B,C,D順に0,1,2,3[br][/size][/color][/b]となって、いい感じですね。[br]情報量には単位があります。ふつうは2進数のけたのbitを使います。[br]なぜ、ビットだか分かりますか?[br][br]2進数は1の位から位があがるたびに2倍2倍になっていました。[br]Aの確率1は、2進数でも1です。これはAの確率で、情報量は0でした。[br]Bの確率1/2は、2進数では1の半分だから0.1とかきます。小数第1位に1がきて情報量が1です。[br]Cの確率1/4は、2進数では0.1の半分だから0.01とかきます。小数第2位に1がきて情報量が2です。[br]Dの確率1/8は、2進数では0.01の半分だから0.001とかきます。小数第3位に1がきて情報量が3です。[br][br]小数の位と情報量の間の規則性に気づきましたか?[br]そうです。「[b]1がたつ小数の位=情報量[/b]」になってますね。[br]2進数の[b]小数の位のビット位置=情報量[/b]だから、ビットと呼んでいるのですね。[br][b]確率が半分になって位が1つ進むと、情報量が1つ増える[/b]という言い方もできます。[br][br][b][size=150]<否定の情報量>[br][/size][/b]イベントEに対する自己情報量I(E)は、Eの確率p(E)を使い、[br]I(E)=-log_2(p(E))と定義されました。[br][b]p(E)=1/2^n[/b]ならば、[br][b]I(E)=[/b]-log_2(2^{-n})=log_2(2^n)=[b]n (bit)[/b][br](2進化の確率の小数第n位にビットがたつ。)[br]では、余事象の自己情報量はどうなるかが気になりますね。[br]Eの余事象をFとすると、確率はp(F)=1-p(E)=1-p[br]だから、自己情報量はI(F)=-log_2(1-1/2^n)[br]=-log_2((2^n-1)/2^n)=-log_2(2^n-1)+log_2(2^n)[br]=[b]n - log_2(2^n-1)[br][br][/b][br][br][color=#0000ff]#たとえば、しかけのないコイントスは、出る確率は、表も裏も1/2です。[br]すると、p(表)=1/2^1だから、I(表)=1ビットの情報です。[br]I(裏)ももちろん1ビットです。[br]余事象の計算式では[br]1-log_2(2^1-1)=1-log_2(2-1)=1-log_2(1)=1-0=1ビットですから、一致しますね。[br][br]#たとえば、合格率が12.5%の難関校に合格すると、[br]p(合格)=1/2^3から、I(合格)=3ビットの情報量があるのですが、[br]p(不合格)=7/2^3から、I(不合格)=3-log_2(7)=3-2.807=0.193と情報量は0.2程度です。[br]合格という情報はビックリビックリビックリとなるのに、[br]不合格と聞いても驚かないだろうというのが、数字に表れてますね。[br][/color][br][b][size=150]<情報の加法性>[br][/size][/b][br]自己情報量は対数によって、「かけわり」を「たしひき」に直します。[br]だから、確率のかけ算を情報量のたし算に直すから情報量に加法性が生まれるね。[br][br]大小2つのさいころをふったときに、両方偶数になる情報量を求めましょう。[br]大のさいころが偶数の確率は1/2だから、その自己情報量は1。[br]小のさいころが偶数の自己情報量も1。[br]「大小のさいころが両方偶数」になる情報量は1+1=2になるはずです。[br]実際、[br]「大小のさいころが両方偶数」になる確率は4分の1=0.01(2)だから、あってますね。
2.エントロピー
[b][size=150]<平均情報量(情報量の期待値)>[br][/size][/b][br](自己)情報量になれてきたので、次は、分布にからめて情報量を俯瞰してみよう。[br][br]#たとえば、しかけのないコイントスの確率は、表も裏も1/2です。[br]だから、情報量は表も裏も1でした。[br]ビットは情報量なので、確率との積和は、「[b]情報量の期待値[/b]」になりますね。[br]期待値は平均値でもあるから、[b]平均情報量[/b]の求め方にもなるね。[br][b]1/2*1+1/2*1=1[br][/b]です。[br][br]難関校への合格不合格の場合はどうでしょう。[br][b]1/8*3+7/8*0.193=0.543875[br][/b]です。[br]さっきよりへりましたね。[br][b]確率の偏りが極端にある[/b]と小さい情報量に期待値が引きずられるようです。[br][br]8月13日の天気の確率がp(雨)=1/2,p(晴れ)=p(曇り)=1/4,p(雪)=0として、情報量を平均してみよう。[br]雨、晴れ、曇り、雪のビットは1,2,2,-∞.[br]雪の確率は0なので、期待値の寄与も0です。[br]平均情報量は[b]1/2*1+1/4*2+1/4*2+0=1.5[/b]。[br][br]2月1日の天気の確率がp(雨)=p(晴れ)=p(曇り)=p(雪)=1/4[br]として、情報量を平均してみよう。[br][b]雨、晴れ、曇り、雪のビットは2,2,2,2.[br][/b]平均は1/4*2+1/4*2+1/4*2+1/4*2=2。[br]「[b]2だけの平均は2[/b]」だから当然の結果ですね。[br]ということは、全体が[b]2^3[/b]通りに分岐して等しい確率で起きるなら、[br]1つの情報量のビットは[b]3[/b]だから、平均情報量も[b]3[/b]になりますね。[br][br]こうやって、いろいろ調べると、[br]「[b][color=#0000ff]事象の種類が増え、確率の分布が一様なときが平均情報量が多くなり、[br]事象の種類が減り、確率の分布が偏るときが平均情報量が0に近づく。[/color][/b]」[br]ということが結論づけられそうです。[br]一般化してみよう。[br]全体事象Aが{e1,e2,..,en}のn個の事象に分割できるとき、[br][b]平均情報量H(A)の最大値は、確率が等しい、情報量が等しいときで、[br]Σ1/n{-log_2(1/n)}={-log_2(n^{-1})}=log_2(n)、[/b][br][b]平均情報量H(A)が最小になるのは、分布が1つに集中し、他が0の確率になるときで、[/b][br]p(a1)=1,他の確率が0ならば、I(a1)=0の1倍、つまり期待値[b]=0。[/b][br][br]さっきから平均情報量をさりげなく文字[b]H[/b]で表してます。[br]なぜ、Hなのでしょう。熱力学のエントロピー(Entropy)は、Hを使っています。[br]H=-KΣn_k log_e(n_k)と書きます。n_kは気体分子のk番目エネルギー準位にある確率です。定数Kは単位換算のためでしょうから、目をつむるとして、構造的にはまったく同じですね。そうです。[br]平均情報量は熱力学のエントロピーに対応していたのです。[br]熱力学では無秩序さの尺度としてエントロピーを使います。[br]情報理論では不確実性の尺度としてエントロピーを使います。[br][br][b][size=150]<エントロピー関数>[br][/size][/b]さっきまでわかったことをまとめると、[br]「n個の部分からなる事象のエントロピーは最小0で、最大がlog_2(n)となる」[br]ということだ。[br][br]エントロピーは「事象と確率がセット」になっているので[b]2行[/b]でかける。[br]事象の数がn個あれば、2行n列の行列によって、[br]エントロピー空間が決まるね。これを[b]n元事象系[/b]という。[br][br][b]2元事象系[/b]A={{a1,a2},{p,1-p}}では、[br]エントロピーH(p)=-plog_2(p)-(1-p)log_2(1-p)を[b]エントロピー関数[/b]という。[br]数式は複雑にみえますが、a1とa2が等確率の1/2のときに最大で、[br]どちらかが1のときが0になるはずです。[br]これは、p=0、p=1のときにH=0、p=1/2のときにH=1という、[br][b]p=1/2で対称なグラフ[/b]になることが予想できるね。[br][br][color=#9900ff][b][u][size=150]課題:geogebraでH(p)=-plog_2(p)-(1-p)log_2(1-p)のグラフをかこう。[br][/size][/u][/b][/color][br]q=1-x[br]H(x)=-xlog2(x)-qlog2(q)[br]A=(0,0)[br]B=(1,0)[br]C=(1/2,1)[br][br]これだけでエントロピー関数がかけるなんて、geogebraは便利だね。
エントロピー関数
3.エントロピーは変化する
[b][size=150]<条件つきエントロピーとチェインルール>[br][/size][/b][br]確率は情報が増えると変化します。[br]モンティホール問題やベイズ理論を知っていれば、ピンとくるでしょう。[br]でも、知らない人でも、実例を見れば[br]「全体集合が変わるので確率が変わるというのが条件つき確率」ということがわかるでしょう。[br][br]例えば、天気予報や雨雲レーダーをみないで、雨かどうを判断すると[br]雨の確率が1/2だったとします。でも、どうも午後には雨雲がやってくるぞ[br]という情報があれば、雨の確率は格段に上がるでしょう。[br]もっと単純な話、[br]「さいころをふって1の目が出た確率」を聞かれたら6分の1と答えますね。もし、「奇数の目が出たぞ」という情報があれば、3分の1という確率に変わりますね。[br][br]これが[br][b]確率p(Y)に対して、事象や情報Xのもとでの条件つき確率p(Y|X)です。[br]エントロピーH(Y)に対しても、条件XつきのエントロピーH(Y|X)というものが[/b]考えられそうですね。[br][br]なんか難しそうな雰囲気がただよってきました。[br]でも、安心してください。[br][br]最初の情報量のところで、情報の加法性についてかきました。[br]大小のさいころが両方偶数である情報量は1つ1つが偶数である情報量の和でした。[br]I(大が偶数)=1, I(小が偶数)=1,I(両方偶数)=1+1=2[br]1,2はちょうど、確率の1/2.1/4に対応してましたね。[br]1/2*1/2=1/4についてはどう解釈しますか。[br]p(両方偶数)=1/2*1/2=p(大が偶数)*p(小が偶数)という積の法則ですね。[br]でも、別の考えもできるのです。[br]p(両方偶数)=p(大が偶数)*p(小が偶数|大が偶数)=1/2*1/2[br]p(両方偶数)=p(小が偶数)*p(大が偶数|小が偶数)=1/2*1/2[br]これを数式で利用してみよう。[br]そのために、[br]p(a∧b)=p(a)*p(b|a)[br]p(a∧b)=p(b)*p(a|b)[br]と記号化しましょう。[br][br]2つのさいころの2元情報系は次のようになります。[br]A=大の目={{偶、奇},{1/2,1/2}}={{a1,a2},{p(a1),p(a2)}}とする。[br]B=小の目={{偶、奇},{1/2,1/2}}={{b1,b2},{p(b1),p(b2)}}[br]ここで、「[b]AとBが同時におきる結合情報系[/b]」を作ります。[br]AB={{(偶,偶),(偶,奇),(奇,偶),(奇,奇)},{1/4,1/4,1/4,1/4}}[br]={{(a1,b1),(a1,b2),(a2,b1),(a2,b2)},{p11,p12,p21,p22}}[br]ただし、(ai,bj)=ai∧bj,pij=p(ai∧bj)とします。[br][b]同時エントロピーH(AB)[/b]=-Σ_iΣ_j [pij log_2(p(ai,bj))][br]=-Σ_iΣ_j [p(ai∧bj) log_2(p(ai∧bj))][br]=-Σ_iΣ_j [p(ai)p(bj|ai) log_2( p(ai)p(bj|ai) )][br]=-Σ_iΣ_j [p(ai)p(bj|ai){log_2(p(ai))+log_2(p(bj|ai))}][br]=-Σ_iΣ_j [p(ai)p(bj|ai)log_2(p(ai)][br] -Σ_iΣ_j [p(ai)p(bj|ai)log_2(p(bj|ai)][br]=-Σ_i{Σ_j p(bj|ai)}[p(ai)log_2(p(ai)][br] -Σ_ip(ai)Σ_j [p(bj|ai)log_2(p(bj|ai)][br][b]Σ_j p(bj|ai)}=1[/b]だから、[br][b]H(AB)=-Σ_i[p(ai)log_2(p(ai)][br] -Σ_ip(ai)Σ_j [p(bj|ai)log_2(p(bj|ai)][br]つまり、[br][/b][size=200][b][color=#0000ff]H(AB)=H(A)+H(B|A)[br][size=100]同時エントロピーはH(A,B)と書くこともあります。[br]この式は、エントロピーの加法性とか、チェーンルールと呼ばれています。[br][br][/size][/color][/b][/size][b][size=150]<エントロピー不等式>[br][/size][/b]大小さいころの場合は、[br]H(AB)=-Σ(1/4log_2(1/4))=Σ1/4*2=2[br]H(A)=Σ1/2*1=1[br]H(B|A)=-Σ[1/2Σ(1/2log_2(1/2)]=Σ1/2Σ(1/2*1)=Σ1/2*(1)=1[br]公式どうりだね。2=1+1。[br]H(AB)=H(A)+H(B|A)[br][br]もとはと言えば[br][b]log_2( p(ai)p(bj|ai) =log_2(p(ai))+log_2(p(bj|ai)[br][/b]aをA,bをBに読みかえると、[br]logの中の「条件付き確率の式」がlogの働きで「条件付きエントロピーへの分解式」に変わったのだ。[br][br]大小さいころの場合は、事象が独立しているため、[br][b]H(A)=H(B)=H(A|B)=H(B|A)=1[br][/b]になっている。[br][br]独立でない場合はエントロピーを条件つきにすると小さくなる、不確実性がへる。[br][b][color=#0000ff][size=200]H(A|B)≦H(A), H(B|A)≦H(B)[/size][/color][/b][br]となるでしょう。[br][br]これは、証明するまでもなく、[br]最初の天気予報などの例から明らかでしょう。[br][br]シャノンはここから、[br][b][color=#0000ff][size=200]H(AB)=H(A)+H(B|A)≦H(A)+H(B)[br][/size][/color][/b]という不等式を見つけました。
4.エントロピーの減少分
[b][size=150]<相互情報量>[br][/size][/b][br]「独立性のない2元事象系の結合系」でエントロピーの減少量を計算してみよう。[br][br]#たとえば、あなたが算数の先生だとします。[br]算数好きと好きでない子は半々です。[br]算数好きの4分の3は発言すること、[br]算数好きでない子は4分の1が発言することを事実とします。[br][b]A=算数好きか={{Y,N},{1/2,1/2}[br]B=発言するか={{Y,N},{1/2,1/2}[br]AB={{(Y,Y),(Y,N),(N,Y),(N,N)}[/b],{1/2*3/4,1/2*1/4,1/2*1/4,1/2*3/4}}[br]{1/2*3/4,1/2*1/4,1/2*1/4,1/2*3/4}[b]={3/8,1/8,1/8,3/8}[/b][br][br]p(算数好き∧発言)=p(発言)p(算数好き|発言)から、[br]p(算数好き|発言)=p(算数好き∧発言)/p(発言)=(3/8)/(1/2)=(3/8)*2=3/4と条件付き確率が計算できます。[br]同様にして、[br]p(算数好き|発言No)=p(算数好き∧発言No)/p(発言No)=(1/8)/(1/2)=1/4[br]p(算数好きNo|発言)=p(算数好きNo∧発言)/p(発言)=(1/8)/(1/2)=1/4[br]p(算数好きNo|発言No)=p(算数好きNo∧発言No)/p(発言No)=(3/8)/(1/2)=3/4[br]ですね。[br][br]ベイズの定理は、[br]「クラスの子が算数が好きかどうかは半々の確率です。[br]もし、発言してくれたらp(算数好き|発言する)=3/4と確率が更新される」という確率にフォーカスしたものでした。[br][br]エントロピーは系を俯瞰して変化をとらえます。[br][br]I (Y,Y)=-log_2(3/8)=-(log_2(3)-log_2(8))=log_2(8) - log_2(3)=3-log_2(3)[br]I (Y,N)=-log_2(1/8)=log_2(2^3)=3[br]だから、2元事象系の結合系のエントロピーは、[br]H(AB)=3/8(3-log_2(3))+1/8(3)+1/8(3)+3/8(3-log_2(3))となるね。[br]pythonで計算します。[br][br][color=#0000ff][IN][br]from math import log2[br]3/8*(3-log2(3))+1/8*3+1/8*3+3/8*(3-log2(3))[br][OUT][br]1.811278124459133[br]およそ1.811だ。[br][/color][br]AもBも等確率に分岐し、どの確率も0.1(2)で小数第1位に1がたつので平均も1、[br]だから、平均情報量という意味を思い出すと、[br]エントロピーH(A)=H(B)=1ですね。[br]ということは、[br]H(A|B)=H(AB)-H(A)=1.811-1=0.811[br][br]発言という事象を前提にすることで、不確実性が1から0.811に下がったことがわかりますね。[br]エントロピーの現象は1-0.811=0.189だ。[br]この減少分を[br][b][size=200]相互情報量 I(A ; B)[br][/size][/b]と呼びましょう。[br][size=200] [b]I(A ; B)=H(A)-H(A|B) [/b][br][/size][b][color=#0000ff][size=150]さっきの例だと、[br]発言系Bの情報によって、算数好き系Aの不確実さが減少した[/size][/color][/b]ということだね。[br]つまり、[br]「事後エントロピーによる事前エントロピーの減少分=相互情報量」とい[br]うことだ。[br]独立な事象だと、エントロピーは変化しなかったので、相互情報量が0ということもあるでしょう。[br]だから、等号も意識することで、一般には[br]0≦[b]I(A ; B)≦H(A)[br]となるでしょう。[br][br][size=150]<相互情報量の対称性>[br][/size][/b]I(A;B)の式を変形してみよう。[br]結合事象系で、片方の変数をすべてなめて合計すると他方の変数の確率になる。p(ai)=Σ_j p(ai∧bj)だ。[br]また、条件つき確率は、同時確率を条件の確率で割って求められる。p(ai | bj)=p(ai∧bj)/p(bj)[br]だから、I(A;B)=H(A)-H(A|B)[br]=-Σ_i {p(ai)} log_2(p(ai)) + Σ_iΣ_j p(ai∧bj) log_2(p(ai|bj)[br]=-Σ_i {Σ_j p(ai∧bj)} log_2(p(ai)) + Σ_iΣ_j p(ai∧bj) log_2(p(ai∧bj)/p(bj)[br]=Σ_i Σ_j p(ai∧bj) log_2(1/p(ai)) + Σ_iΣ_j p(ai∧bj) log_2(p(ai∧bj)/p(bj)[br]=Σ_i Σ_j p(ai∧bj) [ log_2(1/p(ai)) + log_2(p(ai∧bj)/p(bj) ][br]=Σ_i Σ_j p(ai∧bj) [ log_2((p(ai∧bj)/ {p(ai)p(bj)} ][br][br]美しいですね!ai,bjについて対称になりました。[br]だから、[br][color=#0000ff][b][size=200]I(A;B)=I(B;A)[br][/size][/b][/color]が結論付けられます。[br]チェーンルールからH(AB)=H(A)+H(B|A)だから、-H(B|A)=H(A)-H(AB)[br]I(A;B)=H(B)-H(B|A)[br]=H(B)+[H(A)-H(AB)][br]=H(A)+H(B)-H(AB)=I(B;A)[br]相互情報量は、それぞれのエントロピーの合計から同次エントロピーをひいたものになります。[br][br]言い換えると、[br]H(AB)=H(A)+H(B)-I(B;A)[br]です。[br]つまり、[br]H(A)=H(A|B)+I(A;B)[br]H(B)=H(B|A)+I(A;B)[br]とあわせて考えると、[br]エントロピーの関係がベン図で整理できますね。[br]H(A)とH(B)の重なりがI(A;B)で、[br]それぞれのはみ出しが、H(A|B),H(B|A)です。[br]そして、H(A)とH(B)の合併がH(AB)[br]同時エントロピーは論理的には∧なのに、量的には⋃になるのが面白いですね。[br][br]課題:geogebraで同時エントロピーと条件付きエントロピーと相互情報量と平均情報量の関係を視覚化しよう。[br][br]#タイトルは「エントロピーの視覚化」[br]B=(1,0)[br]A=(-1,0)[br]C=(0,2)[br]a:Circle(A,C) #見出しをH(A)[br]b:Circle(B,C)  #見出しをH(B)[br]c: (x+1)^2+y^2<5 && (x-1)^2+y^2<5[br][br]#テキストを挿入[br]"H(AB)" #極大文字サイズでゴシックにして、図の上方におく[br]"I(A;B)" #大文字サイズでゴシックにして、cの中央におく[br]"H(A|B)" #大文字サイズでゴシックにして、aの中央におく[br]"H(B|A)" #大文字サイズでゴシックにして、bの中央におく[br]
エントロピーの視覚化

Information