数学まるわかり
大学入試出題範囲を全部カバー (+ α)
Perl, GNUPLOT, Wolfram|Alpha の使いかたも紹介。
Math Battle 作成 (代表: 湯会博士)
|
[ ピタゴラスの定理 (Pythagorean theorem) ]
最も有名な定理の一つでしょう。古来 証明法は 100 種類ぐらいあると言われています。
ここでは最も簡単な (目でみてすぐわかる) 方法で証明しましょう。
下に示すように (a, b, c) という辺長で構成される合同な直角三角形 (c が斜辺)
が 4 個と赤い正方形が黒い正方形の中にピッタリはいっている状態を考えます。
この教材では:
- 乗算 (掛け算) には「*」、 除算 (割り算) には「/」を使います。
- 「a かける b」は「ab」とは書かず、「a * b」または「a*b」と書きます。
① 黒い正方形の面積 | c2 |
② 4 個の直角三角形の面積和 | a*b/2 * 4 = 2*a*b |
③ 赤い正方形の面積 | (b - a)2 |
① = ② + ③ ですから:
c2 = 2*a*b + (b - a)2
右辺は:
2*a*b + (b - a)2
= 2*a*b + a2 - 2*a*b + b2
= a2 + b2
すなわち
a2 + b2 = c2
-
cos(C) に関する余弦定理 (あとで出てきます) は
cos(C) = (a2 + b2 - c2) /
(2*a*b) ですが、
cos(C) = 0 (∠C が直角) の場合はピタゴラスの定理と同じになってしまいます。
-
いっぽう cos(C) = -1 のときは:
(a2 + b2 - c2) / (2*a*b) = -1
a2 + b2 - c2 = -2*a*b
(a + b)2 = c2
a + b = c
三角形はペチャンコ状態 (∠C = 180°) です。
-
ピタゴラスの定理は直角三角形でだけ成り立ちますが、
余弦定理は任意の三角形で成り立ち、幾何学問題でよく使います。
この図を GNUPLOT でプロットした際の GNUPLOT への入力は以下のとおりです。
set size ratio -1
unset zeroaxis
unset grid
unset border
set offsets 0.1,0.1,0.1,0.1
plot "blue" with lines lc rgb "blue" lw 2 title "","rectangle" with lines lc rgb "black" lw 2 title "", "rectangle2" with lines lc rgb "red" lw 2 title ""
|
さっそくピタゴラスの定理を使って A (-1, 2) と B (5, 10) の間の直線距離を計算しましょう。距離は sqrt((5+1)2 + (10-2)2) になりますね。
Wolfram|Alpha
への入力は: sqrt((5+1)^2 + (10-2)^2) とします。
^2 は 2 乗の意味です。
ちゃんと答が 10 になりましたか?
sqrt が嫌な人は ((5+1)^2 + (10-2)^2)^(1/2) と入力してもいいです。
(1/2) 乗は平方根です。
なんのことはない、3 : 4 : 5 の直角三角形が隠れていたわけでした。
[ 原始ピタゴラス数 ]
ピタゴラスの定理を満たし共通の約数 (公約数) を持たない自然数 (a, b, c)
の組み合わせを原始ピタゴラス数 (primitive Pithagorean triple) と呼びます。
(3, 4, 5) や (5, 12, 13) がそうですね。
c が 100 までの範囲でほかにあるでしょうか?
(a, b, c) =
(3, 4, 5), (5, 12, 13), (7, 24, 25), (8, 15, 17), (9, 40, 41),
(11, 60, 61), (12, 35, 37), (13, 84, 85), (16, 63, 65),
(20, 21, 29), (28, 45, 53), (33, 56, 65), (36, 77, 85),
(39, 80, 89), (48, 55, 73), (65, 72, 97)
|
の 16 個です。
Perl でこの探索をおこなうプログラムを作ってみましょう。
#!/usr/local/bin/perl
@found = ();
$count = 0;
for ($y=1; $y<10; $y++) {
for ($x=$y+1; $x<10; $x++) {
$a = $x*$x - $y*$y;
$b = 2*$x*$y;
$c = $x*$x + $y*$y;
# 互いに素でないものを無視。
$flag = 0;
for($n=2; $n<=$c; $n++) {
if (($a%$n == 0) && ($b%$n == 0)
&& ($c%$n == 0)) {
$flag = 1;
last;
}
}
next if ($flag == 1);
goto END if ($c >= 100);
if ($a > $b) {
$tmp = $a;
$a = $b;
$b = $tmp;
}
@found[$count++] =
sprintf("(%2d,%2d,%2d)", $a, $b, $c);
}
}
END:
printf("原始ピタゴラス数が %d セット見つかりました。\n",
$count);
@found = sort {$a cmp $b} @found;
for ($n=0; $n<$count; $n++) {
printf("%s\n", @found[$n]);
}
|
実行結果は:
原始ピタゴラス数が 16 セット見つかりました。
( 3, 4, 5)
( 5, 12, 13)
( 7, 24, 25)
( 8, 15, 17)
( 9, 40, 41)
(11, 60, 61)
(12, 35, 37)
(13, 84, 85)
(16, 63, 65)
(20, 21, 29)
(28, 45, 53)
(33, 56, 65)
(36, 77, 85)
(39, 80, 89)
(48, 55, 73)
(65, 72, 97)
きれいに並んでいますね。(a の値の順)
結果は正しいと思います。
このプログラムのアルゴリズム (algorithm) について補足します。
x > y の範囲で:
a = x2 - y2
b = 2*x*y
c = x2 + y2
としますと:
a2 + b2
= (x2 - y2)2 + 4*x2*y2
= x4 + 2*x2*y2 + y4
= (x2 + y2)2
= c2
(a, b, c) はピタゴラスの定理を満たします。
見つかった (a,b,c) の中で a と b と c が公約数を持つものを除外していますから、
残るのは原始ピタゴラス数だけです。
これらを ( 3, 4, 5) などの文字列にして @found 配列に順次入れ、
最後に Perl 組み込みの sort 関数で昇順にソートします。
sort 結果を @found 配列にもどし、@found 配列から順次要素を取り出して
printf します。
なお、c の上限を 1000 にしますと見つかったのは 93 セット、
10000 にしますと見つかったのは 630 セットでした。
上限が 10 倍になっても約 5.8 倍、
100 倍になっても約 39 倍です。
このことから、
数が大きい範囲では原始ピタゴラス数の出現頻度がさがってゆくことが言えます。
なお 20200813 (2020年8月13日) は素数であり、
(8709595, 18226788, 20200813) という原始ピタゴラス数三角形の斜辺です。
Wolfram|Alpha
でまずピタゴラスの定理を満たしていることを確認しましょう。
「真」という答は入力した式が正しいという意味です。
20200813 だけを Wolfram|Alpha に入力すれば 20200813 という数に関する詳しい情報が得られます。
皆さんの誕生日は数学的にどんな性質をもつ日でしたか?
1 次関数と 1 次方程式をとばして、2 次関数と 2 次方程式の説明に移ります。
2 次関数を次のようにあらわすことにします。
f(x) = a*x2 + b*x + c (a は 0 以外)
f(x) = 0 が 2 次方程式です。
さっそく解いてみましょう。
a*x2 + b*x + c = 0
a*(x2 + (b/a)*x) + c = 0
a*(x2 + (b/a)*x + b2/(4*a2)) + c = b2/(4*a)
a*(x + b/(2*a))2 = b2/(4*a) - c
(x + b/(2*a))2 = (b2 - 4*a*c)/(4*a2)
両辺の平方根をとります。± が必要なことに注意してください。
x + b/(2*a) = ± sqrt(b2 - 4*a*c)/(2*a)
x = (-b ± sqrt(b2 - 4*a*c))/(2*a)
ここで √ の中身 b2 - 4*a*c
の値が問題になります。
この式は判別式 (discriminant) と呼ばれています。2 次方程式にかぎらず、
一般の多項式方程式でも定義できます。
判別式の値 | 解は? |
正 | 2 個の異なる実数解。 |
0 | 重解 (重根)。 |
負 | 2 個の異なる複素数 (あるいは純虚数) 解。 |
y = a*x2 + b*x + c
の形にして 2 次元 XY 平面上に描画した曲線を放物線 (parabola) と呼びます。
物体を投げ上げたときの軌道になることからこの名前 (日本語) がつきました。
Newton 力学の運動方程式に関しては微分・積分のセクションで説明します。
a, b, c の値をいろいろ変えて Wolfram|Alpha に描画させてみてください。
方程式 a*x2 + b*x + c = 0 の解は
放物線 y = a*x2 + b*x + c と X 軸 (y = 0) との共通点 (交差点や接点)
の x 座標と考えてもいいです。
左辺が因数分解できる場合は、因数分解で解いてください。
-
x2 + 5*x + 6 = 0
(x + 2)*(x + 3) = 0
x = -3, -2 (小さい順に)
-
これは気がつかないかも...
x2 - 72*x + 1295 = 0
(x - 35)*(x - 37) = 0
x = 35, 37
判別式が 平方数 になる場合は
2 個の有理数解を持ちます。
判別式が負になる場合は、sqrt(-1) = i と定義します。
i は imaginary (想像上の) の頭文字です。虚数単位と呼びます。
x2 -2*x + 4 = 0 を考えてみましょう。
(x - 1)2 = -3 と変形できることから:
x = 1 ± i*sqrt(3)
放物線 x2 -2*x + 4 の頂点はグラフでもわかるとおり
(1, 3) です。
XY 平面上での放物線のグラフと、複素数解 A, B を複素平面上に表示したものを
並べて示します。複素平面の原点 (0, 0) を O と呼ぶことにすれば
∠AOB = 120° になります。
(三角関数のセクションで改めて説明しますが、
O,A,(2, 0) を結べば正三角形になります)
複素平面 (complex plane) は実数 (real) 部を横方向、
虚数 (imaginary) 部をタテ方向にとったものです。
[ 三角関数 (Trigonometric functions) ]
まず、直角三角形を使って基本的な三角関数の図解をします。
見本はここまでです。
|