読者です 読者をやめる 読者になる 読者になる

シンプソンの式

Prog

が全くわからない(C言語

C-2 数値積分

ファイル名: ex13c2.c

関数 f(x) の区間 [a, b] における定積分の近似値は、以下のような式で計算できます。

File:Ex13C_P02_1.png

この式(Simpsonの式)を利用して、定積分を計算するプログラムを作成してみましょう。

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

double func(double);
double simpson(double, double);
double integrate(double, double, int);

int main()
{
  int i;
  double result;

  /* 積分区間の分割数を変えて積分 */
  for(i = 100; i <= 3000; i += 100) {
    result = integrate(0.0, 1.0, i);
    
    /* 答えと"答えx4"を表示します */
    printf("%4d分割 答え %10.8f (%10.8f)\n", i, result, 4.0*result);
  }
  return 0;
}

/* 被積分関数の定義 */
double func(double x)
{
  return sqrt(1.0-x*x);
}

/* Simpsonの式の計算 */
/* func()を三回呼び出します */
double simpson(double a, double b)
{
  /* 区間[a, b]について、Simpsonの式を計算 */
}

double integrate(double p, double q, int n)
{
  /* 区間[p, q]をn分割して積分する */
}

このプログラムでは関数を三つ定義しています。

  1. 関数 func() は、xでの関数値 f(x) を計算して返します。
  2. 関数 simpson() は、与えられた区間 [a,b] に対して、Simpsonの式を計算して返します。
  3. 関数 integrate() は、与えられた区間 [p,q] をn分割して、それぞれの部分にSimpsonの式を適用し、その総和を計算して返します。

以上の定義にもとづいて、simpson関数と integrate関数の中身を追記して,プログラムを完成させなさい(他の部分は変えなくてよい)。 この問題では、被積分関数を"sqrt(1.0 - x*x)"としているので、 "integrate(0.0, 1.0, n)"の値は円周率の四分の一の近似値となります。

補足説明 関数 sqrt() は平方根を計算します。この関数を使うためには、ソースプログラムの先頭に"#include <math.h>"を追加すると共に、 コンパイル時のオプションとして -lm を付ける必要があります(参考:ハンドアウトLec13-24)。

 

http://web-ext.u-aizu.ac.jp/course/prog0/articles/e/x/1/Ex13.html

 

こんなもの課題で出されたらたまったもんじゃないんだが