シンプソン 公式。 C++

シンプソンの公式(解明編①)

シンプソン 公式

エクセルを用いたシンプソン公式による数値積分 [PR] エクセルを用いたシンプソン公式による数値積分 Excelを用いた科学技術計算が第2版になりました 30年10月 ! amazon: 楽天: 定積分は関数、xの区間、x軸で囲まれた領域の面積を計算します。 数値積分は有限個の点(x0,x1,x2,x3, ・・・・)での関数値 y0,y1,y2,y3,・・・)から面積を算出します。 点の数が少ないと、誤差が発生します。 図1 数値積分を行う例題のグラフ シンプソン公式 シンプソン公式では、隣接する3点を放物線(2次関数)と仮定し数値積分を行う。 785398163が得られることが解っている。 エクセルシート上に、分割数(M)、区間 a〜b を設定します。 xとそれに対応する関数f x を設定します。 関数を変更すれば、その関数に対応した数値積分 が可能となる。 最後に計算結果エリアを設定します。 図2 数値積分用のエクセルシート シンプソン公式のプログラムをVBAでつくる エクセルの操作による数値積分より、VBAによる数値積分プログラム作成のほうが容易です。 セルの値を読み込み、シンプソン公式を用い数値積分を行い、計算結果をセルに出力します。 図3 シンプソンの公式のVBAプログラム 数値積分実行 積分実行のボタンを作り、マクロを登録しておくと便利です。 積分実行ボタンをクリックすると、積分値が算出されました。

次の

シンプソンの公式の証明と例題

シンプソン 公式

エクセルを用いたシンプソン公式による数値積分 [PR] エクセルを用いたシンプソン公式による数値積分 Excelを用いた科学技術計算が第2版になりました 30年10月 ! amazon: 楽天: 定積分は関数、xの区間、x軸で囲まれた領域の面積を計算します。 数値積分は有限個の点(x0,x1,x2,x3, ・・・・)での関数値 y0,y1,y2,y3,・・・)から面積を算出します。 点の数が少ないと、誤差が発生します。 図1 数値積分を行う例題のグラフ シンプソン公式 シンプソン公式では、隣接する3点を放物線(2次関数)と仮定し数値積分を行う。 785398163が得られることが解っている。 エクセルシート上に、分割数(M)、区間 a〜b を設定します。 xとそれに対応する関数f x を設定します。 関数を変更すれば、その関数に対応した数値積分 が可能となる。 最後に計算結果エリアを設定します。 図2 数値積分用のエクセルシート シンプソン公式のプログラムをVBAでつくる エクセルの操作による数値積分より、VBAによる数値積分プログラム作成のほうが容易です。 セルの値を読み込み、シンプソン公式を用い数値積分を行い、計算結果をセルに出力します。 図3 シンプソンの公式のVBAプログラム 数値積分実行 積分実行のボタンを作り、マクロを登録しておくと便利です。 積分実行ボタンをクリックすると、積分値が算出されました。

次の

シンプソンの公式

シンプソン 公式

