高校数学/相加相乗平均の関係
のバックアップソース(No.8)
Unity学習帳2冊目
高校数学
/
相加相乗平均の関係
のバックアップソース(No.8)
[
トップ
] [
差分
|
バックアップ
|
リロード
] [
新規
|
一覧
|
検索
|
最新
|
ヘルプ
]
[ ]
差分
を表示
現在との差分
を表示
高校数学/相加相乗平均の関係
へ行く。
« Prev
Next »
TITLE:相加平均と調和平均の関係 **相加相乗平均の関係 [#z1470a2d] #jsmath 相加相乗平均の関係は以下の状態で変化しない \(\displaystyle\ \frac { x+y }{ 2 } \ge \sqrt { xy } \quad \quad x,yは0以上の実数。x=yの時、等号が成立する\) この関係は微分を利用して[[平方根を求める等の漸化式を作る際>微積分と物理/微分]]に非常に重要となる考え方な為、疑いもなく理解しておく必要がある 従って実際に、その関係が成立する事を検証して確かめておく #hr 単純なケースから確かめていく ***① \({ r }^{ 2 }>0\quad \quad rが0以外の実数である場合、この式は成立するか?\) [#ydd50ae9] |例||| |\(r=2\)|\(4>0\)|成立| |\(r=-2\)|\({ \left( -2 \right) }^{ 2 }>0\quad \rightarrow \quad 4>0\)|成立| ***② \({ \left( a-b \right) }^{ 2 }>0 \quad \quad aとbが0以外の実数である場合、この式は成立するか?\) [#d5ed2e5a] アバウトな検証用コードを書く。条件を満たすランダムなa,bの値を50回生成して式を検証 #code(csharp){{ using UnityEngine; using System.Collections; public class Numbers4 : MonoBehaviour { void Start () { float a, b, left; bool success = true; for (int i = 0; i < 50; i++) { a = 0; b = 0; GenerateRandom (ref a, ref b); left = Mathf.Pow ((a - b), 2); print (string.Format ("{0} : {1} : {2}", a, b, left)); if (!(left > 0)) { print ("成立しない!"); success = false; } } if (success) { print ("成立する"); } } static void GenerateRandom (ref float a, ref float b) { while (a == 0 || b == 0) { a = Random.Range (-100f, 100f); b = Random.Range (-100f, 100f); } } } }} 結果。「aとbが0以外の実数であれば式は成立する」事が確認できた これは「括弧で囲まれた2乗の式は括弧の中がどんな式であれ必ず0以上の正の値になる」事を示している ***③\({ { a }^{ 2 }-2ab+{ b }^{ 2 } }>0\quad \quad \quad aとbが0以外の実数である場合、この式は成立するか?\) [#e886e600] ③の式は②を展開したものになる。理屈で考えると成立しないとおかしいが一応検証する ②のコードの15行目を left = (a * a) - 2f * a * b + (b * b); とする。結果。成立している事が確認できる ***④ \({ { a }^{ 2 }+{ b }^{ 2 } }>2ab\quad \quad \quad aとbが0以外の実数である場合、この式は成立するか?\)[#a611d67e] ③の式から2abを右辺に移項させる。この時、左辺と右辺、不等号の関係が成立するかという意味の大きな変化がある。検証してみる コードを少し書き換えた。8、15~18行目を書き換えている #code(csharp){{ using UnityEngine; using System.Collections; public class Numbers4 : MonoBehaviour { void Start () { float a, b, left, right; bool success = true; for (int i = 0; i < 50; i++) { a = 0; b = 0; GenerateRandom (ref a, ref b); left = (a * a) + (b * b); right = 2f * a * b; print (string.Format ("a={0} : b={1} : {2} > {3}", a, b, left, right)); if (!(left > right)) { print ("成立しない!"); success = false; } } if (success) { print ("成立する"); } } static void GenerateRandom (ref float a, ref float b) { while (a == 0 || b == 0) { a = Random.Range (-100f, 100f); b = Random.Range (-100f, 100f); } } } }} 結果。成立する事が確認できた。不等号を挟んだ移項は成立する。単純な移項の場合、不等号の向きが変わることはない ***⑤ \({ \left( a+b \right) }^{ 2 }>0\quad \rightarrow \quad { a }^{ 2 }+2ab+b^{ 2 }>0\quad \rightarrow \quad \quad { a }^{ 2 }+b^{ 2 }>-2ab\) [#wd07e674] \(aとbが0以外の実数である場合、この式は成立するか?\) これも普通に考えると成立する事が予想できる。コードの16行目を right = -2f * a * b; に書き換えると確認できる。結果、成立する ***⑥不等号の向きが反転する条件は? [#u2ff0f60] 右辺と左辺が挟む不等号(<や>)の向きが変わる時はどんな時か?これは&font(Red){両辺にマイナスのついた数を掛ける};と反転する 例えば\(-2\)を掛けたり、その逆数である\(-\frac { 1 }{ 2 } \)を掛けると符号が逆転する 例:④から考えると… \(\displaystyle\ ({ a }^{ 2 }+b^{ 2 })\times \left( -2 \right)\) &font(red){\(>\)};\(\left( 2ab \right) \times \left( -2 \right) \quad \quad \rightarrow \quad \quad -{ 2a }^{ 2 }-2b^{ 2 }\)&font(Red){\(<\)};\(-4ab\) \(\displaystyle\ ({ a }^{ 2 }+b^{ 2 })\times \left( -\frac { 1 }{ 2 } \right)\) &font(Red){\(>\)};\(\left( 2ab \right) \times \left( -\frac { 1 }{ 2 } \right) \quad \quad \rightarrow \quad \quad -\frac { { a }^{ 2 }+b^{ 2 } }{ 2 }\) &font(Red){\(<\)};\(-ab\) コードで確かめる際は、15行目~18行目を left = -2f * a * a + -2f * b * b; right = -4f * a * b; print (string.Format ("a={0} : b={1} : {2} < {3}", a, b, left, right)); if (!(left < right)) { もしくは left = -((a * a) + (b * b)) / 2; right = -a * b; print (string.Format ("a={0} : b={1} : {2} < {3}", a, b, left, right)); if (!(left < right)) { として確認する。結果、成立する ***⑦\(\left( { a }^{ 2 }+{ b }^{ 2 } \right) \times \frac { 1 }{ 2 } >2ab\times \frac { 1 }{ 2 } \quad \quad \rightarrow \quad \frac { { a }^{ 2 }+{ b }^{ 2 } }{ 2 } >ab\quad \quad \quad aとbが0以外の実数である場合、この式は成立するか?\) [#dc888bdf] 15~18行目を以下に書き換え確認。成立する left = ((a * a) + (b * b)) / 2f; right = a * b; print (string.Format ("a={0} : b={1} : {2} > {3}", a, b, left, right)); if (!(left > right)) { ***⑧\(\frac { a+b }{ 2 } >\sqrt { ab } \quad \quad \quad aとbが0以外の実数である場合、この式は成立するか?\) [#x054ff76] #jsmath ここで式を少し書き換える。単純に\(a\)としていた文字を\(x\)に、\(b\)としていた文字を\(y\)にして&font(Red){"定数から変数を扱う式に切換える"}; (意味が解らなければ[[基礎/数学に関する暗黙と習慣]]を参照) 式は\(\displaystyle\ \frac { a^{ 2 }+b^{ 2 } }{ 2 } >ab\) から \(\displaystyle\ \frac { { x }^{ 2 }+y^{ 2 } }{ 2 } >xy\) へと変化する ここから変数\(x\)と\(y\)に、\(x=\sqrt { a } ,y=\sqrt { b } \) を代入して再び定数の式に戻す 式は \(\displaystyle\ \frac { \sqrt { { a }^{ 2 } } +\sqrt { b^{ 2 } } }{ 2 } >\sqrt { ab } \quad \quad \quad \rightarrow \quad \quad \quad \frac { a+b }{ 2 } >\sqrt { ab } \) となる この式が成立するかを確認する。コードを以下に書き換え実行してみると… left = (a + b) / 2f; right = Mathf.Sqrt ((a * b)); print (string.Format ("a={0} : b={1} : {2} > {3}", a, b, left, right)); if (!(left > right)) { 結果、「成立しない!」が表示されてしまう。どうやら計算が合わない。このやり方は駄目だという事がわかる。何故、駄目なのか? ここでコードの出力を観察してみると right = Mathf.Sqrt ((a * b)); の部分で問題が発生している事に気が付く。原因は\(a,b\)の値と、右辺\(\sqrt { ab }\)の式にあった。この式を満たそうとする場合\(a,b\)の値はどちらも0以上の値にする必要がある。何故ならMathf.Sqrt関数は引数(パラメータ)がマイナス実数の場合、虚数として扱い計算結果にNaN(ヌル)を返す。これで計算が狂っていたのだ <虚数が発生する一例> Mathf.Sqrt ((-2 * 5)); → Mathf.Sqrt (-10); お互いを掛け合わせると-10になる値。2乗すると-10になる数。\(\sqrt { -10 } =?\) そんなものは、この世に存在しない。従って関数は「解なし」NaN(ヌル:からっぽのデータ)を返す。つまり、入力は\(a\ge 0\)、\(b\ge 0\)にする必要が出てくる。変数\(x,y\)に代入した定数が\(\sqrt { a },\sqrt { b }\)なのだから、これは発生して当然の不具合だったのだ。式の変形により平方根の虚数を避けるために前提条件を変える必要が出てきた memo:(機会が出てきたら調べる) -unityで虚数って、どうやって計算するの? -不等号(<>)は虚数の振る舞いに対応しているの? *** [#h3207ab3]
« Prev
Next »
高校数学/相加相乗平均の関係 のバックアップ一覧
高校数学/相加相乗平均の関係 のバックアップソース(No. All)
1: 2015-06-08 (月) 22:56:16
osinko
2: 2015-06-09 (火) 01:07:50
osinko
3: 2015-06-09 (火) 04:19:34
osinko
4: 2015-06-09 (火) 10:03:52
osinko
5: 2015-06-10 (水) 00:43:50
osinko
6: 2015-06-10 (水) 01:45:56
osinko
7: 2015-06-10 (水) 12:25:47
osinko
8: 2015-06-10 (水) 16:35:07
osinko
現: 2015-06-10 (水) 23:24:58
osinko