担当授業のこととか,なんかそういった話題。

主に自分の身の回りのことと担当講義に関する話題。時々,寒いギャグ。

広告

※このエリアは、60日間投稿が無い場合に表示されます。記事を投稿すると、表示されなくなります。

【高校数学のツボ】Cauchy の不等式から相加平均と相乗平均の不等式を導く。

2018-03-01 23:16:17 | mathematics
きわめて初等的な話題にもかかわらず,長年にわたって繰り返し考察を行うというのが私の癖である。

今回は,そうしたテーマの一つとして,Cauchy の不等式と相加平均・相乗平均の不等式の関係を取り上げる。

高校で教わるこれら二つの不等式は数学の専門的な論文でも多様な分野で使われ続けている,基本的かつ重要なものであるが,ある意味,これらは同値であるということを,二つの記事に分けて解説する。

本稿は Cauchy の不等式が成り立つと仮定して,それから相加平均と相乗平均の不等式を導けることを示そう。実のところ,それはほぼ自明である。ただし,ここでいう Cauchy の不等式とは,

「任意の実数 a, b, x, y に対し

|ax+by|≦√(a2+b2)√(x2+y2)

が成り立つ」

という,別の言い方でいえば平面ベクトルの内積の絶対値に関する不等式のバージョンであり,相加平均と相乗平均の不等式の方は

「任意の正の数 p, q に対し


pq≦(p2+q2)/2

が成り立つ」

という,累乗根バージョンではなく,累乗バージョンであって,しかもデータが2個の数の場合のみを考察の対象とする。

さて,証明はというと極めて簡単で,Cauchy の不等式において

a=p, b=q; x=q, y=p

とおくだけである。こうすると

ax+by=pq+qp=2pq

であり,p と q が正の数であればこれは正の数だから絶対値と値は等しく,さらに


√(a2+b2)√(x2+y2)=p2+q2

となることから証明は完了する。


なお,等号成立条件については次のとおりである。

Cauchy の不等式における等号成立条件は,どちらかは 0 でないような2つの実数 s, t が存在して

sa=tx かつ sb=ty が成り立つ

というものであるが,先ほどのように a, b, x, y の値を設定すると,これらは

sp=tq かつ sq=tp

となる。つまり

sp=tq かつ tp=sq

であるときだが,それぞれ両辺を2乗したもの同士を足し合わせると,

(s2+t2)p2=(s2+t2)q2

となるが,s と t の少なくとも1つは 0 でないから,s2+t2≠0 である。ゆえにこれで両辺を割ってよく,その結果

p2=q2

となる。p と q とはいずれも正の数であるから,これより p=q が従う。


このように,等号成立条件の間にもちゃんとした関係がつくのである。


では逆に相加平均と相乗平均の不等式から Cauchy の不等式を導くにはどうすればよいか。私の個人的な感想ではこちらの方がずっと難しい問題であるが,これについては稿を改めることとする。

コメント

大雪。

2018-01-22 23:56:56 | 爺ネタ
関東は,1月下旬から2月上旬にかけて週に一日雪が降ることがよくあるが,今年はかなりの大雪である。

いやー,期末試験,どうなるのかなぁ。

嫌な予感がしていたので先週頑張って試験問題を印刷して準備を済ませておいて正解だった。
コメント

【高校数学のツボ】相加平均と相乗平均の不等式。

2017-12-25 23:55:54 | mathematics
過去にも話題にしたかもしれないが。

x と y が非負の数のとき,これらの相加平均 (x+y)/2 と相乗平均 √(xy) との間には

(x+y)/2≧√(xy)

が成り立つ。

これは非負の数が2つのときの不等式だが,n 個の非負の数についても同様の不等式が成り立つ。

ここでは 4 つの場合について述べる。ただし,扱いやすさも考えて,非負の数 a, b, c, d に対して

a4+b4+c4+d4≧4abcd

が成り立つかどうかを考える。

実は答えは簡単で,2 個の数に関する不等式を3回適用すればよい。今回取り上げたかったのは,そうした,不等式の反復適用というやり方である。

まず,おおもとの 2 個の数に関する不等式を

x2+y2≧2xy

