C#での積分計算

C#での積分計算

積分の基本概念

積分とは、関数の面積を求める数学的手法です。特定の範囲 \([a, b]\) での積分は次のように表されます。

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

しかし、C#では解析的な積分を求めることは難しいため、通常は数値積分を利用します。

台形則による数値積分

台形則は、関数のグラフを複数の台形で近似し、それらの面積を合計することで積分を求める方法です。次の式で表されます。

\[ \int_a^b f(x)dx \approx \sum_{i=0}^{n-1} \frac{f(x_i) + f(x_{i+1})}{2} \Delta x \]

Simpson法による数値積分

Simpson法は、台形則よりも精度の高い手法で、関数を二次関数で近似します。次の式で計算されます。

\[ \int_a^b f(x)dx \approx \frac{\Delta x}{3} \sum_{i=0}^{n} \left( f(x_i) + 4f(x_{i+1}) + f(x_{i+2}) \right) \]

C#での実装例

以下に、台形則とSimpson法を用いたC#の実装例を示します。

台形則の実装


using System;

class Program
{
    static double Function(double x)
    {
        return Math.Sin(x); // 積分したい関数
    }

    static double TrapezoidalRule(double a, double b, int n)
    {
        double h = (b - a) / n;
        double sum = 0.5 * (Function(a) + Function(b));
        for (int i = 1; i < n; i++)
        {
            sum += Function(a + i * h);
        }
        return sum * h;
    }
    
    static void Main()
    {
        double result = TrapezoidalRule(0, Math.PI, 1000);
        Console.WriteLine($"積分結果: {result}");
    }
}
    

Simpson法の実装


using System;

class Program
{
    static double Function(double x)
    {
        return Math.Sin(x);
    }

    static double SimpsonsRule(double a, double b, int n)
    {
        if (n % 2 != 0) n++; // nを偶数にする
        double h = (b - a) / n;
        double sum = Function(a) + Function(b);

        for (int i = 1; i < n; i += 2)
        {
            sum += 4 * Function(a + i * h);
        }
        for (int i = 2; i < n; i += 2)
        {
            sum += 2 * Function(a + i * h);
        }
        return sum * h / 3;
    }

    static void Main()
    {
        double result = SimpsonsRule(0, Math.PI, 1000);
        Console.WriteLine($"積分結果: {result}");
    }
}
    

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です