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}");
}
}