と書き換えておく(最初に書いた不等式の x, y と同じ文字を使用しているが,それらとは別物とみなしていただきたい)。

x=a2, y=b2 とみれば

a4+b4≧2a2b2

が得られる。同様にして

c4+d4≧2c2d2

がわかる。これらを辺々足せば

a4+b4+c4+d4≧2(a2b2+c2d2)

となるが,右辺のかっこの中身は,x=ab, y=cd とみることによって

a2b2+c2d2=(ab)2+(cd)2≧2ab・cd=2abcd

となる。以上により,

a4+b4+c4+d4≧4abcd

が成り立つことが示された。等号は,a=b かつ c=d かつ ab=cd のとき,つまり a=b=c=d のときに成り立つ。
コメント

関数方程式 f(f(x))=ax+b.

2017-12-16 02:10:26 | mathematics
Berge の "Graphs and Hypergraphs" (1973) という本をページっていたとき,p.40 に,実数 a, b に対し φ(φ(x))=ax+b を満たす実数値関数を求めよ,という問題が載っていた。

次のページに Menger によるという解があるのをチラッと見てしまったが,自分なりにこの問題を考えてみたくなった。

とりあえず,ギリシャ文字の φ を入力するのが面倒なので,f に変えておく。

そもそもとっかかりがほとんどないが,ふと,1次関数同士の合成は1次関数であるということを思い出した。合成関数の微分について教える時にいつも自分が言っていることであった。

というわけで,f(x)=cx+d とおいて,c と d を求めることにしよう。このとき,

f(f(x))=cf(x)+d=c(cx+d)+d=c2x+(c+1)d

となるから,これが任意の実数 x に対して ax+b に一致するとき,a が正の数なら c=√a ととり,b=(c+1)d となるように d=b/(1+√a) と選べばよい。
これがまさに Menger の解そのものである。

ちなみに,a=1, b=0 であるとき,定義域を x≠0 に制限すれば f(x)=x だけでなく,f(x)=k/x (k は 0 でなければどんな実数でもよい)も解となる。

あ,f(x)=k-x も解だな。


また,f(f(x))=x2 なんていう問題を考えたとすると,f(x)=|x|√2 という解がある。

さて,a が負の時,例えば f(f(x))=-x を満たす関数 f が存在するかどうか,気になるところである。なんかこういう問題,何年か前にも考えたような気がするのだが・・・。大阪大学理学部数学科の HP 上で公開されている『全国紙上数学談話会』の南雲先生の論文にそういう話題が載っていたような記憶があるので,それを調べようとしたら,そもそも数学科の HP 自体にアクセスできないという事態が勃発した。なんかメンテナンスでもしているのだろうか。

ところで,1次関数同士の合成は再び1次関数になるのだが,1次分数関数同士も関数の合成について閉じている。こうした,「あるパラメータを持つ関数の族で,合成操作について閉じているものは他にあるか」という問題も,前々から気になっていたことではある。

話があちらこちらに飛んでしまったが,f(f(x))=-x の解についてはちょっと考えただけでは全然わからなかった。Berge の本の p.41 にその解答が述べられている。Differential games の研究者である Rufus Isaacs という人の解らしいのだが,情報源は不明である。Menger の解についてもどこから引用したかはわからない。

こうした関数方程式の専門書に載っているかどうか,また今度調べてみよう。
コメント (2)

<読書感想文1701>夏海公司,なれる!SE,2週間でわかる?SE入門

2017-11-20 21:13:07 | 
夏海公司,なれる!SE,2週間でわかる?SE入門,電撃文庫 (2010).


世の中に,この手のジャンルがあるということは十年ほど前から気づいてはいた。

しかし,腰を据えてちゃんと一冊通してラノベを読み通したのは,これが初めてである。

この歳で,いまさら学園ものだの,厨二病全開の世界系ファンタジーだのを読む気にはあまりなれないが,この作品の主人公は大卒でスルガシステム(株)というマイナーな中小企業で先輩にしごかれながらどうにかこうにか業務をこなしていく,といった,オトナ向けの物語のようなので,近所の図書館に置かれていたこともあり,試しに読んでみた。

