数値計算を使って積分の計算を行う~シンプソン法の解説~

資料請求番号:TS31 TS38

数値計算による積分計算の基本~Simpson法~

積分の計算は高校生までは紙とペンを使用し、様々な積分テクニック(置換積分・部分積分など)を駆使して行っていきます。
大学の初年度に上がると重積分を学習しますが、これも紙とペンを使って問題を解いていき、単位を取得します。

ところが、大学3年生以上になり、専門分野の勉強が進んでいくと、紙とペンでは解けない積分や、紙とペンを解くのが非常に難解だったり、手続きが多くてミスが起こりやすい積分の問題に度々出会うようになります。
そこで、「積分の計算をコンピュータで解く方法」が開発されており、代表例としてシンプソン法があります。

今回の資料は、シンプソン法の理論的解説を詳しく行い、
プログラムを解いたり、シンプソン法を使ったプログラムを使用する際に迷いが起こらないようにするための基礎知識を整理するための資料になります。

台形近似より精度の高いシンプソン法

シママ
今回のテーマはシンプソン法による積分の計算ね!ストークはシンプソン法使ったことある?
ストーク
なんかなぁ・・。大学でちょっとやったことあるんやけど、どんなことしとるんか覚えていないたいね。
シママ
へぇ~。ストークが大学でやったこと忘れるなんてあるんだ・・・。
ストーク
まぁ、積分の計算はな、台形近似でもどうにかなるからな。
ストーク
って思うとって、こないな計算をやってみたらな、どうにも実現象と計算が合わなさ過ぎて、基礎式の再構築と、パラメータの確認と・・・って2日かけて色々悩んだ結果、その原因は積分計算の精度の甘さやってん。
ストーク
こういう、自分の勉強不足が原因で実験に失敗したり、時間を費やしたりすると・・・へこむよなぁ・・・。
シママ
なるほどねぇ・・・その気持ち、わかる気がする。
ワタシもバグの原因がわからなくてアルゴリズムとプログラムを何度も何度も往復しながら悩んで、結局は「ただの文法間違いで代入値が勝手にゼロになってました。」とかあると、悔しくなるもん。
最近、コンパイラの性能が上がってきてて「多少間違っていても動いてしまう」ようになってきているから、むしろプログラミングが難しくなってきている気がするのよ。
ストーク
そうなんや~。それで、シンプソン法と言うのはなんね?台形近似より精度ええんよな?
シママ
うん!もちろん!台形近似よりショボかったり、技術レベルが低レベルだったら、わざわざこんな形で資料作ることなんてないでしょ?
ストーク
それな。

シンプソン法は2次関数で近似する

シママ
そもそも、台形近似で精度の甘さが目立ってきてしまうのは、非線形性の高い関数を積分したときなのよね。
ストーク
せやな。台形近似は積分したい関数を「ある微小区間においては線形である」として近似するけん、
このとき、変化率の大きな関数を取り扱ったり、4次関数や三角関数みたいなグネグネした関数を取り扱ったりすると台形近似の限界が見えてくると思うたいね。
シママ
そうそう。そういうグネグネした関数を無理矢理線形、つまりは直線に近似しようとするから精度の甘さが出てきてしまうのよ。
マシンスペックのいいヤツ使えば何とかなるかもしれないけど、ストークの仕事の場合、ノートパソコンを実験室に持って行って実験結果を見ながらサッと計算してみたいっていう希望があると思うのよね。
ストーク
そうなんよ。反復数が万単位になると時間がかかってまう。それがちょっとしたストレスなのな。
でも、計算結果が収束しなければ安心して次の仕事に進めんから・・・ってなって結局ストレスなのな。
シママ
計算時間がね、研究開発活動の推進において障害になるってハッキリ認識しているんであれば、計算アルゴリズムの見直しが必要になるのよね。
今回みたいに積分するときは台形近似ではなくシンプソン法にしてみよう。みたいなね。
シママ
それでね、シンプソン法の特徴なんだけど、積分するときの微小要素を「台形」ではなく「二次関数」に近似しようっていう発想なのよ。
ストーク
二次関数に近似するん・・・。
ストーク
あー・・・。2次関数なら直線はもちろん、急カーブとか急に変化率が大きなる問題にも対応できるというわけか~。
シママ
さすがストーク!そういうこと!以後、イメージしやすいように図を用意したから、それを使って説明するね!

シンプソン法 導出

2次関数近似(シンプソンの公式)

シママ
例えば、こんな感じ関数があって、これを積分したいとするじゃない?

シママ
この時、その関数の微小区間[x0~x2]をとって、ここの区間を二次関数で近似してみるのよ。
説明の関係上、微小区間に見えないけど、そこは勘弁してね。

