#09 ふれてみよう高校数学 関数
指数関数
指数関数の定義
「銀行の金利」「ウイルスの感染拡大」「放射性物質の崩壊」——これらはすべて「同じ割合で増える(または減る)」という共通点があります。1年後に2倍、2年後に4倍、3年後に8倍……と倍々に増えるとき、 年後の量は で表されます。
これを一般化して、変数 を指数(べき乗の部分)に使った関数が指数関数です。
、 のとき、 の関数
を指数関数といいます。
底 の値による違い
| 条件 | グラフの形 | 増減 |
|---|---|---|
| 右上がり | 単調増加 | |
| 右下がり | 単調減少 |
どちらの場合も を通る( なので)ことが特徴です——「どんな底でも0乗は1」というルールの表れです。
指数関数の性質
指数の計算ルールは中学校で習ったものと同じです——「掛け算は指数の足し算、割り算は指数の引き算」:
インタラクティブデモ:各底での指数曲線の比較
(青)、(オレンジ)、(赤)の3つを描画します。すべて を通ることと、底が大きいほど増加が急であることを確認してください。マウスを左右に動かすと、現在の での各値が表示されます—— あたりで がいかに急激に大きくなるかが見てとれます。
青: 2ˣ オレンジ: 3ˣ 赤: (1/2)ˣ すべて (0,1) を通る
function loop() {
ctx.clearRect(0, 0, W, H);
var ox = W / 2 - 40, oy = H - 40;
var scaleX = 55, scaleY = 40;
var xVal = (mx / W) * 6 - 1;
function toScreen(x, y) {
return { sx: ox + x * scaleX, sy: oy - y * scaleY };
}
// Grid
ctx.strokeStyle = 'rgba(255,255,255,0.06)';
ctx.lineWidth = 1;
for (var gx = -2; 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 = 0; gy <= 8; gy += 2) {
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.35)';
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();
// Axis tick labels
ctx.fillStyle = 'rgba(255,255,255,0.45)';
ctx.font = '12px sans-serif';
for (var lx = -1; lx <= 5; lx++) {
var ls = toScreen(lx, 0);
ctx.fillText(lx, ls.sx - 4, oy + 16);
}
for (var ly = 2; ly <= 8; ly += 2) {
var ls2 = toScreen(0, ly);
ctx.fillText(ly, ox + 6, ls2.sy + 4);
}
// y=2^x - blue
ctx.strokeStyle = '#4fc3f7';
ctx.lineWidth = 2.5;
ctx.beginPath();
var started2 = false;
for (var xi = -2; xi <= 5.5; xi += 0.03) {
var yi = Math.pow(2, xi);
if (yi > 9) { started2 = false; continue; }
var s = toScreen(xi, yi);
if (!started2) { ctx.moveTo(s.sx, s.sy); started2 = true; } else ctx.lineTo(s.sx, s.sy);
}
ctx.stroke();
ctx.fillStyle = '#4fc3f7';
ctx.font = 'bold 13px sans-serif';
ctx.fillText('y = 2ˣ', toScreen(3.2, 9).sx, toScreen(3.2, 9).sy);
// y=3^x - orange
ctx.strokeStyle = '#ff8a65';
ctx.lineWidth = 2.5;
ctx.beginPath();
var started3 = false;
for (var xi3 = -2; xi3 <= 5.5; xi3 += 0.03) {
var yi3 = Math.pow(3, xi3);
if (yi3 > 9) { started3 = false; continue; }
var s3 = toScreen(xi3, yi3);
if (!started3) { ctx.moveTo(s3.sx, s3.sy); started3 = true; } else ctx.lineTo(s3.sx, s3.sy);
}
ctx.stroke();
ctx.fillStyle = '#ff8a65';
ctx.fillText('y = 3ˣ', toScreen(2.0, 9.2).sx, toScreen(2.0, 9.2).sy);
// y=(1/2)^x - red
ctx.strokeStyle = '#ef5350';
ctx.lineWidth = 2.5;
ctx.beginPath();
var startedH = false;
for (var xi4 = -2; xi4 <= 5.5; xi4 += 0.03) {
var yi4 = Math.pow(0.5, xi4);
if (yi4 > 9) { startedH = false; continue; }
var s4 = toScreen(xi4, yi4);
if (!startedH) { ctx.moveTo(s4.sx, s4.sy); startedH = true; } else ctx.lineTo(s4.sx, s4.sy);
}
ctx.stroke();
ctx.fillStyle = '#ef5350';
ctx.fillText('y = (½)ˣ', toScreen(-1.5, 3.5).sx, toScreen(-1.5, 3.5).sy);
// (0,1) highlighted
var s01 = toScreen(0, 1);
ctx.strokeStyle = '#ffeb3b';
ctx.lineWidth = 2;
ctx.beginPath(); ctx.arc(s01.sx, s01.sy, 8, 0, Math.PI * 2); ctx.stroke();
ctx.fillStyle = '#ffeb3b';
ctx.font = '12px sans-serif';
ctx.fillText('(0, 1)', s01.sx + 10, s01.sy - 8);
// Vertical scan line
var xClamped = Math.max(-1.5, Math.min(5, xVal));
var scanSx = toScreen(xClamped, 0).sx;
ctx.strokeStyle = 'rgba(255,235,59,0.4)';
ctx.lineWidth = 1;
ctx.setLineDash([4,3]);
ctx.beginPath(); ctx.moveTo(scanSx, 0); ctx.lineTo(scanSx, H); ctx.stroke();
ctx.setLineDash([]);
// Points on curves
var v2 = Math.pow(2, xClamped), v3 = Math.pow(3, xClamped), vH = Math.pow(0.5, xClamped);
if (v2 <= 9) { var p2 = toScreen(xClamped, v2); ctx.fillStyle = '#4fc3f7'; ctx.beginPath(); ctx.arc(p2.sx, p2.sy, 5, 0, Math.PI*2); ctx.fill(); }
if (v3 <= 9) { var p3 = toScreen(xClamped, v3); ctx.fillStyle = '#ff8a65'; ctx.beginPath(); ctx.arc(p3.sx, p3.sy, 5, 0, Math.PI*2); ctx.fill(); }
if (vH <= 9) { var pH = toScreen(xClamped, vH); ctx.fillStyle = '#ef5350'; ctx.beginPath(); ctx.arc(pH.sx, pH.sy, 5, 0, Math.PI*2); ctx.fill(); }
// Info panel
ctx.fillStyle = 'rgba(0,0,0,0.65)';
ctx.beginPath(); ctx.roundRect(10, 10, 200, 90, 8); ctx.fill();
ctx.fillStyle = '#ffeb3b';
ctx.font = 'bold 13px monospace';
ctx.fillText('x = ' + xClamped.toFixed(2), 18, 32);
ctx.fillStyle = '#4fc3f7';
ctx.font = '13px monospace';
ctx.fillText('2ˣ = ' + (v2 <= 9 ? v2.toFixed(3) : '>9'), 18, 52);
ctx.fillStyle = '#ff8a65';
ctx.fillText('3ˣ = ' + (v3 <= 9 ? v3.toFixed(3) : '>9'), 18, 70);
ctx.fillStyle = '#ef5350';
ctx.fillText('(½)ˣ = ' + vH.toFixed(3), 18, 90);
requestAnimationFrame(loop);
}
loop(); ネイピア数
銀行に100万円預けたとして、年利100%で「年1回複利」なら1年後は200万円。「半年ごと複利」なら 万円。「毎日複利」ならもっと増える——「複利の頻度を無限に増やしたら何倍になるか?」を計算した数が です。
自然対数の底として特別重要な定数:
は微分しても自分自身になる()という唯一の指数関数です——「変化率が自分自身に等しい」という特別な性質が、物理や工学で多用される理由です。
指数の計算ルール(まとめ)
「分数の指数はルート(根号)に変換できる」——、 というのは特に頻出です。
練習問題
- を計算せよ。
- のグラフと のグラフはどのような関係にあるか。
- を を底とする指数関数で表せ。
- を解け。
解答
- 軸に関して対称( なので)
- → →
まとめ
- ()は を通る——「0乗はいつも1」
- :単調増加(急速に大きくなる)、:単調減少(急速に小さくなる)
- と は 軸に関して対称——「プラス方向とマイナス方向の鏡像」
- は自然対数の底——「無限複利計算から生まれた数」
次回は対数関数を学びます。指数関数の「逆函数」で、「何乗すると〇〇になるか」を求める道具です。