dポイントプレゼントキャンペーン実施中!

シンプソンの公式を用いて積分を求めるプログラムで、
「 y=1/(1+x*x) のように±∞で0に収束するような関数は以下のような無限積分を求めることができる。
∫(-∞→∞){1/(1+x*x)}dx …(a) ただし、無限区間を分割することはできないので、コンピュータを用いた計算では
∫(-a→a){1/(1+x*x)}dx のaに大きな値を入れることで代用する。この積分を求めるプログラムをシンプソンの式を用いて作成し、以下の3ケースについて値を求めて真値と比較せよ。真値は式(a)を解析的に積分することで求めよ。

・a=100、N=1000
・a=100、N=500
・a=200、N=1000 (Nは以下のプログラムと対応しているものです)

というもので参考としてS=∫(1→2){1/x}dxをシンプソンの公式を使い求めるものは以下のものなのですが

#include <stdio.h>
double f(double x)
{
return 1/x;
}
int main()
{
int i,N;
double a,b,h,S;
double x[1000],y[1000];
a=1.0;
b=2.0;
N=10;
h=(b-a)/N;
for(i=0;i<=N;i++)
x[i]=a+i*h;
y[0]=f(x[0]);
y[N]=f(x[N]);
S=h*(y[0]+y[N])/3.0;
for(i=1;i<=N-1;i=i+2)
{
y[i]=f(x[i]);
S=S+h*y[i]*4.0/3.0;
}
for(i=2;i<=N-2;i=i+2)
{
y[i]=f(x[i]);
S=S+h*y[i]*2.0/3.0;
}
printf("N=%d,S=%15.10lf\n",N,S);
}

これを生かしてプリグラムをつくりたいのですが、分からなくて困っています。助けてください。

A 回答 (1件)

なにがわからないのかが示されていないので助けようがありません。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!