微分の定義——差分商から導関数へ
「瞬間の速度」を数式にする
車のスピードメーターは「今この瞬間の速度」を示しています。しかし数学的には「ある一瞬の速度」をどう定義するのでしょうか?
たとえば、東京から大阪まで3時間かけて移動した場合、平均速度は計算できます。でも「ちょうど2時間後の時点の速度」はどう求めるのでしょうか?
「1時間後から3時間後」の間の平均速度を計算し、次に「2時間後から2.5時間後」の平均を計算し、さらに「2時間後から2.1時間後」……と区間を短くしていくと、ある値に近づいていきます。その「極限」が瞬間速度です。
時刻 での位置が のとき、時刻 から の間の平均速度は:
の極限を取ると、これが瞬間速度になります。これと全く同じアイデアが「微分」の定義です。
差分商と導関数
関数 の点 における微分係数(derivative at a point)を:
と定義します。この を差分商(difference quotient)といいます。
各点 での微分係数を関数として表したものが導関数(derivative function):
別の記法として 、、 なども使われます。
具体例: を微分する
差分商を計算します。 を含む式を整理して、最後に とします。
で:
つまり です。「 のグラフ上の各点での傾き(接線の傾き)が で表される」という意味です。
幾何的意味:割線から接線へ
は点 と点 を結ぶ割線(secant line)の傾きです。
想像してみてください——曲線上に2点を取り、それを結ぶ直線(割線)の傾きを計算します。2点を近づけると、割線はだんだん「カーブに沿った接線」に近づいていきます。
にするにつれて、割線は点 における接線(tangent line)に近づきます。
デモ:割線が接線に収束する様子
マウスを左右に動かして接点の位置 を変えられます。 は自動的にゆっくり減少し、オレンジの割線が黄色の接線に収束していきます。割線の傾きが接線の傾き(= )に近づく様子を確認してください。
function loop() {
ctx.clearRect(0, 0, W, H);
var scale=55;
var ox=W/2, oy=H*0.65;
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.3)';
ctx.font='10px monospace';
ctx.textAlign='center';
for(var i=-4;i<=4;i++){
if(i===0)continue;
ctx.fillText(i,toSx(i),oy+14);
}
ctx.textAlign='right';
for(var j=0;j<=5;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)||y>H/scale||y<-2){first=true;continue;}
if(first){ctx.moveTo(toSx(x),toSy(y));first=false;}
else ctx.lineTo(toSx(x),toSy(y));
}
ctx.stroke();
}
function drawLine(x1,y1,x2,y2,color,lw,dash){
ctx.strokeStyle=color;ctx.lineWidth=lw||1;
if(dash)ctx.setLineDash(dash);else ctx.setLineDash([]);
ctx.beginPath();ctx.moveTo(x1,y1);ctx.lineTo(x2,y2);ctx.stroke();
ctx.setLineDash([]);
}
ctx.fillStyle='#0d1117';
ctx.fillRect(0,0,W,H);
drawAxes();
// f(x) = x^2
plotCurve(function(x){return x*x;},'#4fc3f7',2.5);
// Base x from mouse
var x0=(mx-ox)/scale;
x0=Math.max(-2.5,Math.min(2.5,x0));
var y0=x0*x0;
// Oscillating h
var t=Date.now()/1000;
var h=1.5*Math.abs(Math.sin(t*0.5))+0.03;
var x1=x0+h;
var y1=x1*x1;
// Secant slope
var slope=(y1-y0)/h;
// Exact tangent slope
var tangentSlope=2*x0;
// Draw secant line extended
var ext=3;
var sx0=toSx(x0-ext); var sy0=toSy(y0+slope*(x0-ext-x0));
var sx1=toSx(x0+ext); var sy1=toSy(y0+slope*(x0+ext-x0));
drawLine(sx0,sy0,sx1,sy1,'rgba(255,112,67,0.85)',2);
// Draw tangent line
var tx0=toSx(x0-ext); var ty0=toSy(y0+tangentSlope*(x0-ext-x0));
var tx1=toSx(x0+ext); var ty1=toSy(y0+tangentSlope*(x0+ext-x0));
drawLine(tx0,ty0,tx1,ty1,'rgba(255,202,40,0.9)',2,[6,4]);
// Points on curve
ctx.beginPath();ctx.arc(toSx(x0),toSy(y0),5,0,Math.PI*2);
ctx.fillStyle='#ffca28';ctx.fill();
ctx.beginPath();ctx.arc(toSx(x1),toSy(y1),5,0,Math.PI*2);
ctx.fillStyle='#ff7043';ctx.fill();
// Vertical dashed from x0 to x1
drawLine(toSx(x1),toSy(y1),toSx(x1),oy,'rgba(255,112,67,0.3)',1,[3,3]);
// h bracket on x-axis
ctx.strokeStyle='rgba(255,112,67,0.6)';ctx.lineWidth=1;
ctx.beginPath();ctx.moveTo(toSx(x0),oy+8);ctx.lineTo(toSx(x1),oy+8);ctx.stroke();
ctx.fillStyle='rgba(255,112,67,0.8)';
ctx.font='11px monospace';ctx.textAlign='center';
ctx.fillText('h',toSx((x0+x1)/2),oy+22);
// Info panel
ctx.fillStyle='rgba(0,0,0,0.6)';
ctx.fillRect(8,8,220,90);
ctx.fillStyle='#ffca28';
ctx.font='13px monospace';ctx.textAlign='left';
ctx.fillText('x₀ = '+x0.toFixed(3),16,28);
ctx.fillText('h = '+h.toFixed(3),16,46);
ctx.fillStyle='#ff7043';
ctx.fillText('割線の傾き = '+slope.toFixed(3),16,66);
ctx.fillStyle='#ffca28';
ctx.fillText('接線の傾き = '+tangentSlope.toFixed(3),16,84);
// Legend
ctx.fillStyle='#ff7043';
ctx.font='12px sans-serif';ctx.textAlign='left';
ctx.fillText('── 割線 (secant)',W-150,H-30);
ctx.fillStyle='#ffca28';
ctx.fillText('- - 接線 (tangent)',W-150,H-12);
requestAnimationFrame(loop);
}
loop(); 微分可能性
関数が点 で微分可能であるためには、差分商の極限が存在しなければなりません。これは特に:
- 左微分
- 右微分
の両者が等しい必要があります。
例えば は で連続ですが、微分可能ではありません(左微分 、右微分 )。グラフで言えば、 のグラフは で「とがっている」(V字型)ので、そこでの接線が一意に定まりません。
微分可能 連続
重要な定理:微分可能な関数は必ず連続です。逆は成立しません( の例)。
「なめらかに繋がっている(微分可能)ならば、途切れていない(連続)」は自然に納得できますね。
Leibniz 記法と Lagrange 記法
| 記法 | 読み方 | 意味 |
|---|---|---|
| エフプライム | Lagrange 記法(よく使う) | |
| ディエフ ディエックス | Leibniz 記法 | |
| ディー ディエックス | 演算子形式 |
Leibniz 記法は合成関数の微分(連鎖律)を書くときに特に便利です。「 に対する の変化率」という意味を直接的に表しています。
まとめ
- 差分商は割線の傾き——2点を結ぶ直線の傾きです
- で割線 → 接線——2点を近づけていくと、接線になります
- 接線の傾きが微分係数——「その点でのグラフの傾き」
- —— の値が大きいほど傾きも大きい
次回は、毎回この定義から計算しなくて済む微分の計算規則(べき乗則・和の法則・定数倍)を学びます。