• 締切済み

数値積分

数値積分で e^(-x)/√xを[0,1]の範囲で数値積分するのですが、 f(0)の値が無限になり、台形公式やシンプソンの公式が使えません。 この場合どのように解けばよいんですか?

みんなの回答

回答No.5

「手計算タイプの数値積分」とは何ですか。私は聞いたことがありませんが、一般に通用する言葉なのですか?下のP.J.Davis,P.Rabinowitzの本は数値積分の専門書ですが、これにも「手計算タイプの数値積分」はありません。そもそも数値積分とは手計算でなく計算機でする積分のことなので、「手計算タイプの数値積分」は自己矛盾のような気もしますが?

回答No.4

National bureau of Standards Applied Mathematics series 41; Tables of the Error Function and its Derivative によれば  (2/√π)∫[0,1]dx exp(-x^2) = 0.84270079294971512 したがって  ∫[0,1]dx e^(-x)/√x =∫[0,2]du exp(-u^2/4) =√π × 0.84270079294971512 ≒ 1.493648264

回答No.3

e^(-x)/√xはx→0 のとき 1/√x のように発散します。そこで  du = dx/√x となるようにするには u=2√x とおけば良いことが分かります。すると  ∫[0,1]dx e^(-x)/√x = ∫[0,2]du exp(-u^2/4) と発散のない形になります。正規分布表でこの積分を求めるとおよそ1.49になります。

回答No.2

適当な変数変換で被積分関数の特異点を除いておく必要があります。一般的な方法としてはIMT公式や二重指数関数型公式があります。 P.J.Davis,P.Rabinowitz/著 , 森正武/訳 計算機による数値積分法:日本コンピュータ協会 (1981) u=log(x) とおくと  ∫[0,1]dx e^(-x)/√x = ∫[-∞,0]du exp(u/2)*exp(-exp(u)) 被積分関数が発散する点がなくなった替わりに積分区間が無限になってしまいました。しかしexp(u/2)はu→-∞で急速に減少するのでこちらの方が望ましいと言えます。右辺を数値積分すると1.493648になりました。検算するために部分積分を繰り返して  ∫[0,1]dx e^(-x)/√x = e^(-1) Σ2^k/(2k-1)!!  (k=1~∞の和) として右辺を計算すると1.493648になりました。もっと難しい問題は  戸田 英雄 小野 令美 日本物理学会誌、37(8) [1982.08]、p655

ggoggo2345
質問者

お礼

後は計算機でやるってことですよね? ありがとうございます、本当に助かりました!! 数値積分といっても方法がいくつもあり、 手計算タイプの数値積分ではできないみたい(?)ですね。

  • kakkysan
  • ベストアンサー率37% (190/511)
回答No.1

積分区間を[ε、1]として、lim(ε→0) を考える物では無いでしょうか。

ggoggo2345
質問者

補足

やってみましたが、結局同じような計算をすることになりました・・・

関連するQ&A

  • 数値積分

    シンプソンの公式と台形公式のプログラムで∫e^-x*x(0~∞)の積分値を求めたいんですが∞をどうやって表すのか分かりません。教えてください。

  • 積分

    一気に答えだけを表示するシンプソンの公式と台形公式のプログラムは分かったんですが計算過程も出せるその二つのプログラムを教えてください。求めたいのは∫e^-x*xdx(0~∞)の定積分の値です。

  • 積分

    ∫(0→1) x{ (e^x)^2 } dx 1,この積分式を求めたいです 2,1の定積分をマクローリン展開(5項まで展開)を利用して近似計算したいです。 3.,積分区間を5等分割(h=1/5)し、1を右端型区分求積法、台形公式、シンプソン法で、それぞれ数値積分したいです。 解法、解答、お願いします。

  • 数値解析の問題

    質問させていただきます 次の積分の数値積分を考える I=∫[B→A] f(x)dx [A.B}をn分割して、xの分点をとる、即ち xi=A+ih i=0,1,・・・n h=(B-A)/n n=6の場合、台形公式とシンプソンの1/3公式より Iの近似値を求めよ 但し、xi, fi=f(xi), hを用いてあらわせ 台形公式 I=h(f0+f2n)+2h{(f2+f4+・・・・f(2n-2)} シンプソンの公式 I=h/3{f0+f2n+2(f2+f4+・・・・・+f(2n-2)+4(f1+f3++・・・+f(2n-1)} 公式そのまま書いてみたのですが、あってるかどうか分かりません・・・ xiとかも使ってないし・・・ 詳しいかた回答お願いします

  • 数値積分の使い方

    y=2x^2-4x^2+x+3のxの区間0~2までの積分を台形公式を使い計算するのですけど、 まずはy=2x^2-4x^2+x+3を積分するのですか? そしてその後の台形公式を使ってどのように求めるのですか?

  • 数値積分の重み関数について

    被積分関数 f(x) をガウスの積分公式を使って数値積分する場合、重み関数を w(x) とすると、 ∫w(x)f(x)dx≒Σaf(xi) となりますが、 これでは、被積分関数は f(x) でなくて w(x)f(x) となってしまうと思います。 なので、本来計算したい ∫f(x)dx の値ではなく、∫w(x)f(x)dx の値となるので、結果が変わってしまうのではないかと思うのですが、あまりにも低レベルのことなのか、この疑問を解消してくれるような説明が本に載っていません。 どなたか教えてくれませんでしょうか。

  • 数値積分のプログラムについて

    開発環境は,C言語です. 数値積分(台形則)についての質問なのですが, Excelファイル(*fp1)から積分したい数値を読み込んで, 台形則の計算をして,違うファイル(*fp2)に結果を出力させる プログラムを作りたいです. サイトなどを調べてみると,関数f(x)を積分するものだけしか 載っていなくて,ファイルから数値だけを読み込み積分する 方法が載ってなくてわかりませんでした. よろしければ,参考になるプログラム例やサイトなど ありましたら教えて下さい.

  • 数値積分

    数値積分のシンプソン1/3則のC言語のプログラムを教えてください。 HPを色々さがしたのですが、シンプソン則のプログラムしかなく、困っております。 1/3則のC言語プログラムソースが載っているHPがあったら教えてください。m(-_-)m

  • fortran90での三重積分

    fortran90での台形公式を用いた三重積分について悩んでいます。 台形公式を用いた定積分は色んなサイトを見て何となく理解しました。 三重積分は恐らく、3つのfor文の入れ子によるものだと予想できますがソースコードがなかなか記述できません。 被積分関数(例えばf(x)=x^3+y+z^2)をfunctionで定義したいのですが、どなたか御教授願います。

  • 関数の積分を求めるプログラムで質問です。

    シンプソンの公式を用いて積分を求めるプログラムで、 「 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); } これを生かしてプリグラムをつくりたいのですが、分からなくて困っています。助けてください。