定積分の計算

区間とdouble型の関数fを引数にとり、fの定積分を計算する関数を作成する。

必要な知識

 C#の基礎知識、ラムダ式。数学的知識としては区分求積法の理解を必要とする。

コード

関数integralは一番単純な区分求積法。関数integral2は台形公式を用いたもの。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(MyMath.Integral(x=>x*x,0,1));  
        Console.WriteLine(MyMath.Integral2(x=>x*x,0,1));
    }
}
class MyMath {
    public static double Integral(Func<double,double> f, double a, double b,int N=1000)
    {
        double result = 0;
        double w = (b - a) / N;
        for (int i = 0; i < N; i++)
        {
            var x = a + i*w;
            result += f(x) * w;
        }
        return result;
    }
    public static double Integral2(Func<double, double> f, double a, double b, int N = 1000)
    {
        double result = 0;
        double w = (b - a) / N;
        for (int i = 0; i < N; i++)
        {
            var x1 = a + i * w;
            var x2 = a + (i+1) * w;
            result += (f(x1)+f(x2))*w/2;
        }
        return result;
    }
}

実行結果.

0.3328335
0.3333335
                

解説

関数integralとintegral2は、ともに

\[\int_a^b f(x) dx\]

を計算するもの。integral2は台形公式を用いているので一般にこちらのほうが精度が良い。

関数integralの最後の引数Nは区間を分割する個数。デフォルト設定を1000としている。

上のプログラムでは

\[\int_0^1 x^2 \, dx\]

を計算している。理論値は\[\frac{1}{3}=0.33333\cdots\]であるので、実行結果をみると確かにintegral2の方が精度の良いことが見て取れる。