5 数値積分(定積分) ここでは,1変数の連続関数の定積分を数値的に求めることを扱う。 一般に微分方程式の解を数値的に求めることも数値積分ということになるが,これは後で扱う。 不定積分が代数関数や超越関数(三角関数,対数関数,指数関数など)で与えられる場合は,定積分を求めるのにわざわざ数値積分する必要はない。 そうでない場合でも,よく出てくるものについては定積分が特殊関数として定義され(誤差関数,楕円関数など),市販の数学ライブラリに納められていたり,数値計算のデータブックで優秀な近似式が見つかることも多い。 しかしながら,比較的性質の良い関数なら,変形してライブラリを探したりするよりは,自分でプログラムを組んでしまう方が手っ取り早く,計算時間をそれほど気にしなくても,実用的には十分な精度で数値解が得られるものである。 しかしながら階段ではなく,各区間で関数を右図のように直線で近似して台形の面積の和を求めることにすれば,プログラム上は以下のようにほんのわずかな修正で精度は格段に上がる。 右端(または左端)は加えない。 理由を考えてみよう。 階段で近似する場合の誤差は,図のような単調関数の場合,明らかに両端の柱部分である。 このことから一般に N 等分した場合の近似値 s N と真の値 s との差は s N - s < f max - f min h f max,f min は, a,b での最大値と最小値 であると考えてよい。 a である。 である。 の無い形で表すことが可能である。 問題は 「ノートNo. 2」 で述べた「丸め誤差の蓄積」である。 7, F12. 14159265 END DO END! 1389885 0. 999171 16 3. 1409416 0. 999793 32 3. 1414294 0. 999948 64 3. 1415517 0. 999987 128 3. 1415832 0. 999997 256 3. 1415906 0. 999999 512 3. 1415911 0. 999999 1024 3. 1415923 1. 000000 2048 3. 1415927 1. 000000 4096 3. 1415932 1. 000000 8192 3. 1415925 1. 000000 16384 3. 1415939 1. 000000 32768 3. 1415918 1. 000000 65536 3. 1415901 0. 999999 131072 3. 1415541 0. 999988 262144 3. 1415567 0. 999989 524288 3. 1412396 0. 999888 1048576 3. 1404257 0. 999628 区分数をむやみに増やしても,何の役にもたたず,かえって誤差が増えていることがわかるだろう。 この区分数を2のn乗の形にとることは,次のシンプソン公式との関係で意味がある。 (2)シンプソン公式 連続する3点を放物線で近似することにより,さらに精度はよくなる。 ] となる。 プログラムはやや複雑になる。 (関数の定義部分は前出のプログラムと同じだから省略した。 ) INTEGER :: j, k, N 1 4 1 1 4 1 1 4 1... REAL :: h, s, x, f 1 4 1 1 4 1..... PRINT " I10, F12. 7, F12. 1415927 1. 000000 16 3. 1415927 1. 000000 32 3. 1415927 1. 000000 64 3. 1415932 1. 000000 128 3. 1415930 1. 000000 256 3. 1415913 1. 000000 512 3. 1415930 1. 000000 1024 3. 1415930 1. 000000 2048 3. 1415913 1. 000000 4096 3. 1415951 1. 000001 8192 3. 1415949 1. 000001 16384 3. 1415930 1. 000000 32768 3. 1415961 1. 000001 65536 3. 1416073 1. 000005 131072 3. 1416357 1. 000014 262144 3. 1414626 0. 999959 524288 3. 1418412 1. 000079 1048576 3. 1398065 0. 999431 結果を見てわかるように,このような滑らかな関数であれば,有効数字6桁の範囲でなら,実に8等分でも十分なのである。 単一の定積分を求めるだけなら,台形公式でも十分役立つ。 アルゴリズムを暗記できるくらいにプログラムが簡単だからである。 しかしながら大きなプログラムの中で定積分を繰り返し何度も必要とする場合にはシンプソン公式が有効である。 ただし上の例ではプログラムを分かりやすくするため,これを使ってはいない。 こうして計算して途中の結果も出力すれば,結果的には同じ計算回数でもって近似が上がっていく(あるいは次数が高すぎると悪くなっていく)経過を見ることができる。 関数は,ここで用いたものでもよいし,そのほか予め定積分の分かっているものがよい。 [Visual Fortran を使用する場合は,コンパイルの際に実数処理最適化を無効にするオプション「 -Op 」 をつけてコンパイルすること。 上の方法で中間点の値の和を求める時にも利用できる。 これはあくまでも計算機の誤差の特徴や実数計算の最適化を理解してもらうためであって,実際にはこんな計算を行うことは愚かであり, 結果としてほしい精度を得るのに必要最小限の区分数を用いればよい。 (4)ロンバーグ公式 倍精度(有効数字15桁)で結果を得たいときには,原理的にはシンプソン公式でも1000〜5000等分くらいの区分数が必要である。 そこで,さらに高次の多項式で近似することが考えられよう。 台形公式とシンプソン公式の関係は次のように書くこともできる。 と展開される( オイラー-マクローリンの公式)。 ここでは右辺の展開係数の具体的な形を気にすることはない。 となり近似の次数が向上する。 区分幅が2倍のとき,先頭の項は今度は 2 4 倍になる。 高次の多項式を用いて補間近似を行う公式の最も分かりやすい例であろう。 , 2 p 区分の台形公式による値, S 0, 0 , S 0, 1 ,... , S 0, p-1 , S 0, p を求めておき,せっかくそこまで計算したのであれば,次に上の漸化式を用いて S p, p まで求めれば,計算操作をさほど増やすことなく与えられた区分数において原理的には最良の近似を得ることができる。 (5)無限区間の積分 積分区間が無限になる場合,あるいは区間は有限でも端(または内部のどこか)で関数が発散している場合や,関数そのものは発散しなくても微分が発散しているような場合,以上のようにはいかない。 思うようにはいかないであろう。 ) このような場合には,一般には変数変換によって特異性を除くことができれば,ここまで述べてきた方法を適用することができる。 あるいは,予め関数の漸近形が評価できる場合には,発散点を挟む狭い領域を除くとか積分区間を有限区間で近似した場合の誤差を評価することができるから,素朴にはこのようにして積分値を求めることも考えられよう。 最後におそらく意外な事実をあげておこう。 これは(4)で述べたを見れば予想できよう。 この場合の誤差は,区分幅ではなく打ち切りから来るものの方が本質的である。 関数の収束が十分に速い場合には,信じられないほどの粗さで驚くべき精度の結果が得られる。 0625, 0. 125, 0. 25, 0. 5 でである。 この事実を利用すれば,有限区間の積分であっても,変数変換により収束の速い関数の無限区間の積分に変換することによって,計算効率を上げることが考えられる(二重指数関数法)が,ここでは割愛する。 単発の積分なら,ここで述べた拡張定積分も含めてやってのけてくれる。 「プログラム」「Maple V」を立ち上げてから以下を実行してみよ。 (>はプロンプトで,行入力は ;(セミコロン)で閉じさせること。 b と指定する。

次の