###前提・実現したいこと
次のような課題に取り組んでいます。
無限区間積分 ∫_0^∞ (exp(-x)) dx をスケール変換 x=(1+u)/(1-u) を用いて,有限区間の定積分に変換し、積分値を求めよ。
スケール変換を行った後の積分の式は
∫_(-1)^(1) (exp{-(1+u)/(1-u)}*{2/(1-u)^2}) du
になると考えています。
シンプソンの公式を用いたプログラムを組んでみて結果を出力しようとすると、-1.#IND00 と出てきてしまい、ちゃんと値が計算されていません。おそらく原因は、どこかで0で割る計算が行われてしまっていることだと推測しているのですが、どこが原因なのかがわかりません。
ソースコードの間違いを指摘していただけると大変助かります。
よろしくお願いいたします。
###発生している問題・エラーメッセージ
コンパイルエラーではないのですが、 出てくる数値が以下のようになってしまいます -1.#IND00
###該当のソースコード
#include <math.h> #include <stdio.h> #include <stdlib.h> double f(double x){ double y; y = (1/exp((1+x)/(1-x)))*(2/((1-x)*(1-x))); return y; } int main(void){ int n; double h, I, sum1 = 0, sum2 = 0; h = (1 - (-1)) / 1000; for (n = 1; n < 1000 / 2 - 1; n++){ sum1 += f(-1 + 2 * n*h); } for (n = 1; n < 1000 / 2; n++){ sum2 += f(-1 + (2 * n - 1)*h); } I = (h / 3)*(f(-1) + f(1-(2/1000)) + 2 * sum1 + 4 * sum2); printf("%f\n",I); return 0; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/09 00:26