シンプソン法の誤差評価

このQ&Aのポイント
  • シンプソン法の誤差評価について解説します。
  • シンプソン法を使った近似面積の誤差を評価する方法について説明します。
  • シンプソンの公式の誤差評価についてもご紹介します。
回答を見る
  • ベストアンサー

シンプソン法の誤差評価

(例)台形公式の誤差評価 区間[x(i-1) , x(i)]を考える 真の面積は、ΔS(i-1)=∫(x(i-1) →x(i) )f(x)dx=F(x(i))-F(x(i-1)), 近似面積は、h/2(f(x(i-1)+f(x(i))である。 ところでF(x(i))=F(x(i-1)+h)=F(x(i-1))+f(x(i-1))h+(1/2!)f ' (x(i-1))h^2+,,,,,,であるから 誤差E(i-1)=真の面積-近似面積=ΔS(i-1)-f(x(i-1))h=(-1/12)f '' (x(i-1)h^3+,,,,, 全区間の誤差 E=Σ(i=1,n)E(i-1)=-n((h^3/12)Σ(i=1,n)f ' (x(i-1))+,,,,)=( (x(n)-x(0))/12 )h^2Σ(i=1,n)f ''(x(i-1)+,,,,,, と同様にしてシンプソンの公式の誤差評価も示したいのですが、解答、解法お願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

基本的にやることは同じはず. f(x) の原始関数 F(x) において F(h) = F(0) + f(0) h + [f'(0)/2]h^2 + .... 一方 Simpson の公式において f(0) + 4f(h/2) + f(h) = 6f(0) + 3f'(0)h + ... だから F(h) - F(0) と (h/6)[f(0) + 4f(h/2) + f(h)] を比較すればいいんじゃないかな.

doora88
質問者

補足

解答ありがとうございます。 もう少しだけ詳しくお願いできませんか? ほかの方も誰かいましたらお願いします。

関連するQ&A

  • シンプソン法の出力結果について

    シンプソン法の区間分割数nを10~100まで10ずつ増やして計算値と計算誤差を求めるプログラムを書きに作成したのですが、出力結果に-7.341865999405491E-5などとあります。この「E-数字」とはJavaではどういうこと示しているのですか? また、計算誤差の求め方は下記のプログラムでいいのですか? public class Simpson { static double f(double x) { // ここに任意の被積分関数を記述 double y = Math.exp(- x * x / 2) / Math.sqrt(2.0 * Math.PI); return y; } public static void main(String[] args) { double a = - 1.0, b = 1.0; // 積分範囲 int n = 100; // 区間分割数 for(n=10; n <=100; n+=10){ double h = (b - a) / (double)n; // 分割幅 double s, s1 = 0.0, s2 = 0.0; for (int i = 1; i <= n / 2; i++) { s1 += f(a + (2 * i - 1) * h); } for (int i = 1; i <= n / 2 - 1; i++) { s2 += f(a + 2 * i * h); } s = h / 3.0 * (f(a) + 4.0 * s1 + 2.0 * s2 + f(b)); double suti = (s-0.68269)/0.68269*100;  //計算誤差=(計算値ー真値)/真                                         値×100 System.out.println("区間分割数 =" + n); System.out.println("シンプソン法による計算値 =" + s); System.out.println("シンプソン法による計算誤差 ="+suti+"\n"); } } }

  • シンプソン公式

    数学が苦手で、わからないので教えていただきたいのですが。 (1)区間0≦x≦1において関数f(x)=1-x^2を台形公式で近似計算するとき、どんなことがいえるのでしょうか。 (2)区間-1≦x≦1において関数f(x)=|1/4-x^2|をシンプソン公式で計算するとき、どんな方針でやればいいのでしょうか。 以上、よろしくお願いいたします。

  • シンプソン則について

    大学の課題で ∫0~5 e^(-3t) * cos^2 *(2t) をシンプソン則を用いて求めるプログラムを作成せよ。積分の刻みは0.01毎  という課題がでました。 私は授業で作ったプログラムを元に、以下のプログラムを作ったのですが、答えが大きすぎて(5より大きいと間違いと言っていました)受け取ってもらえません。どこがいけないのでしょうか? あと、nには どのような数字をいれればよいのでしょうか?nは使わないのでしょうか。 お願いします。 #include "stdio.h" #include "math.h" void main() { int n; double i, a, b, h, S, S1, S2, S3; double f (double); a = 0.; b = 5.; printf ("N="); scanf ("%d", &n); h = (b - a) / (double)n; S1 = 0.; S2 = 0.; S3 = f (a) + f (b); /* 両端の値*/ /* 奇数番目の値*/ for (i = 0.01; i < 5; i = i + 0.02) { S1 = S1 + 4. * (f (a + (double)i * h)); } /* 偶数番目の値*/ for (i = 0.0; i < 5; i = i + 0.02) { S2 = S2 + 2. * (f (a + (double)i * h)); } S = (h / 3.) * (S1 + S2 + S3); printf ("%d %lf\n", n, S); } double f (double t) { double y; y = (exp(-3. * t) / 2.) + ((exp(-3.* t) * cos(4. * t)) / 2.); return y; }

  • 数値解析の問題

    質問させていただきます 次の積分の数値積分を考える 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とかも使ってないし・・・ 詳しいかた回答お願いします

  • 誤差の限界

    f(x)=e^xをマクローリン展開し、eの近似値と、誤差の限界を求めよという問題なのですが。  まず、eの近似値なのですが、これはf(x)をマクローリン展開したものにx=1を代入したものだと思うのですが、どうでしょうか?  次に、誤差の限界ですが、これがまったく分かりません。どなたか解説をお願いします。

  • 矩形法プログラムの計算値と計算誤差の求め方

    下記の矩形法の計算値を求めるプログラムで、区間分割数nを10から100まで10ずつ増やして計算値を求めるプログラムを作成したいのですが、どのようにしたらいいのか分かりません。Java初心者なのでJavaプログラムが詳しい人は至急ご連絡をお願いします。 *ちなみにこの矩形法プログラムのの計算誤差も分かる人はお願いしたいのですが・・・・・・  計算誤差の求め方は    計算誤差=(計算値ー真値)/真値×100(%) (真値=0.68269とする) public class Kukei { static double f(double x) { // ここに任意の被積分関数を記述 double y = Math.exp(- x * x / 2) / Math.sqrt(2.0 * Math.PI); return y; } public static void main(String[] args) { double a = - 1.0, b = 1.0; // 積分範囲 int n = 100; // 区間分割数 double h = (b - a) / (double)n; // 分割幅 double s = 0.0; for (int i=0; i < n; i++) { s += f(a + i * h); } s *= h; System.out.println("区間分割数 =" + n); System.out.println("矩形法による計算値 =" + s); } }

    • ベストアンサー
    • Java
  • 【至急】BASICプログラムの問題(初心者)

    N88互換BASICというフリーソフトで作っています。 f(x)=x^4-7x^3-6x^2-4x+1の曲線とy=0の直線とで囲まれる面積を、x=0から10の範囲で近似的積分という問題です。 近似精度は10^-3以内。 シンプソン公式を用いて近似するとあります。 下記が手順です。 1、分割数zを入力。 2、dxの値を分割数から逆算して求める。(dx=「全体幅」/「2×分割数」) 3、FORNEXT文を用いて、各分割数区間毎にx座標を特定して放物線の面積を求める計算をし、その累積を求める。 4、求まった積分結果、そして答え「310」との誤差表示。 5、誤差が10^-3以内なら終了。それ以上なら1に戻る。 基礎的なコマンドは習いましたが、初心者なのでよくわかりません。説明不足でよくわからないとは思いますが、教えて頂けると嬉しいです。

  • 2次近似したときの誤差R3について

    f (x) = 1 /( 1 + x ) x=0 の近似式 1-x + x^(2) - x^(3) + ・・・・・になりますが、 これの2次近似したときの誤差R3(x)を求めたいのですが、 近似の誤差の公式に当てはめたのですけど、うまく答え通りになりませんでしたので、答えまでの手順を教えてください。宜しくお願いします。 答え -x^3 / (1+c)^4   (c は0とx の間の数)

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

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

  • 打ち切り誤差の表現について

    数値解析での打ち切り誤差についてお尋ねします。 f(x)=e^x があります。これはテイラー展開で表現できます。(これはもういろんな本に書いてあります。) これを第n項までで止めた式をfn(x)とします。そうすると、f(x)-fn(x)はいわゆる打ち切り誤差ですね。片方は無限大、片方はそれをn項までで止めているのだから、結局この場合打切り誤差はe^xのテイラー展開のn+1項以上の表現だということになります。 それが、( e^s・x^(n+1) )/(n+1)! ここで(0<s<x) となるそうです。 この誘導ができません。x^(n+1)/(n+1)! でくくって残りがe^sとなることを証明できればよいのですが。平均値の定理か何かを使うのかなと思うのですが。 よろしくお願いします。