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

置換積分・部分積分

置換積分(Substitution)

「面倒な部分を uu という新しい変数に置き換えて、シンプルな形に変形する」——これが置換積分のアイデアです。料理のレシピを「だし汁 uu」とまとめて書くのと同じ発想です。

置換積分は連鎖律の逆操作です。

f(g(x))g(x)dx=f(u)du(u=g(x))\int f(g(x)) \cdot g'(x)\,dx = \int f(u)\,du \quad \bigl(u = g(x)\bigr)

u=g(x)u = g(x) と置くと du=g(x)dxdu = g'(x)\,dx なので、g(x)dxg'(x)\,dxdudu で置き換えます——「変数の入れ替えで積分がシンプルになる」のがポイントです。

例 1

2x(x2+1)3dx\int 2x(x^2+1)^3\,dx

u=x2+1u = x^2+1 と置くと du=2xdxdu = 2x\,dx——「2xdx2x\,dx がまるごと dudu になる」:

=u3du=u44+C=(x2+1)44+C= \int u^3\,du = \frac{u^4}{4}+C = \frac{(x^2+1)^4}{4}+C

例 2

cos(3x)dx\int \cos(3x)\,dx

u=3xu = 3x と置くと du=3dxdu = 3\,dx、つまり dx=du3dx = \dfrac{du}{3}——「3dx3\,dxdudu になる」:

=cosudu3=sinu3+C=sin3x3+C= \int \cos u \cdot \frac{du}{3} = \frac{\sin u}{3}+C = \frac{\sin 3x}{3}+C

デモ:置換積分の視覚化

0x2t(t2+1)3dt\displaystyle\int_0^x 2t(t^2+1)^3\,dtu=t2+1u = t^2+1 で置換した場合の被積分関数の変換を表示します。マウスで xx を動かすと積分の上限が変化し、元の関数(青)と uu 変換後の関数(緑)の対応が確認できます。

∫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)

「積の微分法則 (uv)=uv+uv(uv)' = u'v + uv' を積分形式に書き直す」——これが部分積分です:

部分積分は積の微分法則の積分版です:

udv=uvvdu\int u\,dv = uv - \int v\,du

uudvdv の選び方のコツ:LIATE の順で uu を選ぶ——「リアテ」と覚えましょう:

  • Log(対数)
  • Inverse trig(逆三角)
  • Algebraic(代数・多項式)
  • Trig(三角)
  • Exponential(指数)

例 1:xexdx\int x e^x\,dx

xxexe^x の積——LIATE では代数(xx)が先」——u=xu = x(代数)、dv=exdxdv = e^x\,dx(指数)と選ぶ: du=dxdu = dxv=exv = e^x

xexdx=xexexdx=xexex+C=ex(x1)+C\int x e^x\,dx = x e^x - \int e^x\,dx = x e^x - e^x + C = e^x(x-1)+C

例 2:xsinxdx\int x \sin x\,dx

u=xu = xdv=sinxdxdv = \sin x\,dxdu=dxdu = dxv=cosxv = -\cos x

xsinxdx=xcosx(cosx)dx=xcosx+sinx+C\int x \sin x\,dx = -x\cos x - \int(-\cos x)\,dx = -x\cos x + \sin x + C

例 3:lnxdx\int \ln x\,dx

lnx\ln x は LIATE で一番左(対数)なので uu に選ぶ」——u=lnxu = \ln xdv=dxdv = dxdu=1xdxdu = \dfrac{1}{x}dxv=xv = x

lnxdx=xlnxx1xdx=xlnxx+C\int \ln x\,dx = x\ln x - \int x \cdot \frac{1}{x}\,dx = x\ln x - x + C

繰り返し部分積分

「部分積分しても積分が残る場合、もう一度部分積分する」——x2exdx\displaystyle\int x^2 e^x\,dx のように uu として使う部分が複雑な場合:

1回目:u=x2u = x^2dv=exdxdv = e^x dxx2ex2xexdxx^2 e^x - \displaystyle\int 2x e^x\,dx

2回目:2xexdx=2(x1)ex\displaystyle\int 2x e^x\,dx = 2(x-1)e^x (例 1 より)

x2exdx=x2ex2(x1)ex+C=ex(x22x+2)+C\int x^2 e^x\,dx = x^2 e^x - 2(x-1)e^x + C = e^x(x^2-2x+2)+C

循環する部分積分

「2 回やると元の積分が出てきた!」——exsinxdx\displaystyle\int e^x \sin x\,dx は部分積分を 2 回行うと元の積分が出てくる(循環):

I=exsinxdxI = \displaystyle\int e^x \sin x\,dx

1回目:exsinxexcosxdxe^x \sin x - \displaystyle\int e^x \cos x\,dx

2回目の積分:excosx+exsinxdx=excosx+Ie^x \cos x + \displaystyle\int e^x \sin x\,dx = e^x \cos x + I

「右辺に II が出てきたので、両辺に II が含まれる方程式になった」——これを解けば:

I=exsinxexcosxI    2I=ex(sinxcosx)+CI = e^x \sin x - e^x \cos x - I \implies 2I = e^x(\sin x - \cos x) + C exsinxdx=ex(sinxcosx)2+C\int e^x \sin x\,dx = \frac{e^x(\sin x - \cos x)}{2} + C

まとめ

置換: u=g(x)du=g(x)dx\text{置換: } u = g(x) \Rightarrow du = g'(x)\,dx 部分積分: udv=uvvdu\text{部分積分: } \int u\,dv = uv - \int v\,du
  • 置換積分:複合関数の積分に使う——「内側の関数を uu に置き換えて単純化」
  • 部分積分:多項式×指数・三角・対数の形に使う——「積の微分法則の逆操作」
  • LIATE の順で uu を選ぶ——「対数・逆三角・多項式・三角・指数」の優先順位

次回は定積分——面積を数値として確定させる、微分積分学の根幹を学びます。