高校数学​/相加相乗平均の関係

Unity学習帳2冊目高校数学 / 相加相乗平均の関係

相加相乗平均の関係 anchor.png

相加相乗平均の関係は以下の状態で変化しない

\(\displaystyle\ \frac { x+y }{ 2 } \ge \sqrt { xy } \quad \quad x,yは0以上の実数。x=yの時、等号が成立する\)

この関係は微分を利用して平方根を求める等の漸化式を作る際に非常に重要となる考え方な為、疑いもなく理解しておく必要がある
従って実際に、その関係が成立する事を検証して確かめておく


単純なケースから確かめていく

Page Top

① \({ r }^{ 2 }>0\quad \quad rが0以外の実数である場合、この式は成立するか?\) anchor.png

\(r=2\)\(4>0\)成立
\(r=-2\)\({ \left( -2 \right) }^{ 2 }>0\quad \rightarrow \quad 4>0\)成立
Page Top

② \({ \left( a-b \right) }^{ 2 }>0 \quad \quad aとbが0以外の実数である場合、この式は成立するか?\) anchor.png

アバウトな検証用コードを書く。条件を満たすランダムなa,bの値を50回生成して式を検証

Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
 
 
 
-
|
-
|
|
|
-
|
|
|
|
|
-
|
|
!
!
-
|
!
!
|
|
-
-
|
|
!
!
!
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以上の正の値になる」事を示している

Page Top

③\({ { a }^{ 2 }-2ab+{ b }^{ 2 } }>0\quad \quad \quad aとbが0以外の実数である場合、この式は成立するか?\) anchor.png

③の式は②を展開したものになる。理屈で考えると成立しないとおかしいが一応検証する
②のコードの15行目を

			left = (a * a) - 2f * a * b + (b * b);

とする。結果。成立している事が確認できる

Page Top

④ \({ { a }^{ 2 }+{ b }^{ 2 } }>2ab\quad \quad \quad aとbが0以外の実数である場合、この式は成立するか?\) anchor.png

③の式から2abを右辺に移項させる。この時、左辺と右辺、不等号の関係が成立するかという意味の大きな変化がある。検証してみる
コードを少し書き換えた。8、15~18行目を書き換えている

Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
 
 
 
-
|
-
|
|
|
-
|
|
|
|
|
|
-
|
|
!
!
-
|
!
!
|
|
-
-
|
|
!
!
!
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);
        }
    }
}

結果。成立する事が確認できた。不等号を挟んだ移項は成立する。単純な移項の場合、不等号の向きが変わることはない

Page Top

⑤ \({ \left( a+b \right) }^{ 2 }>0\quad \rightarrow \quad { a }^{ 2 }+2ab+b^{ 2 }>0\quad \rightarrow \quad \quad { a }^{ 2 }+b^{ 2 }>-2ab\) anchor.png

\(aとbが0以外の実数である場合、この式は成立するか?\)

これも普通に考えると成立する事が予想できる。コードの16行目を

           right = -2f * a * b;

に書き換えると確認できる。結果、成立する

Page Top

⑥不等号の向きが反転する条件は? anchor.png

右辺と左辺が挟む不等号(<や>)の向きが変わる時はどんな時か?これは両辺にマイナスのついた数を掛けると反転する
例えば\(-2\)を掛けたり、その逆数である\(-\frac { 1 }{ 2 } \)を掛けると符号が逆転する

例:④から考えると…

\(\displaystyle\ ({ a }^{ 2 }+b^{ 2 })\times \left( -2 \right)\) \(>\)\(\left( 2ab \right) \times \left( -2 \right) \quad \quad \rightarrow \quad \quad -{ 2a }^{ 2 }-2b^{ 2 }\)\(<\)\(-4ab\)

\(\displaystyle\ ({ a }^{ 2 }+b^{ 2 })\times \left( -\frac { 1 }{ 2 } \right)\) \(>\)\(\left( 2ab \right) \times \left( -\frac { 1 }{ 2 } \right) \quad \quad \rightarrow \quad \quad -\frac { { a }^{ 2 }+b^{ 2 } }{ 2 }\) \(<\)\(-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)) {

として確認する。結果、成立する

Page Top

⑦\(\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以外の実数である場合、この式は成立するか?\) anchor.png

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)) {
Page Top

⑧\(\frac { a+b }{ 2 } >\sqrt { ab } \quad \quad \quad aとbが0以外の実数である場合、この式は成立するか?\) anchor.png

ここで式を少し書き換える。単純に\(a\)としていた文字を\(x\)に、\(b\)としていた文字を\(y\)にして"定数から変数を扱う式に切換える"
(意味が解らなければ基礎​/数学に関する暗黙と習慣を参照)

式は\(\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で虚数って、どうやって計算するの?
  • 不等号(<>)は虚数の振る舞いに対応しているの?
Page Top

⑨ \(\frac { a+b }{ 2 } \ge \sqrt { ab } \quad \quad \quad a\ge 0,b\ge 0の実数である場合、この式は成立するか?\) anchor.png

これを確認してみる。条件を虚数を避ける様にする為、コードの18行目を以下に書き換える

						if (!(left >= right)) {

それと31、32行目を以下に書き換える

						a = Random.Range (0f, 100f);
						b = Random.Range (0f, 100f);

これを実行して結果、成立することが確認できる

この章の冒頭にあった相加相乗平均の関係の数式は
\(\displaystyle\ \frac { x+y }{ 2 } \ge \sqrt { xy } \quad \quad x,yは0以上の実数。x=yの時、等号が成立する\)
であったので、これに沿うように\(a\)と\(b\)を\(x,y\)の変数にすることで式は完成する

変数になったことで値が条件を満たしていれば式は常にこの関係を恒久的に保つ事が確認できた
この右辺や左辺に似た数式を見かけたときは、この相加相乗平均の関係を思い出せるようにしておくと「数学における武器」が一つ増えるようだ

ちなみに、この左辺右辺の数式は放物線上の2点の接線の交点の座標でも見かける


添付ファイル:

トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Last-modified: 2015-06-10 (水) 23:24:58 (JST) (3244d) by osinko