主人公の桜坂工兵のOJT(オン・ザ・ジョブ・トレーニング)を担当する,いわば直属の上司は,どう見ても少女にしか見えない年齢不詳の女性,室見立華(りつか)である。Ixy 氏のイラストが表紙やカラーイラストに載っているのだが,うん,中高生の女の子にしか見えない。そしてどうしても『とらドラ!』の手乗りタイガーとダブってしまい,作中での立華のセリフも,私の脳内では釘宮理恵さんの声で再生されてしまう。

文章も,これがラノベか!という感じで,過去に目にした漫画やアニメの一シーンをもじったような光景を目に浮かべさせるような表現ばかりであり,もう,漫画化か,いっそアニメ化してくれたらと思うほどである。もし自分がアニメ業界の関係者で,資金も潤沢に持っていたとしたら,1クールだけでもいいから,この作品のアニメの制作指揮を執りたいものである。

内容については,ストーリーものである手前,ネタバレは最小限に抑えたいのでほとんど触れるつもりはないが,二つ感想を述べておく。

まず一つ目は,「働くって,大変だね」という,まあ,当たり障りのない感想である。現場で次々と発生する想定外のトラブルを,己のスキルや機転で辛くも乗り越えていく。その様は,緊急医療現場の医療スタッフや,窮地に陥った戦線の兵士さながらである。目まぐるしく変化する状況の中で,集中し,全身全霊をもって適応し,問題を解決していく。そんな暴れ馬みたいな現実に日々もまれ続けていたら,若くともすぐに消耗してしまうだろうが,戦いの場でこそ自分が生きていることを心の底から実感できる,という境地は,特に少年マンガではよく取り上げられる話ではある。このように,そうした境地に共感する癖がついているため,この作品をも好意的に受け入れることができるのだろう。

二つ目は,この作品に手を出した直接の動機ではあるが,SE,特にネットワークエンジニアの業務についてちょっぴり理解が進んだかな,ということである。といっても,自分がいま自宅で使用している屋内 WiFi でさえ,ルータのコンフィグ(設定)を自分で作ったわけでもなんでもなく,ただ単に電源を入れてケーブルをつないだらいつの間にか普通に使えていた,というド素人丸出しの体たらくなので,「SEの仕事,俺,わかっちゃったかも!」なんていうのはおこがましさを通り越して,犯罪の域に達しようとしているともいえるのであるが。

私はこの歳になるまで(この歳になっても)一般企業に勤めた経験がないため,疑似職業体験をさせてくれる,本作のような読み物は非常に貴重である。2010年にこの第一巻が刊行されてから,現在では第十二巻まで出ているようなので,ぼちぼち続きを楽しんでいこうと思っている。

ていうか,知り合いに SE を志望している就活生がいたらまっさきに薦めたいね,この本。
コメント

【高校数学のツボ】Euclid の互除法には敵わないが。

2017-11-20 18:27:53 | mathematics
互いに素な2つの整数 13 と 21 に対して,不定方程式

13x+21y=1

の整数解 (x,y) を一組でいいから求めたい。

Euclid の互除法を利用すれば効率的かつ組織的に解が求められるが,ここではもう少し原始的なやり方を採用してみる。

大きい方の 21 を 13 で割ると余りは 8 である。すなわち,

21=13+8

である。この余り 8 の倍数のうち,13 で割った余りが 1 になるものを探す。

8×1=8 なので余り 8,
8×2=8+8=16=13+3 なので余り 3,
8×3=16+8=(13+3)+8=13+11 なので余り 11,
8×4=(13+11)+8=13+(11+8)=13+19=13+(13+6)=13×2+6 なので余り 6,
8×5=(13×2+6)+8=13×2+14=13×3+1 なので余り 1.

以上により,

21×5=(13+8)×5=13×5+8×5=13×5+(13×3+1)=13×8+1

となり,

-13×8+21×5=1,

すなわち,お題の方程式の解として (x,y)=(-8,5) があることが判明した。

与えられた2つの整数がたかだか2桁程度なら,このようにちょっとした手計算で不定方程式の解が一組求まる。順に倍数を求め,余りを求めるので,一回の計算ごとに足し算と引き算しか行わずに済む。そのため,計算しやすく感じられるのではないだろうか。

