Excel VBA 数学教室ではアフィリエイトプログラムを利用して商品を紹介しています。

xsinxの積分・xcosxの積分

xsinxの積分

xsinx の積分公式です。導出することは難しくありませんが、できれば覚えてしまって、少しでも時間を節約したいところです:
(1)xsinxdx=sinxxcosx+C
【証明】xsinx の積分は部分積分によっても求められますが、xcosx を微分するほうがより簡単です:
(2)(xcosx)=cosxxsinx=(sinx)xsinx
右辺に xsinx が現れています。この式を整理すると
(3)xsinx=(sinx)(xcosx)
両辺を積分すると、
(4)xsinxdx=sinxxcosx+C
三角関数の変数が mx になっているときは t=mx と変換します:
(5)xsinmxdx=1m2tsintdt=1m2(sinttcost)+C=1m2sinmxxmcosmx+C
余力があれば、この m を含んだ公式を覚えてしまいましょう。

【Excel】xsinxのグラフ

Excel で描いた f(x)=xsinx のグラフを載せておきます。

(≫ グラフデータの入った Workbook をダウンロード)

xsinxの積分

奇関数×奇関数なので、xsinx は偶関数です。
xsinx は定積分に特徴があります。公式 (1) より、
(6)0πxsinxdx=[sinxxcosx]0π=π
を得ます。これは曲線 y=xsinx と線分 [0, π] で囲まれる領域の面積が円周率 π (すなわち半径 1 の円の面積) に等しいことを意味します。

【VBA】xsinx の積分を計算するマクロ

xsinx を積分する VBA マクロを載せておきます。積分公式 (1) を使えば、以下のように簡単に実装できます。

'[VBA] xsinxの積分を返す関数
Function XSINX_INTEG(a As Double, b As Double)
    Dim val_a As Double, val_b As Double
    val_a = Sin(a) - a * Cos(a)
    val_b = Sin(b) - b * Cos(b)
    XSINX_INTEG = val_b - val_a
End Function

引数 a には積分の下端、引数 b には積分の上端を渡します。たとえば、ワークシートに「=XSINX_INTEG(0,PI())」と入力すると、円周率に近い値「3.141592654 …」が返ります。

シンプソンの公式を使って積分値を得るマクロは以下のようになります。

'xsinxの値を返すマクロ
Function XSINX(x)
    XSINX = x * Sin(x)
End Function

'シンプソンの公式でxsinxを数値積分するマクロ
Function XSINX_SIMPSON(a As Double, b As Double, n As Long)

    Dim h As Double, s As Double
    Dim k As Integer

    s = 0
    h = (b - a) / (2 * n)

    For k = 0 To n - 1
        s = s + XSINX(a + 2 * k * h) _
            + 4 * XSINX(a + (2 * k + 1) * h) _
            + XSINX(a + (2 * k + 2) * h)
    Next k

    XSINX_SIMPSON = s * h / 3

End Function

引数 a には積分の下端、引数 b には積分の上端を渡します。n は分割数で、大きな値を入れるほど精度が上がりますが処理時間も増えます。たとえば、ワークシートに「=XSINX_SIMPSON(0,PI(),100)」を入力すると、円周率に近い値「3.141592655 …」が返ります。

xcosxの積分

xcosx の不定積分公式です。
(7)xcosxdx=cosx+xsinx+C
【証明】 xsinx を微分すると、
(8)xsinx=sinx+xcosx=(cosx)+xcosx
となるので、式を整理すると、
(9)xcosx=(cosx)+(xsinx)
両辺を積分すると、xcosx の積分を得ます:
(10)xcosxdx=cosx+xsinx+C
三角関数の変数が mx になっているときは t=mx と変換します:
(11)xcosmxdx=1m2tcostdt=1m2(cost+tsint)+C=1m2cosmx+xmsinmx+C

【Excel】xcosx のグラフ

下の図は Excel で描いた f(x)=xcosx のグラフです:

xcosxの積分

奇関数×偶関数なので、xcosx は奇関数です。

【VBA】xcosxの積分を計算するマクロ

公式 (10) を使って xcosx の積分を計算するマクロを載せておきます。

'xcosxの定積分の値を返すユーザー定義関数
Function XCOSX_INTEG(a As Double, b As Double)
    Dim val_a As Double, val_b As Double
    val_a = Sin(a) - a * Cos(a)
    val_b = Sin(b) - b * Cos(b)
    XCOSX_INTEG = val_b - val_a
End Function

たとえば、ワークシートの適当なセルに「=XCOSX_INTEG(0,2*PI())」を入力すると「-6.283185307」が返ります。

x^2 sinxの積分・x^2cosx の積分

公式を使って、x2sinx の積分を求めることができます。x2cosx を微分すると
(12)(x2cosx)=2xcosxx2sinx
となって、右辺に x2sinx の項が現れます。移項して整理すると
(13)x2sinx=2cosxdx(x2cosx)
両辺を積分すると
(14)x2sinxdx=2cosxdxx2cosx
ここで公式 (10) を使って右辺第 1 項の積分を実行すると、
(15)x2sinxdx=2(xsinx+cosx)x2cosx+C
を得ます。整理すると
(16)x2sinxdx=(2x2)cosx+2xsinx+C
となります。同様に x2sinx を微分して公式 (1) を使うと、
(17)x2cosxdx=(x22)sinx+2xcosx+C
が得られます。

f(x)sinxの積分・f(x)cosxの積分

次の公式は無理に覚える必要はありませんが、どこかに控えておくと、証明に役立つことがあります。fn(x)n 階導関数を表す記号です。
(18)f(x)sinxdx=k=0(1)k[f(2k+1)(x)sinxf(2k)(x)cosx]
積分定数 C は省略してあります。

【証明】単純に部分積分を実行します。
(19)I(x)=f(x)sinxdx=f(x)cosx+f(1)(x)cosxdx=f(x)cosx+f(1)(x)sinxf(2)(x)sinxdx
最後の積分は I(x)f(x) のところを f(x) に置き換えただけなので、あとは繰り返しになります。
(20)I(x)=f(x)cosx+f(1)(x)sinx{f(2)(x)cosx+f(3)(x)sinxf(4)(x)sinxdx}=[f(1)(x)f(3)(x)+f(5)(x)+]sinx+[f(0)(x)+f(2)(x)f(4)(x)+]cosx=k=0[(1)kf(2k+1)(x)sinx+(1)k+1f(2k)(x)cosx]=k=0(1)k[f(2k+1)(x)sinxf(2k)(x)cosx]
和は n 階導関数 fn(x)0 になるまでとればよいので、f(x) が三角関数のように微分に対して循環しない限りは有限項の級数となります。ですから実用的に考えると、
(21)f(x)sinxdx=[f(1)(x)f(3)(x)]sinx+[f(2)(x)f(0)(x)]cosx
ぐらいまでを覚えておけば充分です。f(x)=x,f(x)=x2 について直ちに次の公式が得られます。
(22)xsinxdx=xcosxsinx+Cx2sinxdx=(2x2)cosx+2xsinx+C 
同じようにして、
(23)f(x)cosxdx=k=0(1)k[f(2k)(x)sinx+f(2k+1)(x)cosx]
という公式も得られます。f(3)(x) までの導関数を使って簡略的に書くと
(24)f(x)cosxdx=[f(0)(x)f(2)(x)]sinx+[f(1)(x)f(3)(x)]cosx
となります。たとえば、f(x)=x,f(x)=x2 とすると
(25)xcosxdx=xsinx+cosx+Cx2cosxdx=(x22)sinx+2xcosx+C
という公式を得ます。

エクセルや数学に関するコメントをお寄せください