pypy.com/

Python、Unity、FX自動化などを勉強しています。あと、コーラと車も好きです。そこらへんについて、たまに記事を書きます。

c言語で数値積分(長方形近似)

こんにちは。

久しぶりに記事を書きます。

今回は、数値計算系を書こうと思って、数値積分をやっていきます。

今回やるのは、長方形近似なので、たぶん一番簡単な方法です。

それでは書いていきます。

長方形近似の考え方

以下の画像を用いて考えていきます。
f:id:SaidaTaisei:20201027235634p:plain

上の画像の青色の線の関数を
y=f(x)
として、x_0からx_3までの定積分を求めたいとします。

そのとき、上の画像のように長方形の面積を考えて、
それを足し合わせていくことで、定積分の値を求めます。

上の画像の例だと、三分割なので、
h=(x_3-x_0)/3

\int_{x_0}^{x_3} f(x) dx \simeq hf(x_0)+hf(x_1)+hf(x_2)

というように、求めることができます。

c言語でコードを書く

それでは、上で説明したようにして、定積分を求めるコードを書いていきます。

今回は、以下の式の定積分を0.0~1.0の範囲で積分していきたいと思います。
f(x)=x^2+x+1

コードは以下のように書くことができます。

#include<stdio.h>

double func(double x);

void main(){
  // 積分範囲
  double a = 0.0;
  double b = 1.0;
  // 分割数
  double n = 10;
  double step = (b - a) / n;
  double sum = 0.0;
  for(int i = 0; i < n; i++){
    double s = func(a+step*i) * step;
    sum = sum +s;
  }
  printf("計算結果 = %lf\n",sum);
}

double func(double x){
  return x*x + x + 1.0;
}

これを実行すると、以下のようになります。

計算結果 = 1.735000

厳密解が1.83くらいなので、それなりに誤差があることがわかります。

次は、もっと誤差の少ない方法を試していくので、興味がある方は見てください。