5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

中点則(数値積分)

Last updated at Posted at 2018-10-16

中点則とは

  • 数値積分の解法の一つ
  • 関数$f(x)$において、微小区間$[x_0,x_1]$内の関数値は、区間の中点での関数値で一定であると仮定する

qiita-integer-3.png

算法

区間$[a,b]$を小区間に$n$等分し、刻幅$h$と分点$x_i$を次のようにする。
$$ h=\frac{b-a}{n}\ ,\ \ x_i=a+\frac{2i+1}{2}h\ ,\ (i=0,1,\cdots,n-1) $$

積分の近似値は、
$$ \int_a^bf(x)=\sum_{i=0}^{n-1}hf(x_i) $$

サンプルコード

$f(x)=\sqrt{1-x^2}$において、区間$[0,1]$の定積分の値を求めるプログラム。
分割数は4。
解析解は$\pi/4$です。

midpoint_rule.c
#include<stdio.h>
#include<math.h>

double f (double x) {
  return sqrt(1-x*x);
}

/* 中点則(区間[a,b]をn分割) */
double midpoint_rule (double a, double b, int n) {
  double h;
  int i;
  double x, value=0;

  h = (b - a) / n;   // 区間幅の計算
  for (i = 0; i < n; i++) {
    x = a + h*(2*i + 1)/2;   // 分点の計算
    value += f(x);
  }
  value = value*h;
  return value;
}

int main (void) {
  printf("Analytical solution: %f\n", M_PI/4);
  printf("Numerical solution : %f\n", midpoint_rule(0, 1, 4));
  return 0;
}

実行結果

Analytical solution: 0.785398
Numerical solution : 0.795982

特徴

  • 全区間の誤差
    $$ E=\frac{h^2(b-a)}{24}f^{\prime\prime}(\xi)\ ,\ \ \ (a<\xi<b) $$

  • 分割数を倍にすると誤差は$1/4$に減少

  • 上記の$\xi$は、台形則のとは違うので、中点則の方が誤差が小さいことを表しているわけではない

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?