Euclid の互除法を利用する方法を理解し,身に着ける方が今後のためになるとは思うが,手っ取り早く解を求めたい場合にはこんな方法もあるのだと知っておいてもよいだろう。

といいつつ,数日前に同じ計算をしたはずの自分の計算メモを見てみると,なぜか x の値を -7 と間違えている・・・。

アハハハハハー。
コメント

Prolog で3桁の2進数同士の加法と減法を行う。

2017-11-13 20:53:42 | 情報系
確か大学3年生の時だったか。授業で Prolog なるものを教わり,DEC-10 Prolog というのを大学の端末室でちょっとだけ触って遊んだ日々が懐かしく思い出される。

自分でも数行のプログラムを書いていろいろと試してみたが,肝心の Prolog 処理系の動作の仕組みが理解できておらず,プログラムが思い通りに動かないときに原因を突き止め,修正することができず,「デバッグの壁」の前で立ち往生するほかなかった。

それから今まで,ずっと Prolog に対する熱い想いは胸の奥底でくすぶり続けていたのだが,順列を生成するプログラムをコンパクトに記述できそうだと思い至り,また,和田秀男氏の単純計算機のシミュレータを Prolog で実装できないかという妄想も抱きつつ,今度こそある程度夢を形にしようと試行錯誤を始めている。

これは第5次くらいの Prolog マイブーム到来であるが,第3次ブームあたりで,Windows 上で動く無償の(!) Prolog 処理系 SWI-Prolog なるものがあることはすでに知っていた。

ネットで検索するとすぐにホームページが見つかり,無事 SWI-Prolog を自前の PC にインストールできたが,ブラウザ上で動くサービスがあることを知って驚いた。否,今はすでにそういう時代だということは,最近いろいろと同じような体験を繰り返して思い知っているはずであった。

それで,学部生当時も(ちょびっとだけ)お世話になった,

中島秀之,上田和紀共著,コンピュータ入門5 楽しいプログラミングII 記号の世界,岩波書店,1992年

という,コンピュータ初心者向けに丁寧に書かれたテキストの「4 足し算をプログラムしてみよう」をかじり読みして,どうにか 3 桁の2進数の加法と,2の補数を利用した減法のプログラムを作ることに成功した。

その本のさらに先をじっくり読めば,いろいろと融通の利くデータ構造としてのリストを使いこなせるようになりそうだが,かつてつまずいたのもその辺からだったこともあり,まだまだ勉強は進んでいない。

とりあえず,小文字 o を数字の 0,i を数字の 1 に見立てて,

add(bits(o,i,0),bits(o,i,i),X). (←最後のピリオドは必ずつける!)

とプロンプトに入力すると,

X=bits(i,o,i);
false

のように表示される「足し算」のプログラムを作った。ここで,X は bits(o,i,o)と bits(o,i,i) を足した結果である。
false というのは,これ以外に解 X がないというくらいの意味なので,気にしなくてよい。

なお,

add(X,bits(o,i,i),bits(i,o,i)).

と質問すると,

X=bits(o,i,o)

という答えが返ってくる。つまり,足し算の逆の引き算もある意味やってくれてしまうわけである。

そう考えると,add という術語だけで十分で,わざわざ引き算の術語を定義する必要はないかもしれないが,2の補数を作ってそれを加えるという伝統的なやり方で減法もできるようにした。それは add と同じように

subtract(bits(i,o,i),bits(o,i,i),X).

と質問すれば,101-011 の結果 010 に相当する

X=bits(o,i,o)

が返ってくるプログラムになっている。

下にそのプログラムを載せておく。これを例えば SWISH の画面の左のフレームにある Creat a Program というところの Program ボタンを押すと開くプログラム編集画面にコピペし,右下のフレームの右下隅の RUN ボタンを押してそのプログラムを読み込ませ,右下のテキスト入力欄に,上記のような質問文(くどいようだが,文末のピリオドを忘れずに。あと,小文字と大文字は区別して正しく記入のこと)を入力すれば,期待通りの結果が返ってくる。

