積・商・合成関数の微分
積の微分法則(Product Rule)
「2 つの数量の掛け算の変化率は、単純にそれぞれの変化率を掛け合わせたものではない」——たとえば、長方形の面積は「縦 × 横」ですが、縦と横が同時に変化するとき、面積の変化率は「縦の変化率 × 横 + 縦 × 横の変化率」になります。
の微分は、単純に ではありません。正しくは:
語呂合わせ: 「前の微分 × 後ろ」+「前 × 後ろの微分」——「左を微分して右をそのまま足す、右を微分して左をそのまま足す」
例
、、、 なので——「 を微分 + を微分」:
商の微分法則(Quotient Rule)
「分数の変化率」——分子と分母が両方変化するときの求め方です:
語呂合わせ: 「前の微分 × 後ろ − 前 × 後ろの微分」を分母の二乗で割る——積の法則とよく似ていますが、符号が「プラス」ではなく「マイナス」になります。
例
、、、——「分子を微分してから分母をかける、分子をそのままで分母を微分したものを引く」:
合成関数の微分(Chain Rule・連鎖律)
「外側のコーティングを剥がしてから内側を微分する」——入れ子になった関数の微分は、外と内を順番に処理します。
という「入れ子」になった関数の微分:
または
語呂合わせ: 「外の微分(中身はそのまま)× 中の微分」——「外の皮を微分して、中はそのまま残して、最後に中身の微分をかける」
例
外関数 、内関数 ——「 の微分は 、中身はそのまま、あとで の微分をかける」:
デモ:積の微分を視覚化
(赤)と (緑)の積 (青)、そしてその導関数(黄)を描画します。マウスでどの点でも接線の傾きを確認できます。
function loop() {
ctx.clearRect(0, 0, W, H);
var scale=55;
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.12)';
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);
}
}
function plotCurve(fn,color,lw,dash){
ctx.strokeStyle=color;ctx.lineWidth=lw||1.5;
if(dash)ctx.setLineDash(dash);else ctx.setLineDash([]);
ctx.beginPath();
var first=true;
for(var xi=-W/2;xi<=W/2;xi+=1){
var x=xi/scale;
var y=fn(x);
if(!isFinite(y)||Math.abs(y)>H/scale+0.5){first=true;continue;}
if(first){ctx.moveTo(toSx(x),toSy(y));first=false;}
else ctx.lineTo(toSx(x),toSy(y));
}
ctx.stroke();
ctx.setLineDash([]);
}
var f=function(x){return Math.sin(x);};
var g=function(x){return 0.3*x+0.5;};
var h=function(x){return f(x)*g(x);};
// h'(x) = cos(x)*(0.3x+0.5) + sin(x)*0.3
var hd=function(x){return Math.cos(x)*(0.3*x+0.5)+Math.sin(x)*0.3;};
ctx.fillStyle='#0d1117';
ctx.fillRect(0,0,W,H);
drawAxes();
plotCurve(f,'rgba(239,83,80,0.5)',1.5);
plotCurve(g,'rgba(129,199,132,0.5)',1.5);
plotCurve(h,'#4fc3f7',2.5);
plotCurve(hd,'rgba(255,202,40,0.85)',2,[5,3]);
// Mouse interaction
var x0=(mx-ox)/scale;
x0=Math.max(-4.5,Math.min(4.5,x0));
var y0=h(x0);
var slope=hd(x0);
var ext=1.8;
ctx.strokeStyle='rgba(255,255,255,0.6)';
ctx.lineWidth=1;
ctx.setLineDash([4,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([]);
ctx.beginPath();ctx.arc(toSx(x0),toSy(y0),5,0,Math.PI*2);
ctx.fillStyle='#fff';ctx.fill();
// Info
ctx.fillStyle='rgba(0,0,0,0.65)';
ctx.fillRect(8,8,265,90);
ctx.font='12px monospace';ctx.textAlign='left';
ctx.fillStyle='#ef5350';
ctx.fillText('f(x) = sin x',14,26);
ctx.fillStyle='#81c784';
ctx.fillText('g(x) = 0.3x+0.5',14,44);
ctx.fillStyle='#4fc3f7';
ctx.fillText('h(x) = f·g = '+y0.toFixed(3),14,62);
ctx.fillStyle='#ffca28';
ctx.fillText("h'(x) = "+slope.toFixed(3)+' (x='+x0.toFixed(2)+')',14,80);
// Legend bottom
ctx.font='11px sans-serif';ctx.textAlign='right';
ctx.fillStyle='#4fc3f7'; ctx.fillText('── h(x)=f·g',W-10,H-28);
ctx.fillStyle='rgba(255,202,40,0.85)'; ctx.fillText("- - h'(x)",W-10,H-10);
requestAnimationFrame(loop);
}
loop(); 連鎖律の詳細例
二重合成
「 の中に が入っている」——外から順番に微分します:
と置くと ——「外の を微分して中身はそのまま、あとで中身 の微分をかける」:
三重合成
「さらに外側に がある」——連鎖律を 2 回続けて適用します:
、 として——「 を微分、次に を微分、最後に を微分」:
積の法則の証明
「なぜ になるのか」——差分商を用いて証明できます:
分子に を加えて——「ゼロを加えても式は変わらない」ので、うまく変形できます:
で (連続性より)、各差分商は 、 に収束。よって:
よく使う組み合わせ
「合成関数の微分のよく出るパターン」——これを覚えておくと計算がスムーズになります:
| 関数 | 微分 |
|---|---|
まとめ
- 積:「左を微分して右をそのまま」プラス「左をそのままで右を微分」
- 商:分子は積と同じ符号の引き算、分母は元の分母の二乗
- 連鎖律:「外側から順番に微分して掛け合わせる」
この 3 つのルールを組み合わせれば、ほとんどの初等関数を微分できます。次回は三角関数の微分—— の導関数が になる美しい事実を確認します。