ストーク
まぁ、ある関数f(x)を二次関数で近似するっていう概念と具体的な導出がわかればええからな。
シママ
そうね。じゃあ、その具体的なシンプソンの公式の導出ってのをやっていくね。
シママ
微小区間[x0~x2]における関数f(x)が作るカーブの形あるでしょ?
ストーク
f(x0),f(x1),f(x2)からなるカーブのことな。
シママ
うん。このカーブを2次関数で近似するのよ。

シママ
2次関数の基本形と言えば、こんな形。

ストーク
おう。
シママ
じゃあ、この赤いカーブがこの形になるとして、区間[x0~x2]について積分するとこうなるね。

ストーク
わかる。
シママ
この積分を手計算で実行してみてよ。
ストーク
これでええか?

シママ
うん。とりあえず、この計算結果は置いておいてね。
シママ
それで次はこれを計算してみるのよ。

ストーク
あーこれ・・・結果ありきなヤツやん。
シママ
まぁ、しょうがないじゃない。それとも、この連立方程式をA,B,Cについて解いてみる?

ストーク
やだ。
シママ
でしょ~?ワタシもイヤ~!
シママ
今回はさぁ、「シンプソンの公式は二次関数で近似している」ってことを基本的な思想としているってとこが分かればいいと思うからさぁ、これでいいんじゃない?
ストーク
それな。f(x0)+4f(x1)+f(x2)ば計算するとこうなるんか。

ストーク
あ~。これ、さっき積分して計算して出てきた部分と同じユニットが現れるけんね。

シママ
そうそう!そしたら、この式が導かれるよね!これがシンプソンの公式。右辺がちゃんと全部既知数になってるでしょ?

ストーク
あ??
シママ
・・・・。
ストーク
これがシンプソンの公式なん?これだけじゃあ、関数f(x)の積分はできないけんね。
シママ
まぁ、そうなんだけどさぁ・・・。
ストークが「自分の中にない論理が現れたとき」とか、「想定外の話をされたとき」によくやるこの
「あ?」ってヤツ?あれ、わりと心理的攻撃力あるよ。
ストーク
あ・・・すまねぇ。

合成シンプソンの公式

シママ
うん。ストークの言う通り、これだけじゃ、任意の関数f(x)の積分はできないんだよね。
そこで、2次関数近似した微小区間[x0~x2]と同じモノをm個集めるわけよ。
ストーク
は??
シママ
だから、その「あ?」とか「は?」とかやめろって言ってんの!!
ストーク
ううっ・・・すまねぇ。
シママ
クセかもしんないけどさぁ・・。上司先輩からは生意気、同僚部下からは威圧的に見えちゃうよ?ワタシはもう慣れてるけど。
ストーク
・・・・・。
シママ
まぁ、こういうこと。


ストーク
ほう~。青の面積と赤の面積ば足して・・・ってのをm回やるわけやんな~。
シママ
そうそう!そしたら[x0~x2m]に渡って積分する計算ができるでしょ?

ストーク
なるほどなぁ~・・・。かしこかね~・・・。
ストーク
ただ、これやとプログラミングできにくそうやな・・・。
シママ
お。ストークもだいぶプログラミングの勘がついてきたんじゃない?
シママ
そうなの。だから、1区間の幅をhとして、こんな風に定義して・・・

シママ
そしたら、x1ってx0+hでしょ?
ストーク
ああ。x2x0+2h,x3x0+3hで、最終的にx2mx0+2mhになるってオチか。
シママ
そう。そういうオチ。それで式変形してみてよ。

ストーク
こうか?
シママ
うん。それが合成シンプソンの公式って言って、これで任意の関数f(x)の積分が実行できるようになるのよ。

ストーク
ほう・・・なるほど~。
ストーク
ありがとな!
シママ
うん!

まとめ

今回は、積分をコンピュータで解くのに使用されるシンプソン法について解説しました。
積分をコンピュータで解く初歩的な方法には台形近似があるのですが、台形近似では非線形性の高い関数の積分を行ったときに精度の甘さが出てきてしまいます。
ここで、「積分計算を台形の集合体の和ではなく、二次関数の集合体の和に近似しよう。」というのがシンプソン法の発想です。

ストークも惑わされた言葉の定義についてですが、積分したい関数を二次関数に近似するだけの公式を単に「シンプソンの公式」といい、
積分したい関数を二次関数の集合体として取り扱う公式を「合成シンプソンの公式」と呼びます。

私たちが積分の計算でプログラムを組む時に使われるのは「合成シンプソンの公式」の方になります。
合成シンプソンの公式でググってみるとわかると思いますが、色々な式の形があり、混乱することがあると思います。
奇数だけ足し合わせたり、偶数だけ足し合わせるとか、色々です。
しかし、基本思想として「2次関数近似の寄せ集め」ということを理解しておけば、自分なりの理解の仕方がマスターでき、それに基づいてプログラムを書けるようになるでしょう。

この資料は私のシンプソン法への自分なりの理解の整理の結果でもあるのです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です