#04 ふれてみよう高校数学 解析(微分・積分・極限)

微分の計算規則

微分の基本公式

「毎回ゼロから計算しなくていい、便利なパターンがある」——前回は定義から ddxx2=2x\dfrac{d}{dx}x^2 = 2x を導きました。しかし毎回定義から計算するのは大変です。以下の公式を覚えておくと、ほとんどの関数を素早く微分できます。

べき乗則(Power Rule)

xx の肩の数を前に降ろして、肩の数を 1 つ減らす」——これがべき乗則のパターンです:

ddxxn=nxn1(n は実数)\frac{d}{dx} x^n = n x^{n-1} \quad (n \text{ は実数})
f(x)f(x)f(x)f'(x)
x1=xx^1 = x11
x2x^22x2x
x3x^33x23x^2
x4x^44x34x^3
x1/2=xx^{1/2} = \sqrt{x}12x\dfrac{1}{2\sqrt{x}}
x1=1xx^{-1} = \dfrac{1}{x}x2=1x2-x^{-2} = -\dfrac{1}{x^2}

定数の微分

「一定の高さの水平な道の傾きはゼロ」——定数は変化しないので微分するとゼロになります:

ddxc=0(c は定数)\frac{d}{dx} c = 0 \quad (c \text{ は定数})

定数倍の法則

「2 倍にした関数の傾きは、元の関数の傾きの 2 倍」——スケールを変えても傾きの比率は保たれます:

ddx[cf(x)]=cf(x)\frac{d}{dx}[c \cdot f(x)] = c \cdot f'(x)

和・差の法則

「足した関数の傾きは、それぞれの傾きを足したもの」——微分は足し算と順序を入れ替えられます:

ddx[f(x)±g(x)]=f(x)±g(x)\frac{d}{dx}[f(x) \pm g(x)] = f'(x) \pm g'(x)

具体的な計算例

例 1: f(x)=3x42x2+5x7f(x) = 3x^4 - 2x^2 + 5x - 7——「各項に対してべき乗則を適用するだけ」:

f(x)=12x34x+5f'(x) = 12x^3 - 4x + 5

例 2: f(x)=x+1x=x1/2+x1f(x) = \sqrt{x} + \dfrac{1}{x}= x^{1/2} + x^{-1}——「分数のべき乗に書き直してからべき乗則を使う」:

f(x)=12x1/2+(1)x2=12x1x2f'(x) = \frac{1}{2}x^{-1/2} + (-1)x^{-2} = \frac{1}{2\sqrt{x}} - \frac{1}{x^2}

例 3: f(x)=(x+1)2=x2+2x+1f(x) = (x+1)^2 = x^2 + 2x + 1

f(x)=2x+2=2(x+1)f'(x) = 2x + 2 = 2(x+1)

「展開してから微分するのが基本」——まず展開して多項式の形にしてから各項を微分します。


微分係数の符号と増減

「上り坂か下り坂か」——導関数 f(x)f'(x) の符号が f(x)f(x) の増減と直結しています。坂の傾きが正なら上り坂、負なら下り坂です:

  • f(x)>0f'(x) > 0 ならば f(x)f(x) はその区間で増加——「傾きが正 = 上り坂」
  • f(x)<0f'(x) < 0 ならば f(x)f(x) はその区間で減少——「傾きが負 = 下り坂」
  • f(x)=0f'(x) = 0 ならば極値の候補(増減が逆転する点)——「傾きがゼロ = 山頂または谷底」

デモ:f(x)=x3f(x) = x^3f(x)=3x2f'(x) = 3x^2

