#03 ふれてみよう高校数学 関数
二次関数と判別式
二次方程式の解の個数
想像してみてください——放物線を描いて「 軸と何回交わるか?」を考えてみます。
- 谷型の放物線が 軸より上にある → 一度も交わらない
- 谷型の放物線が 軸にちょうど触れる → 1点で接する
- 谷型の放物線が 軸をまたぐ → 2点で交わる
この「何回交わるか」を解の公式から読み取ることができます。二次方程式 の解は解の公式から得られます:
根号の中の の符号が解の個数を決定します。
判別式 D
は「判別式(discriminant)」と呼ばれます。「解が何個あるかを判別する」ための値です。
| の値 | 実数解の個数 | 放物線と x 軸 |
|---|---|---|
| 2個(相異なる2実解) | 2点で交わる | |
| 1個(重解) | 1点で接する | |
| 0個(実数解なし) | 交わらない |
直感的に言えば: がプラスなら「解が2つある( 軸と2回会う)」、ゼロなら「ちょうど接している(1回だけ会う)」、マイナスなら「浮いている(会わない)」です。
判別式の幾何学的意味
ならば なので解は2つ、 なら で解は1つ(重解)、 なら が虚数になり実数解はありません。
グラフで見ると、頂点の 座標 が
- の場合: なら 、 なら 、 なら
と対応しています。つまり「谷の底が 軸より下()か上()か」で解の個数が変わるのです。
インタラクティブデモ:判別式と放物線
マウスを上下に動かすと、放物線が縦方向に移動します。判別式 の値と x 軸との交点数が変わる様子を観察してみましょう。
- 青い放物線:( 軸と2点で交わる)
- 緑の放物線:( 軸にちょうど接する)
- 赤い放物線:( 軸と交わらない)
マウスを上下に動かすと放物線が移動し、判別式 D が変わります
function loop() {
ctx.clearRect(0, 0, W, H);
var ox = W / 2, oy = H / 2;
var scale = 55;
var a = 1, b = -2;
var shift = ((my / H) * 6 - 3);
// D=0 になる shift = b²/(4a) = 1 の近傍でスナップ
var snapAt = (b * b) / (4 * a);
if (Math.abs(shift - snapAt) < 0.18) shift = snapAt;
var c = shift;
var D = b * b - 4 * a * c;
function toScreen(x, y) {
return { sx: ox + x * scale, sy: oy - y * scale };
}
function f(x) { return a * x * x + b * x + c; }
// Grid
ctx.strokeStyle = 'rgba(255,255,255,0.06)';
ctx.lineWidth = 1;
for (var gx = -6; gx <= 6; gx++) {
var gs = toScreen(gx, 0);
ctx.beginPath(); ctx.moveTo(gs.sx, 0); ctx.lineTo(gs.sx, H); ctx.stroke();
}
for (var gy = -4; gy <= 4; gy++) {
var gs2 = toScreen(0, gy);
ctx.beginPath(); ctx.moveTo(0, gs2.sy); ctx.lineTo(W, gs2.sy); ctx.stroke();
}
// Axes
ctx.strokeStyle = 'rgba(255,255,255,0.3)';
ctx.lineWidth = 1.5;
ctx.beginPath(); ctx.moveTo(0, oy); ctx.lineTo(W, oy); ctx.stroke();
ctx.beginPath(); ctx.moveTo(ox, 0); ctx.lineTo(ox, H); ctx.stroke();
// Parabola color by discriminant
var pColor = D > 0.05 ? '#4fc3f7' : (D < -0.05 ? '#ef5350' : '#66bb6a');
ctx.strokeStyle = pColor;
ctx.lineWidth = 2.5;
ctx.beginPath();
var started = false;
for (var xi = -6; xi <= 6; xi += 0.03) {
var yi = f(xi);
if (Math.abs(yi) > 6) { started = false; continue; }
var s = toScreen(xi, yi);
if (!started) { ctx.moveTo(s.sx, s.sy); started = true; }
else ctx.lineTo(s.sx, s.sy);
}
ctx.stroke();
// Vertex
var vx = -b / (2 * a), vy = f(vx);
var vs = toScreen(vx, vy);
ctx.fillStyle = '#ffeb3b';
ctx.beginPath(); ctx.arc(vs.sx, vs.sy, 5, 0, Math.PI * 2); ctx.fill();
// Roots (if D >= 0)
if (D >= 0) {
var sqrtD = Math.sqrt(D);
var x1 = (-b + sqrtD) / (2 * a);
var x2 = (-b - sqrtD) / (2 * a);
var s1 = toScreen(x1, 0), s2 = toScreen(x2, 0);
ctx.fillStyle = '#ff8a65';
ctx.beginPath(); ctx.arc(s1.sx, s1.sy, 7, 0, Math.PI * 2); ctx.fill();
if (Math.abs(x1 - x2) > 0.01) {
ctx.beginPath(); ctx.arc(s2.sx, s2.sy, 7, 0, Math.PI * 2); ctx.fill();
}
ctx.fillStyle = 'rgba(255,138,101,0.9)';
ctx.font = '12px sans-serif';
ctx.fillText('x=' + x1.toFixed(2), s1.sx + 8, s1.sy - 10);
if (Math.abs(x1 - x2) > 0.01) {
ctx.fillText('x=' + x2.toFixed(2), s2.sx - 50, s2.sy - 10);
}
}
// D indicator
var dLabel = D > 0.05 ? 'D > 0:2つの実数解' : (D < -0.05 ? 'D < 0:実数解なし' : 'D = 0:重解(接する)');
var dColor2 = D > 0.05 ? '#4fc3f7' : (D < -0.05 ? '#ef5350' : '#66bb6a');
ctx.fillStyle = 'rgba(0,0,0,0.6)';
ctx.beginPath(); ctx.roundRect(10, 10, 270, 90, 8); ctx.fill();
ctx.fillStyle = '#ffffffcc';
ctx.font = 'bold 13px monospace';
ctx.fillText('y = x² + (' + b + ')x + (' + c.toFixed(2) + ')', 18, 32);
ctx.fillStyle = dColor2;
ctx.font = 'bold 14px sans-serif';
ctx.fillText(dLabel, 18, 56);
ctx.fillStyle = 'rgba(255,255,255,0.7)';
ctx.font = '13px monospace';
ctx.fillText('D = b²-4ac = ' + D.toFixed(2), 18, 80);
// Legend bar
var barY = H - 24;
ctx.fillStyle = 'rgba(0,0,0,0.5)';
ctx.beginPath(); ctx.roundRect(10, barY - 16, W - 20, 28, 6); ctx.fill();
ctx.font = '12px sans-serif';
ctx.fillStyle = '#4fc3f7'; ctx.fillText('■ D>0: 2交点', 20, barY);
ctx.fillStyle = '#66bb6a'; ctx.fillText('■ D=0: 接する', 130, barY);
ctx.fillStyle = '#ef5350'; ctx.fillText('■ D<0: 交点なし', 250, barY);
requestAnimationFrame(loop);
}
loop(); 解の公式と判別式の導出
「なぜ の符号で解の個数がわかるのか?」を確認しましょう。
を平方完成で解くと:
「 何か」という形になりました。
- 右辺が正():「 正の数」なので (何か)の2つの解
- 右辺がゼロ():「」なので の1つの解(重解)
- 右辺が負():「 負の数」は実数では不可能。実数解なし
実用的な判別式の使い方
判別式の最大の利点は「解を実際に計算しなくても、解の個数だけわかる」点です。
例:交点の個数を調べる
直線 と放物線 の交点の個数を調べよ( はパラメータ)。
「交点の個数」を求めるには、2つの式を連立させ、解の個数を調べればよいです。
連立すると: →
- : → 2交点(直線が放物線を「切る」)
- : → 1交点(直線が放物線に「接する」)
- : → 交点なし(直線が放物線の下を通る)
練習問題
次の二次方程式の判別式 を求め、解の個数を答えよ。
解答
- → 2実解()
- → 重解():ぴったり1点で接する
- → 実数解なし:放物線がx軸と交わらない
- → 2実解()
まとめ
判別式は、解を直接求めずに「解が存在するかどうか」「何個あるか」だけを素早く調べる強力なツールです。受験問題でもグラフ問題でもよく登場します。