• ベストアンサー

分点座標が±0.5のGauss-Legendre積分公式を知りませんか。

高精度化が必要な数値計算をやっています。 特に、数値積分の高精度化が必要なため、Gauss-Legendre積分公式の使用を考えています。 ただし、解く方程式が積分方程式であるなどの理由からそのままでは使用できません。 使用するためには、Gauss-Legendre積分公式の分点座標が区間の中心である必要があります。 例えば、分点数が2の場合、通常は座標x=±0.57735...重みw=1ですが、これを座標x=±0.5とできるような積分公式はないでしょうか?

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

  • ベストアンサー
  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.1

ううむ。これだけじゃ回答しようがないと思うなあ。  ガウス・ルジャンドルの数値積分というのは、f(x)を-1~1の区間で積分するときに、n次ルジャンドル関数の零点にあたるxでf(x)をサンプリングして重み付きの和を取るんでした。無論、積分区間内に特異点があったりしたら使えません。一般に積分範囲が x=a~b である場合には x=((b-a)t+a+b)/2 と変数変換すれば、t=-1~1のtに関する積分になる。そしてdx/dt = (b-a)/2という因子を掛け算しておけば良いですね。n次のガウス・ルジャンドル法は、高々n次の多項式で近似できるf(x)を扱う場合に旨く行きます。  さて、ご質問は、おそらく積分範囲 x=-1~1に対してガウス・ルジャンドルの数値積分を使いたいけれど、次数を2にして、分点、すなわちサンプリングする点を±0.5だけにしたい、という注文です。たぶん、±0.5における被積分関数f(x)の値なら簡単に求められる、というのでしょう。  もちろん、適当な一次式ではない関数g(たとえば3次関数)を用いて x=g(t) という変数変換でx=±0.5をt=±0.57.... に移し同時にx=±1をt=±1に移す、ということ自体は簡単です。するとf(g(t))と dx/dt = g'(t) の積を被積分関数としてt=-1~1について積分することになります。この場合、被積分関数 f(g(t)) g'(t) がtの2次多項式で近似できるんでないと、2次のガウス・ルジャンドル法を使って精度が出るという保証はありません。  高精度の数値積分をやりたいと仰っている割に、f(x)が高々低次の多項式で近似してしまえるんだったら、何もガウス・ルジャンドル法に拘る必要はないんで、例えばニュートン・コーツ型の数値積分、すなわち分点を等間隔に取る方法でも十分じゃないの?と思うんですが、どうなんでしょうね。  或いは分点の数をもっと増やして良い、というのだったら、代わりに例えば-1~-0.5, -0.5~0.5, 0.5~1の3つの区間に分けてそれぞれ積分するのでも良い。被積分関数の傾きが急な部分でサンプリングを細かくしてやるというのも精度が出ますし、その代わりに適当な変数変換をして等間隔サンプリングしたり、ガウス・ルジャンドル法を使ったり…いろんな処方が考えられます。  ですから、「±0.5」と限定なさる理由をもう少し明確に補足して戴くか、具体的に被積分関数をupして戴かないと、ろくな回答にならないと思います。

DCSIMPC
質問者

お礼

回答が遅れました。謝罪します。 幾つかの提案を頂きましたが、 その中の変数変換を用いる方法が私が望んでいたものです。また、実際に適用し以下の結果を得ました。 変換関数は、こうなりました。 g(t)=at^3+bt,(a=0.200..., b=0.799...) 積分は、変換関数とGauss-Legendre公式(2次)により、こうなりました。 ∫f(x)dx≒cf(0.5)+cf(-0.5), (c=3a(0.577...)^2+b) これを用いてやってみます。 PS. ニュートン・コーツと分点数増の方法でなく、変数変換の方法を採用した理由は、1区間の分割数を2以上にできないため、2分割でより良い精度の積分公式が必要なためです。詳しく説明できなくてごめんなさい。 非常に有益な回答ありがとうございます。

関連するQ&A