ちなみに,このプログラムに至る前は,AND 演算を定義し,NOT 演算と合わせて OR 演算と XOR 演算を定義し,それらを組み合わせて全加算器を構成し,さらには全加算器を組み合わせて add を構成し・・・と,コンピュータの実際の構成と同じように組み立ててみたのだが,入力ミスをしたのだかなんだかわからないが,とにかくこちらの想定外の挙動が生じたので,現状のものへと変更した。おそらく繰り上がりの処理がまずかったのではないかと思い,初めから 3 つの 1 桁の2進数の和を,ベタな表として自前で書き込むという強硬手段に出たが,下手に小技を繰り出すよりもすっきりしていてよいのかもしれない。

さて,冒頭でも少し触れた「(超)単純計算機」に備える予定の 5 つの命令のうち,add と subtract のめどはついた。残りの load と store,jump minus もなんとかなると思うが,自己書き換えを許すプログラム内蔵方式を忠実に実現するにはどんなデータ構造がよいのか,まだ全く方針がつかめないままでいる。

--- プログラムの始まり ---
/* o は 0, i は 1 を表す。*/

/* ビット・ノットの定義 */
/* not(input,output). */
not(i,o).
not(o,i).

/* 1桁の数と一つ下の桁からの繰り上がりの和 */
/* add_3bits(input1,input2,carry,output). */
add_3bits(o,o,o,o,o).
add_3bits(o,i,o,o,i).
add_3bits(i,o,o,o,i).
add_3bits(i,i,o,i,o).
add_3bits(o,o,i,o,i).
add_3bits(o,i,i,i,o).
add_3bits(i,o,i,i,o).
add_3bits(i,i,i,i,i).

/* 3つの1桁の数の和を利用した,2つの1桁の数の和 */
add_2bits(X,Y,Z,W):-add_3bits(X,Y,o,Z,W).

/* 2組の3桁の2進数の和を求める */
/* add(input1,input2,input1+input2). */
add(bits(X_2,X_1,X_0),bits(Y_2,Y_1,Y_0),bits(Z_2,Z_1,Z_0)):-
add_2bits(X_0,Y_0,C_1,Z_0),
add_3bits(X_1,Y_1,C_1,C_2,Z_1),
add_3bits(X_2,Y_2,C_2,W,Z_2).

/* 2の補数 two's complement を求める。*/
/* not で各桁の o と i を反転し,その結果に i を加える。*/
/* complement_on_two(input,output). */
complement_on_two(bits(X_2,X_1,X_0),bits(Y_2,Y_1,Y_0)):-
not(X_2,Z_2),
not(X_1,Z_1),
not(X_0,Z_0),
add(bits(Z_2,Z_1,Z_0),bits(o,o,i),bits(Y_2,Y_1,Y_0)).

/* 2の補数を用いた減法 */
/* subtract(input1,input2,input1-input2). */
subtract(bits(X_2,X_1,X_0),bits(Y_2,Y_1,Y_0),bits(Z_2,Z_1,Z_0)):-
complement_on_two(bits(Y_2,Y_1,Y_0),bits(W_2,W_1,W_0)),
add(bits(X_2,X_1,X_0),bits(W_2,W_1,W_0),bits(Z_2,Z_1,Z_0)).

--- プログラムの終わり ---
コメント

不規則動詞だったのか・・・。

2017-11-13 20:37:20 | 情報系
「2の補数」を英語でどう表現するのか知りたくてググってみた。

Wikipedia 英語版の解説を見たところ,two's complement というのが普通らしい。

2の補数を求める手続きとしては,桁ごとに 0 と 1 を反転させたものをまず求め,最後にそれに 1 を加えて完了というものしか知らなかったが,計算をしないで済ませる機械的な手続きもあることを学んだ。

2の補数を求めたいビット列の最下位 (Least Significant Bit, LSB) から調べ,初めて 1 が出てきたところまではそのままコピーし,それよりも上位の桁のビットは 0 と 1 を反転させればよい,というものである。

例えば 0000 には 1 が一つも出てこないので,まるまるコピーした 0000 が2の補数である。

0001 は最下位ビットがいきなり 1 だが,それはそのままコピーし,上位 3 桁は 0 を 1 に反転して 1111 とする。

