等間隔の離散データの数値積分
等間隔の離散データを用い数値積分を行う場合、例えば Legendre 多項式で級数展開を行う場合は、データ個数の問題を除けば、台形則、Simpson1/3
則、Simpson3/8 則、Boole 則を積分手法として適用できる。あるいは、各種の補間法を用い新たに生成したデータにより、Gauss-Legendre積分計算等々を適用し、積分出来るかも知れない。
このような等間隔の離散データの例として、前章の数値積分(連続系)で行った手法、数値積分(台形則、Simpson1/3 則、Simpson3/8
則、Boole 則)を用い、Chebyshev 多項式 t11 に対して Legendre 多項式の級数展開の計算を行った。
この離散データの数値積分の計算は、不等間隔データの数値積分を行うための前段階の説明である。
不等間隔あるいは不均等間隔の離散データの数値積分
不等間隔の離散データに対して、数値積分を行う場合は、2次式のSimpson1/3則、3次式のSimpson3/8 則、4次式の Boole
則 等々を直接に適用する事は出来ないので、それぞれの式が簡易な扱いに整理される前の計算方式で計算しなければならない。
簡易な扱いに整理される前の計算方法である、 2、3 次の積分式で計算を行った。これらの計算方法は Lagrange 補間の多項式から求める事が出来る。
1、離散データへの Legendre 多項式の級数展開の適用 (コード 1 )
前章では、連続した関数に対して級数展開を行った。この節では、[-1,1] 区間の Chebyshev 多項式 t11 の
離散データ( 120 等分)に Newton-Cotes法(台形則、Simpson1/3 則、Simpson3/8 則、Boole 則)で、
Legendre 多項式の級数展開を行った。
これらの直交関数は、類似した構造(三角関数で関連付けられる)のために、計算がスムーズに行くと予想され
るので、両者を選択した。Legendre 多項式を Chevyshev の多項式で、展開するのは、なんとなくフーリエ展
開するのと同じと感じたから。単に高調波の集団に分けているから。曲線の集団の方が非実用的で面白い。
なお、コード 1 の計算は、不等間隔の離散データの数値積分の級数展開(次次節)でも計算出来る。
それぞれの級数の係数をLegendre6分点での係数と比較する事により、これらの積分手法の精度比較を行
った。結論として、 1分割に 4個のデータを必要とする 30 分割 (30・4 = 120個)の Boole 則が精度が高い。
この比較は、120 個のデータにより台形則で係数を求める方法、あるいは、120 個を60 個の離散データとし
て Simpson1/3 則( 120 個のデータ使用)で求める方法、また、40 個のデータでの Simpson3/8 則( 120 個使
用)、更には、30 個のデータでの Boole 則( 120 個使用)で求める方法で、いずれの方法が同じデータを用いて、
より高い近似になるのかを知る事を目的とした。
2、離散データ (下表)
x は、[-1,1] を 120 等分し、この x に対応した Chebyshev t11 の離散データ( g(x) )を示す。
3、級数展開の係数
120 個のデータの台形則、60 個とした Simpson1/3則、40 個の Simpso3/8則、30個の Boole則の積分手
法で得た Legendre 多項式の級数展開の各次数の係数を下表に示す。
同じ120個のデータを、30の区分分割数とした Boole 則が数値積分Legendre6分点の係数との比較で良い。
この結果は、数値計算5 直交関数 Legendre多項式の直交性確認 からでも推定できる。
また、上記の各係数の値をLegendre6分点法の算出値との差比 % で示した表を下にしめす。Boole 則が精
度が良いのは前記の通りである。3 次式近似に対応する Simpson 3/8 則が、2 次式近似に対応する
Simpson 1/3 則 より精度が悪い。これは、それぞれの持っている誤差によると考えられる。
Simpson 3/8 則より、Simpson 1/3 則が、数値計算でよく用いられるのは、この精度のよさによるのでは
ないかと考える。
1.不等間隔の離散データの数値積分の方法 (コード 2)
不等間隔のデータに対して、2 次式の Simpson 1/3 則、3 次式の Simpson 3/8 則、4 次式の Boole 則を
適用する場合は、それぞれの式が簡易な扱いに整理される前の計算で行う必要があり、これらは Lagrange 補
間の多項式から求める事が出来る。
1)不等間隔の離散データ用 2 次式( Simpson 1/3 則の原形) の算出
平面 (x , y) の 3 点を通る式は多数あるが、 2 次式に限定すれば、9-C-2式になる。
その 3 点を
9-C-1式
とすると、Lagrange 補間多項式は、以下で示される。
9-C-2式
次に、9-C-2式が 3 点を通る 2 次式である事を示す。
この式に、x=x0 を代入すれば、第 1 項の分子は分母と同じになり、y0 の係数項が 1 となり、第 1 項は、
y0 となる。第 2 項と第 3 項は、(x-x0) の部分が、(x0-x0) となるので、ゼロとなる。
従い、 y(x0)=y0 となる。
同様に、x1、x2 を代入すれば、y(x1)=y1、y(x2)=y2 となる。
これらにより、9-C-2式は、3 点を通る 2 次式である事になる。
上記の式を積分すると、以下の式 9-C-3 式となる。
9-C-3式
9-C-3式の第 1 項の積分を具体的に行う。
9-C-4式
9-C-4式で、定数項を除いた積分記号の個所を積分する。
9-C-5式
上式 9-C-5 式は、(x2-x0) を因子に持つので、下式となる。
9-C-6式
なお、上式を整理した下式で、2x02 - x2x0 - x22 を凝視すると、2a2 - ab - b2 = (2a + b)(a - b)
が浮かぶ。
9-C-7式
従い、第 1 項の積分は、以下となる。下式で、分母の x0 、x1 の括弧内の互いの位置に注意。
9-C-8式
9-C-9式
次に、9-C-2 式の第 2 項を計算する。
9-C-10式
積分個所を積分すると、以下となる。
9-C-11式
上式 9-C-11 式は、(x2-x0) を因子に持つので、下式となる。
9-C-12式
第 2 項の積分 9-C-10 式は、以下の 9-C-13 式となる。分母の括弧内の位置!!
9-C-13式
第 3 項の積分は、以下の 9-C-14 式となる。これの算出計算は第 1 項と同じである。
8-C-14式
したがって、不均等間隔の離散データを積分する 2 次式による積分計算式は、以下となる。
9-C-15式
上記 9-C-15式で、 (x1-x0)=(x2-x1)=h として、代入すれば、Simpson 1/3 則を得る。
2)不等間隔の離散データ用 3 次式(Simpson 3/8 則の原形)の算出
下記の 4 点を通る
9-C-16式
Lagrange補間の 3 次式は、下記の 9-C-17式になる。
9-C-17式
この式を積分すると、3 次式による不均等間隔データの積分方法が得られる事になる。ここでは、式が煩
雑感を与えるために、計算の途中経過を省き、結果のみを記載する。
上式の y(x) の積分は、
9-C-18式
で示される。この時に、第一項の積分は、
9-C-19式
となる。第二項は、以下となる。
9-C-20式
第三項は、第二項と類似の式となり、以下となる。
9-C-21式
第四項は、第一項と類似の式となり、以下となる。
9-C-22式
第一項から第四項までの結果を合算すると、不均等間隔の離散データを積分する 3 次式による積分計算
式が得られる事になる。これらの結果の式で、 (x1 - x0) 等を h と置き、代入すると、Simpson3/8 則とな
るはずである。これは、下記の数値計算による検証で確認できる。
2、不等間隔用計算式の検証 (コード 2 )
二次式(二次積分式)、三次式(三次積分式) の検証を行った。 この検証計算は、以下に示す計算方法である。
例えば、上記 9-C-15式は、三点 (x0 , y0) , (x1 , y1) , (x2 , y2) を通る2次式である。
9-C-15式
今、
9-C-23式
とする。この時に、3 点の x を 以下とすると、x に対応した y は以下となる。
9-C-15式の左辺 9-C-16式の [1,4] 区間の定積分は、以下のように 42 となる。.
9-C-24式
また、9-C-15式の右辺の第一項は、以下のように 0 となる。
9-C-25式
第二項は、以下のように 18 となる。
9-C-26式
第三項は、24 となる。
9-C-27式
9-C-25式、-26式、-27式の和 42 (=0+18+24) は、9-C-24式の 42 と同じである。
従って、3 点を通る 2 次式の Lagrage 補間式の積分式(等間隔、Simpson1/3 則)、4点を通る 3 次式の
Lgarange 補間式の積分式(等間隔、Simpson3/8 則)等々は、各点が等間隔あるいは不均等間隔に係らず、
その次数においては、正確な定積分値を与える計算式である。
上記の考えで、検証計算コードは、次数毎に、x の個数とそれぞれの値とxに対応した y(x) を予め求めて
置き、その値を積分式に代入する事で、積分値を算出する方法を採った。
for(int j=0;j<=kdiv;j++)この計算では、等間隔の分割数 kdiv を予め求め、級数展開の計算を行った。
{
p=j+p;//通過するたびに、pがj+pで増加 注、等間隔の時は消す。
x=2.0/kdiv*(j+p)-1.0;// 増加した p+j で x の位置が増加
・・・ }