f(x)=x3f(x) = x^3(青)と f(x)=3x2f'(x) = 3x^2(緑)を重ねて描いています。f(x)=3x20f'(x) = 3x^2 \geq 0 なので、f(x)f(x) は常に単調増加(x=0x = 0f(0)=0f'(0) = 0、一時的に「平ら」になる)。マウスを動かすと接線の傾きがリアルタイムに表示されます。

f(x)=x³(青)と f'(x)=3x²(緑)。f' > 0 のとき f は増加。
function loop() {
ctx.clearRect(0, 0, W, H);
var scale=50;
var ox=W/2, oy=H/2;

function toSx(x){return ox+x*scale;}
function toSy(y){return oy-y*scale;}

function drawAxes(){
  ctx.strokeStyle='rgba(255,255,255,0.15)';
  ctx.lineWidth=1;
  ctx.beginPath();ctx.moveTo(0,oy);ctx.lineTo(W,oy);ctx.stroke();
  ctx.beginPath();ctx.moveTo(ox,0);ctx.lineTo(ox,H);ctx.stroke();
  ctx.fillStyle='rgba(255,255,255,0.25)';
  ctx.font='10px monospace';
  ctx.textAlign='center';
  for(var i=-5;i<=5;i++){
    if(i===0)continue;
    ctx.fillText(i,toSx(i),oy+14);
  }
  ctx.textAlign='right';
  for(var j=-3;j<=3;j++){
    if(j===0)continue;
    ctx.fillText(j,ox-6,toSy(j)+4);
  }
}

function plotCurve(f,color,lw){
  ctx.strokeStyle=color;ctx.lineWidth=lw||2;
  ctx.beginPath();
  var first=true;
  for(var xi=-W/2;xi<=W/2;xi+=1){
    var x=xi/scale;
    var y=f(x);
    if(!isFinite(y)||Math.abs(y)>H/scale+1){first=true;continue;}
    if(first){ctx.moveTo(toSx(x),toSy(y));first=false;}
    else ctx.lineTo(toSx(x),toSy(y));
  }
  ctx.stroke();
}

ctx.fillStyle='#0d1117';
ctx.fillRect(0,0,W,H);
drawAxes();

// f(x)=x^3
plotCurve(function(x){return x*x*x;},'#4fc3f7',2.5);
// f'(x)=3x^2
plotCurve(function(x){return 3*x*x;},'#81c784',2.5);

// Mouse: show tangent at x0 on x^3
var x0=(mx-ox)/scale;
x0=Math.max(-2.8,Math.min(2.8,x0));
var y0=x0*x0*x0;
var slope=3*x0*x0;

// Shade region based on sign of f'
// f'(x)=3x^2 >= 0 always, so always increasing
// Color the region under derivative
ctx.fillStyle='rgba(129,199,132,0.08)';
ctx.fillRect(0,0,W,oy);

// Tangent line
var ext=2.5;
ctx.strokeStyle='rgba(255,202,40,0.9)';
ctx.lineWidth=1.5;
ctx.setLineDash([5,4]);
ctx.beginPath();
ctx.moveTo(toSx(x0-ext),toSy(y0+slope*(-ext)));
ctx.lineTo(toSx(x0+ext),toSy(y0+slope*(ext)));
ctx.stroke();
ctx.setLineDash([]);

// Point on f(x)
ctx.beginPath();ctx.arc(toSx(x0),toSy(y0),6,0,Math.PI*2);
ctx.fillStyle='#ffca28';ctx.fill();

// Point on f'(x)
var yPrime=3*x0*x0;
ctx.beginPath();ctx.arc(toSx(x0),toSy(yPrime),5,0,Math.PI*2);
ctx.fillStyle='#a5d6a7';ctx.fill();

// Vertical dashed lines
ctx.setLineDash([3,3]);
ctx.strokeStyle='rgba(255,202,40,0.3)';
ctx.lineWidth=1;
ctx.beginPath();ctx.moveTo(toSx(x0),toSy(y0));ctx.lineTo(toSx(x0),toSy(yPrime));ctx.stroke();
ctx.beginPath();ctx.moveTo(toSx(x0),toSy(yPrime));ctx.lineTo(toSx(x0),oy);ctx.stroke();
ctx.setLineDash([]);

// Info panel
ctx.fillStyle='rgba(0,0,0,0.65)';
ctx.fillRect(8,8,230,72);
ctx.fillStyle='#4fc3f7';
ctx.font='13px monospace';ctx.textAlign='left';
ctx.fillText('x = '+x0.toFixed(3),16,28);
ctx.fillText('f(x) = x³ = '+y0.toFixed(3),16,46);
ctx.fillStyle='#81c784';
ctx.fillText("f'(x) = 3x² = "+yPrime.toFixed(3),16,64);

// Legend
ctx.fillStyle='#4fc3f7';
ctx.font='12px sans-serif';ctx.textAlign='right';
ctx.fillText('── f(x) = x³',W-10,H-28);
ctx.fillStyle='#81c784';
ctx.fillText("── f'(x) = 3x²",W-10,H-10);

requestAnimationFrame(loop);
}
loop();

べき乗則の証明(概略)

「なぜ肩の数を前に降ろすと正しいのか」——二項定理を使って差分商を展開します:

(x+h)nxnh=xn+nxn1h+(n2)xn2h2+xnh\frac{(x+h)^n - x^n}{h} = \frac{x^n + nx^{n-1}h + \binom{n}{2}x^{n-2}h^2 + \cdots - x^n}{h} =nxn1+(n2)xn2h+= nx^{n-1} + \binom{n}{2}x^{n-2}h + \cdots

h0h \to 0 で第 2 項以降が消え、nxn1nx^{n-1} だけ残ります——「hh を含む項はすべてゼロに近づく」ので、残るのは先頭項だけです。


高階導関数

「傾きをさらに微分する」——坂の急さ(傾き)の変化率も測れます。「坂がだんだん急になるか、なだらかになるか」がグラフの曲がり具合を決めます:

f(x)=d2fdx2=ddx[dfdx]f''(x) = \frac{d^2f}{dx^2} = \frac{d}{dx}\left[\frac{df}{dx}\right]
  • f(x)=x3f(x) = x^3 のとき f(x)=3x2f'(x) = 3x^2f(x)=6xf''(x) = 6x
  • f(x)>0f''(x) > 0 : グラフが下に凸(上に開いたお椀型)——「坂の傾きが増加している = 上に開く」
  • f(x)<0f''(x) < 0 : グラフが上に凸(下に開いたお椀型)——「坂の傾きが減少している = 下に開く」

f(x)=0f''(x) = 0 となる点を変曲点(inflection point)といいます——「凹凸が切り替わる場所」です。


まとめ

ddxxn=nxn1,ddxc=0,ddx[cf(x)]=cf(x)\frac{d}{dx}x^n = nx^{n-1}, \quad \frac{d}{dx}c = 0, \quad \frac{d}{dx}[cf(x)] = cf'(x) ddx[f±g]=f±g\frac{d}{dx}[f \pm g] = f' \pm g'
  • f(x)>0f'(x) > 0 のとき ff は増加、f(x)<0f'(x) < 0 のとき減少——「符号が坂の方向を教えてくれる」
  • 高階導関数で凹凸を判定できる——「ff'' の符号がグラフの曲がり方を決める」

次回は積・商・合成関数の微分——より複雑な関数を扱うための 3 つの重要ルールです。