1010 は,まず **10 とコピーしておいて,上位 2 桁を反転し 0110 とする。

おお,なぜかはわからないが確かにうまく行く!

このように 2 の補数の求め方に 2 つの流儀があることがわかったが,基本的にどちらが処理が速いわけでもないらしい。
そんな感じの記述に差し掛かった時,

can be sped up

という語句を目にした。

この sped とは,もしや・・・?!

これもさっそくググってみると,我々が日本語としてもよく使う「スピード」は名詞としての用法が主であるが,動詞としての意味もあり,その過去形および過去分詞形が sped だそうである。こんな馴染み深い英単語がまさかの不規則動詞だったとは・・・。今の今まで知らんかったわ~。
コメント (2)

最近の世相。

2017-11-13 15:49:01 | 爺ネタ
11月に入り,世間はハロウィンムードから一気にクリスマスムードへとシフトした。

そんな中,11月11日は「ポッキーの日」だとばかり思いこんでいたのが,実は誤りで,正しくは「ポッキー&プリッツの日」だと知った。私のように勘違いしている人が多いため,この日プリッツは己を「ポッキーじゃないほう」と自虐的に表現したとのことである。

世の中のニュースはネットで見かけたものしか知らないのだが,兵庫県朝来市にある日本遺産「生野銀山」で,アツい超スーパー地下アイドル GINZAN BOYZ が活動していることを知った。GGGZPDS という彼らのデビューシングルの PV も観てみたが,妙にリアルな人物が混じっていると思ったら,SHICHO(市長)だそうだ。彼もアイドルの一員なのだろうか。

そして千葉は世界的に知られる存在となった。地球のある地質年代を「チバニアン」と呼ぶことが国際学会で認められる見通しだという。千葉の時代が来てしまったようである。

コメント

順列の生成。(改改)

2017-11-06 22:38:32 | 情報系
これまでに到達したアイデアを元に,十進BASICで再帰的なプログラミングによる順列の生成にチャレンジしたものの,期待通りの結果が得られないままでいる。

そこで,少し気分を変えて,1 から 4 までの数字を重複を許して 4 つ並べた重複順列を生成するプログラムを作ってみた。

まずは FOR 文を入れ子にした,誰でもすぐ思いつく基本的なプログラムでうまくいくことを確かめた。

次に,順列の生成の手続きのアイデアと同様な方法で重複順列を生成しようとしたが,やはり失敗した。

しかし,この体験は無駄にならずに済みそうである。おかげでようやく考察が一歩前進しそうだからである。

私が考えた順列の生成手続きには,できた順列を出力した後,どの階層の手続きに戻るべきかの指示が欠けている。それが失敗の元凶のようだとようやく気付いた。

なお,二つの数字の入れ替えを軸とした順列の生成の基本姿勢は踏襲することにする。実際に我々が紙に順列を生成する樹形図などを描く際には,数字の入れ替えを行っているわけではなく,「ここまでに 3, 2, 4 は使ったから,ええと,あと 1 と 5 が残っているな」というように,既に使ってしまい,その後使えない数字とまだ使える数字を思い出して区別しながら作業するのが普通であろう。ただし,最後の2つの数字を並べる時だけは前後の数字の入れ替えを使っているはずである。リストの中の二つの文字の位置を入れ替える操作の方が,使える文字と使えない文字を区別するという,操作の許可・禁止の管理を行うより,実際には頭を悩ませずに済むので中高生にもおすすめの方法である。

解決までの見通しはそう悪くはないが,この文章を書きながらまとめようとしたら,ごちゃごちゃしてしまったので,もっと煮詰まってから改めて記事にしようと思う。

おそらく Prolog, Lisp, Haskell などのリスト処理に強い言語なら,簡単な練習問題程度なのだろうが・・・,うーん,難しい・・・。

あと,重複順列を生成しておいて,そのうち,数字や文字が重複していないものだけをふるい分ける方法もすぐ思いつく。効率の悪いやり方ではあるが,「文字が重複して使われているかどうかを判定する」手続きをきちんと書き出すのはとてもよい練習になるだろう。
コメント