#12 ふれてみよう高校数学 解析(微分・積分・極限)
置換積分・部分積分
置換積分(Substitution)
「面倒な部分を という新しい変数に置き換えて、シンプルな形に変形する」——これが置換積分のアイデアです。料理のレシピを「だし汁 」とまとめて書くのと同じ発想です。
置換積分は連鎖律の逆操作です。
と置くと なので、 を で置き換えます——「変数の入れ替えで積分がシンプルになる」のがポイントです。
例 1
と置くと ——「 がまるごと になる」:
例 2
と置くと 、つまり ——「 が になる」:
デモ:置換積分の視覚化
を で置換した場合の被積分関数の変換を表示します。マウスで を動かすと積分の上限が変化し、元の関数(青)と 変換後の関数(緑)の対応が確認できます。
∫2x(x²+1)³ dx の被積分関数(青)と置換後の ∫u³ du(緑)。
function loop() {
ctx.clearRect(0, 0, W, H);
var scale=45;
var ox=W/2, oy=H*0.85;
function toSx(x){return ox+x*scale;}
function toSy(y){return oy-y*scale;}
function drawAxes(){
ctx.strokeStyle='rgba(255,255,255,0.13)';
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=1;j<=4;j++){
ctx.fillText(j,ox-6,toSy(j)+4);
}
}
function plotCurve(fn,color,lw){
ctx.strokeStyle=color;ctx.lineWidth=lw||2;
ctx.beginPath();
var first=true;
for(var xi=0;xi<=W-ox;xi+=1){
var x=xi/scale;
var y=fn(x);
if(!isFinite(y)||y>H/scale+0.5||y<-0.5){first=true;continue;}
if(first){ctx.moveTo(toSx(x),toSy(y));first=false;}
else ctx.lineTo(toSx(x),toSy(y));
}
ctx.stroke();
}
var fOrig=function(x){return 2*x*Math.pow(x*x+1,3);};
// After substitution u=x^2+1, f(u) = u^3, but we plot it as a function of x for comparison
// To compare properly: plot u^3 where u=x^2+1
var fSubst=function(x){var u=x*x+1; return u*u*u;};
ctx.fillStyle='#0d1117';
ctx.fillRect(0,0,W,H);
drawAxes();
// Mouse x for upper limit
var xUpper=(mx-ox)/scale;
xUpper=Math.max(0,Math.min(2.2,xUpper));
// Shade area under original function
ctx.beginPath();
ctx.moveTo(toSx(0),oy);
for(var xi2=0;xi2<=xUpper*scale;xi2+=1){
var x2=xi2/scale;
var y2=fOrig(x2);
if(y2<H/scale && y2>=0) ctx.lineTo(toSx(x2),toSy(y2));
else break;
}
ctx.lineTo(toSx(xUpper),oy);
ctx.closePath();
ctx.fillStyle='rgba(79,195,247,0.15)';
ctx.fill();
// Shade area under substituted function (same integral value)
ctx.beginPath();
ctx.moveTo(toSx(0),oy);
for(var xi3=0;xi3<=xUpper*scale;xi3+=1){
var x3=xi3/scale;
var y3=fSubst(x3);
if(y3<H/scale && y3>=0) ctx.lineTo(toSx(x3),toSy(y3));
else break;
}
ctx.lineTo(toSx(xUpper),oy);
ctx.closePath();
ctx.fillStyle='rgba(129,199,132,0.1)';
ctx.fill();
plotCurve(fOrig,'#4fc3f7',2);
plotCurve(fSubst,'rgba(129,199,132,0.7)',2);
// Upper limit marker
if(xUpper>0){
ctx.setLineDash([4,4]);
ctx.strokeStyle='rgba(255,202,40,0.5)';
ctx.lineWidth=1;
ctx.beginPath();ctx.moveTo(toSx(xUpper),oy);ctx.lineTo(toSx(xUpper),toSy(fOrig(xUpper)));ctx.stroke();
ctx.setLineDash([]);
ctx.beginPath();ctx.arc(toSx(xUpper),toSy(fOrig(xUpper)),5,0,Math.PI*2);
ctx.fillStyle='#ffca28';ctx.fill();
}
// Antiderivative value at x
var antideriv=Math.pow(xUpper*xUpper+1,4)/4 - Math.pow(0+1,4)/4;
// Info panel
ctx.fillStyle='rgba(0,0,0,0.7)';
ctx.fillRect(8,8,290,100);
ctx.font='12px monospace';ctx.textAlign='left';
ctx.fillStyle='#4fc3f7';
ctx.fillText('f(x) = 2x(x²+1)³',14,28);
ctx.fillStyle='rgba(129,199,132,0.9)';
ctx.fillText('u³ (u=x²+1)',14,46);
ctx.fillStyle='#ffca28';
ctx.fillText('x = '+xUpper.toFixed(3),14,64);
ctx.fillText('∫₀ˣ = '+(antideriv).toFixed(4),14,82);
ctx.fillStyle='rgba(255,255,255,0.5)';
ctx.font='12px sans-serif';ctx.textAlign='center';
ctx.fillText('u = x²+1, du = 2x dx',W/2,H-10);
requestAnimationFrame(loop);
}
loop(); 部分積分(Integration by Parts)
「積の微分法則 を積分形式に書き直す」——これが部分積分です:
部分積分は積の微分法則の積分版です:
と の選び方のコツ:LIATE の順で を選ぶ——「リアテ」と覚えましょう:
- Log(対数)
- Inverse trig(逆三角)
- Algebraic(代数・多項式)
- Trig(三角)
- Exponential(指数)
例 1:
「 と の積——LIATE では代数()が先」——(代数)、(指数)と選ぶ: 、
例 2:
、: 、
例 3:
「 は LIATE で一番左(対数)なので に選ぶ」——、: 、
繰り返し部分積分
「部分積分しても積分が残る場合、もう一度部分積分する」—— のように として使う部分が複雑な場合:
1回目:、 →
2回目: (例 1 より)
循環する部分積分
「2 回やると元の積分が出てきた!」—— は部分積分を 2 回行うと元の積分が出てくる(循環):
1回目:
2回目の積分:
「右辺に が出てきたので、両辺に が含まれる方程式になった」——これを解けば:
まとめ
- 置換積分:複合関数の積分に使う——「内側の関数を に置き換えて単純化」
- 部分積分:多項式×指数・三角・対数の形に使う——「積の微分法則の逆操作」
- LIATE の順で を選ぶ——「対数・逆三角・多項式・三角・指数」の優先順位
次回は定積分——面積を数値として確定させる、微分積分学の根幹を学びます。