21
Simpson H24 BioS 1 はじめに 1.1 本稿の内容 Simpson 2 重積分のための準備 Simpson の公式による数値積分 13 2 S i = d i 6 · φ(z 2i-1 )+ 4d i 6 · φ(z 2i )+ d i 6 · φ(z 2i+1 ) (1) f (x) d i = z 2i+1 - z 2i-1 S i = d i 6 · f (z 2i-1 )+ 4d i 6 · f (z 2i )+ d i 6 · f (z 2i+1 ) = z 2i+1 - z 2i-1 6 · f (z 2i-1 )+ 4(z 2i+1 - z 2i-1 ) 6 · f (z 2i )+ z 2i+1 - z 2i-1 6 · f (z 2i+1 ) マリ m i =1, ··· ,m S 1 = z 3 - z 1 6 · f (z 1 ) + 4(z 3 - z 1 ) 6 · f (z 2 ) + z 3 - z 1 6 · f (z 3 ) S 2 = z 5 - z 3 6 · f (z 3 ) + 4(z 5 - z 3 ) 6 · f (z 4 ) + z 5 - z 3 6 · f (z 5 ) S 3 = z 7 - z 5 6 · f (z 5 ) + 4(z 7 - z 5 ) 6 · f (z 6 ) + z 7 - z 5 6 · f (z 7 ) S 4 = z 9 - z 7 6 · f (z 7 ) + 4(z 9 - z 7 ) 6 · f (z 8 ) + z 9 - z 7 6 · f (z 9 ) S 5 = z 11 - z 9 6 · f (z 9 ) + 4(z 11 - z 9 ) 6 · f (z 10 ) + z 11 - z 9 6 · f (z 11 ) . . . S m-2 = z 2m-3 - z 2m-5 6 · f (z 2m-5 ) + 4(z 2m-3 - z 2m-5 ) 6 · f (z 2m-4 ) + z 2m-3 - z 2m-5 6 · f (z 2m-3 ) S m-1 = z 2m-1 - z 2m-3 6 · f (z 2m-3 ) + 4(z 2m-1 - z 2m-2 ) 6 · f (z 2m-2 ) + z 2m-1 - z 2m-3 6 · f (z 2m-1 ) S m = z 2m+1 - z 2m-1 6 · f (z 2m-1 ) + 4(z 2m+1 - z 2m-1 ) 6 · f (z 2m ) + z 2m+1 - z 2m-1 6 · f (z 2m+1 ) f (z i ) 1

Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

Simpsonの公式による数値積分3H24年度 BioS継続勉強会:第9回補助資料1

土居 正明

1 はじめに

1.1 本稿の内容

本稿では、Simpsonの公式を用いた重積分の近似計算方法を考えます。

2 重積分のための準備

「Simpsonの公式による数値積分 1」で見ました、3グリッドごとに 2次関数で近似する式

Si =di

6· φ(z2i−1) +

4di

6· φ(z2i) +

di

6· φ(z2i+1) (1)

をもう少し整備しましょう。具体的には、関数 f(x)の積分に変更し、di = z2i+1 − z2i−1 を代入しまして、

Si =di

6· f(z2i−1) +

4di

6· f(z2i) +

di

6· f(z2i+1)

=z2i+1 − z2i−1

6· f(z2i−1) +

4(z2i+1 − z2i−1)6

· f(z2i) +z2i+1 − z2i−1

6· f(z2i+1)

とします。このカタマリがm個あるとして、i = 1, · · · ,mまで足し合わせてみましょう。

S1 =z3 − z1

6· f(z1) +

4(z3 − z1)6

· f(z2) +z3 − z1

6· f(z3)

S2 =z5 − z3

6· f(z3) +

4(z5 − z3)6

· f(z4) +z5 − z3

6· f(z5)

S3 =z7 − z5

6· f(z5) +

4(z7 − z5)6

· f(z6) +z7 − z5

6· f(z7)

S4 =z9 − z7

6· f(z7) +

4(z9 − z7)6

· f(z8) +z9 − z7

6· f(z9)

S5 =z11 − z9

6· f(z9) +

4(z11 − z9)6

· f(z10) +z11 − z9

6· f(z11)

...   

Sm−2 =z2m−3 − z2m−5

6· f(z2m−5) +

4(z2m−3 − z2m−5)6

· f(z2m−4) +z2m−3 − z2m−5

6· f(z2m−3)

Sm−1 =z2m−1 − z2m−3

6· f(z2m−3) +

4(z2m−1 − z2m−2)6

· f(z2m−2) +z2m−1 − z2m−3

6· f(z2m−1)

Sm =z2m+1 − z2m−1

6· f(z2m−1) +

4(z2m+1 − z2m−1)6

· f(z2m) +z2m+1 − z2m−1

6· f(z2m+1)

では、f(zi)の値ごとに整理していきましょう。

1

Page 2: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

f(z1)の係数 :z3 − z1

6

f(z2)の係数 :4(z3 − z1)

6

f(z3)の係数 :z3 − z1

6+

z5 − z3

6=

z5 − z1

6

f(z4)の係数 :4(z5 − z3)

6

f(z5)の係数 :z5 − z3

6+

z7 − z5

6=

z7 − z3

6

f(z6)の係数 :4(z7 − z5)

6

f(z7)の係数 :z7 − z5

6+

z9 − z7

6=

z9 − z5

6...

f(z2m−4)の係数 :4(z2m−3 − z2m−1)

6

f(z2m−3)の係数 :z2m−3 − z2m−5

6+

z2m−1 − z2m−3

6=

z2m−1 − z2m−5

6

f(z2m−2)の係数 :4(z2m−1 − z2m+1)

6

f(z2m−1)の係数 :z2m−1 − z2m−3

6+

z2m+1 − z2m−1

6=

z2m+1 − z2m−3

6

f(z2m)の係数 :4(z2m+1 − z2m−1)

6

f(z2m+1)の係数 :z2m+1 − z2m−1

6

まとめます。f(zi)の係数を wi とおくと、

wi =

z3 − z1

6(i = 1)

4(zi+1 − zi−1)6

(i : 偶数)

zi+2 − zi−2

6(i : 1, 2m + 1以外の奇数)

zi − zi−2

6(i = 2m + 1)

となります。この wi をウェイトと呼びます。

このとき、総面積の近似値 S は以下のように表せます。

S =2m+1∑

i=1

Si =2m+1∑

i=1

wi · f(zi)

3 重積分の計算

具体例を用いて計算していきましょう。∫ 1

−1

(∫ 2

−2

Φ(3− x2)φ(x2 − x1)dx2

)φ(x1)dx1 (2)

を計算します。内側の積分の中の、φ(x2−x1)に対して、y = x2−x1 とおきます。x1 を定数とみなして変数変換しますと、∫ 1

−1

(∫ 2−x1

−2−x1

Φ(3− y − x1)φ(y)dy

)φ(x1)dx1 (3)

2

Page 3: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

となります。この積分を Simpsonの公式を用いて計算する手順は以下の通りです。

(Step1)変数 x1 に対して、グリッド z1, z2, · · · , z2m+1 をとる*1。

(Step2) (Step1)の各グリッド zi に対して、積分

∫ 2−zi

−2−zi

Φ(3− y − zi)φ(y)dy (4)

を考える。

(Step3)グリッド zi に対して、積分 (4)を計算するための y のグリッド z(i)1 , · · · , z

(i)2mi+1 をとる*2。

(Step4) (Step2)のグリッド zi に対応するウェイト wi、(Step3)のグリッド z(i)j に対応するウェイト w

(i)j をとり、面積 (2)の

近似値 S を

S =2m+1∑

i=1

2mi+1∑

j=1

wi · w(i)j · Φ

(3− z

(i)j − zi

)· φ

(z(i)j

)· φ(zi) (5)

で求める。

では、プログラムを考えていきます。長くなってイメージがつかみにくいですので、本稿の最後に【補足 1】として、作成

されるデータセットのサンプルをご紹介します。プログラムを読んで「難しい」と思った方は、そちらも見ながらプログラ

ムを理解してください。

*no:通し番号, r:x i の数;

*low x1:x1 での積分の下端,  upp x1:x1 での積分の上端;

*low x2:x2 での積分の下端,  upp x2:x2 での積分の上端;

*f1:標準正規分布の確率密度関数,  f2:標準正規分布の累積分布関数;

%macro simp4(no, r);

 *【(Step1):変数 x1 に対するグリッドを作成する(d1~d5)】;

 *x1 に対するグリッドの作成(最初に −∞ < x1 < ∞の区間に {xi}をとる)*3;

  data d1;

   do i0 = 1 to&r-1;

    x = -3 - 4*log( &r / i0);

    output;

   end;

   do i0 =&r to 5*&r;

    x = -3 + 3*(i0 - &r) / (2*&r);

    output;

   end;

   do i0 = 5*&r + 1 to 6*&r -1;

    x = 3 + 4*log(&r / (6*&r - i0));

    output;

   end;

  run;

*1 このときのグリッドの取り方は、「Simpsonの公式による数値計算 2」で扱った、「一旦正規分布ベースのグリッド配置をしておいて、区間外の点を落として端っこを追加する」方法にします。以下、y に対するグリッドも同様の方法で考えます。

*2 上付きの添え字 (i)がついているのは、zi ごとにグリッドの取り方が変わるからです。*3 少し分かりにくくて申し訳ないですが、積分変数 x1, x2 と、グリッドを構成する際に考える {xi}は別物と考えていますのでご注意下さい。

3

Page 4: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

 *{xi}のうち、x1 の積分区間内の点だけ残す(両端は消す);

  data d2;

   set d1;

   if &low x1 < x < &upp x1;

  run;

 *一番上と一番下に、x1 の積分区間の両端を追加;

  data d3;

   set d2 end=final;

   if N = 1 and final=1 then do; *{xi}が積分区間内に 1つのとき;

    x1 = x;

    x = &low x1; output; *積分区間の下端を追加;

    x = x1; output;

    x = &upp x1; output; *積分区間の上端を追加;

   end;

   else if N =1 then do; *{xi}が積分区間内に 2個以上のとき;

    if i0 = 1 then output;

    else do;

     x1 = x;

     x = &low x1; output; *積分区間の下端を追加;

     x = x1; output;

    end;

   end;

   else if final=1 then do;

    if i0 = 6 * &r - 1 then output;

    else do;

     output;

     x = &upp x1; output; *積分区間の上端を追加;

    end;

   end;

   else output;

   keep i0 x;

  run;

4

Page 5: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

 *x1 に対するグリッド {zi}作成(グリッドの変数名は z1);

  data d4;

   retain retx 0;

   set d3;

   if N = 1 then do;

    z1 = x;

    output;

   end;

   else do;

    z1 = (x + retx) / 2; output;

    z1 = x; output;

   end;

   ret x = x;

   keep z1; *一旦 i0をなくす;

  run;

 *グリッドに通し番号を付与する;

  data d5;

   length i 8.;

   set d4;

   i = N ; *z の添え字 i を定義する;

  run;

 *【(Step3):x1 に対するグリッドごとに、x2 に対するグリッドを構成する(d6~d9)】;

 *まず、−∞ < x2 < ∞の範囲で {xi}を作成した後、x1 ごとに積分区間を考え、;

 *積分区間内のもののみ残す(端点は除く);

  data d6;

   set d5;

  * 2 つ目の積分の積分区間の上限・下限を決める;

   low y = &low x2 - z1;

   upp y = &upp x2 - z1;

   do j0 = 1 to&r-1;

    y0 =-3 - 4*log(&r / j0);

    if low y < y0 < upp y then output;

   end;

   do j0 =&r to 5*&r;

    y0 = -3 + 3*(j0 -&r) / (2*&r);

    if low y < y0 < upp y then output;

   end;

   do j0 = 5*&r + 1 to 6*&r -1;

    y0 = 3 + 4*log(&r / (6*&r - j0));

    if low y < y0 < upp y then output;

   end;

  run;

5

Page 6: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

 *端点の追加;

  data d7;

   set d6;

   by i;

   if first.i = 1 and last.i = 1 then do;

    y1 = y0;

    y0 = low y; output;

    y0 = y1; output;

    y0 = uppy; output;

   end;

   else if first.i = 1 then do;

    if j0 = 1 then output;

    else do;

     y1 = y0;

     y0 = low y; output;

     y0 = y1; output;

    end;

   end;

   else if last.i = 1 then do;

    if j0 = 6*&r - 1 then output;

    else do;

     output;

     y0 = uppy; output;

    end;

   end;

   else output;

   keep i z1 y0;

  run;

 *x2 に対するグリッド {z(i)j }の作成(グリッドの変数名は z2);

  data d8;

   retain rety0 0;

   set d7;

   by i;

   if first.i = 1 then do;

    z2 = y0; output;

   end;

   else do;

    z2 = (y0 + rety0) / 2; output;

    z2 = y0; output;

   end;

   ret y0 = y0;

   keep i z1 z2;

  run;

6

Page 7: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

 *番号付与;

  data d9;

   length i 8.;

   retain j 0;

   set d8;

   by i;

   if first.i = 1 then j = 1;

   else j = j+1;

  run;

 **********************************************;

 * 以下、ウェイトの計算 ;

 **********************************************;

 *ウェイト w1の計算;

 * →  f(z i) の係数の算出には、;

 * z i-2, z i-1, z i, z i+1, z i+2が必要;

 *【変数 x1 に対するウェイトの計算 (w1p1~w1)】;

 *x1 のグリッドの一番上(最小値)を除く;

  data w1p1;

   set d4;

   if N = 1 then delete;

   rename z1 = z1p1;

  run;

 *x1 のグリッドの上から 2つを除く (w1p1の一番上を除く);

  data w1p2;

   set w1p1;

   if N = 1 then delete;

   rename z1p1 = z1p2;

  run;

 *x1 のグリッドの一番下を除いて、一番上を欠測にする;

  data w1m1;

   set d4 end=final;

   if N = 1 then do;

    z1m1=. ; output;

    z1m1=z1; output;

   end;

   else if final̂= 1 then do;

    z1m1 = z1; output;

   end;

   keep z1m1;

  run;

7

Page 8: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

 *下から 2番目も除いて、上 2つを欠測にする;

  data w1m2;

   set w1m1 end=final;

   if N = 1 then do;

    z1m2 = . ; output;

    z1m2 = z1m1; output;

   end;

   else if final̂= 1 then do;

    z1m2 = z1m1;

    output;

   end;

   keep z1m2;

  run;

 *x1 に対するウェイトの構成(重み変数:w1);

  data w1;

   merge d4 w1p1 w1p2 w1m1 w1m2 end=final;

   i = N ;

   if i = 1 then w1 = (z1p2 - z1) / 6;

   else if final then w1 = (z1 - z1m2) / 6;

   else if mod(i, 2) = 0 then w1 = 4*(z1p1 - z1m1) / 6;

   else if mod(i, 2) = 1 then w1 = (z1p2 - z1m2) / 6;

   keep i w1;

  run;

 * 【変数 x2 に対するウェイト w2の計算 (w20~w2)】;

 *x1, x2 の両方のグリッドの入ったデータセットから、x2 のグリッドのみ取り出す;

  data w20;

   set d9;

   keep i j z2;

  run;

 *x2 のグリッドのうち、x1 ごとに一番上を除く;

  data w2p1;

   set w20;

   by i;

   if first.i = 1 then delete;

   j = j-1;

   rename z2 = z2p1;

  run;

8

Page 9: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

 *x1 ごとに 2番目も除く;

  data w2p2;

   set w2p1;

   by i;

   if first.i = 1 then delete;

   j = j-1;

   rename z2p1 = z2p2;

  run;

 *x1 ごとに一番上を欠測にする;

  data w2m1;

   set w20;

   by i;

   if first.i = 1 then do;

    j = 1; z2m1 = .; output;

    j = 2; z2m1 = z2; output;

   end;

   else if last.i = 1 then delete;

   else do;

    j = j+1; z2m1 = z2; output;

   end;

   keep i j z2m1;

  run;

 *x1 ごとに上から 2番目を欠測にする;

  data w2m2;

   set w2m1;

   by i;

   if first.i = 1 then do;

    j = 1; z2m2 = .; output;

    j = 2; z2m2 = z2m1; output;

   end;

   else if last.i = 1 then delete;

   else do;

    j = j+1; z2m2 = z2m1; output;

   end;

   keep i j z2m2;

  run;

9

Page 10: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

 *x2 に対するウェイトの構成(重み変数:w2);

  data w2;

   merge w20 w2p1 w2p2 w2m1 w2m2;

   by i j;

   if first.i = 1 then w2 = (z2p2 - z2) / 6;

   else if last.i = 1 then w2 = (z2 - z2m2) / 6;

   else if mod(j, 2) = 0 then w2 = 4*(z2p1 - z2m1) / 6 ;

   else if mod(j, 2) = 1 then w2 = (z2p2 - z2m2) / 6;

   keep i j w2;

  run;

 *【x1, x2 のウェイトデータを merge】;

 *ウェイトデータセット完成;

  data w;

   merge w1 w2;

   by i;

  run;

 ****************************************;

 * Simpsonの公式 (5)の計算;

 ****************************************;

  data d10;

   merge d9 w; *グリッドとウェイトをmerge;

   by i j;

   Si = w1 * w2 * %f2(3-z1-z2) *%f1(z1) * %f1(z2) ;

  *Si は Simspsonの公式の 2次関数で近似した面積のうちの 1つではなくて、1グリッド分;

   area + Si; *area:Siの累積和;

  run;

 *結果の出力;

  data out&no;

   length no r 8.;

   set d10 end=final;

   no =&no;

   r = &r;

   if final;

   keep no r area;

  run;

%mend simp4;

以下、マクロ変数の指定をしていきます。r の値を 1 ∼ 10の 10通り考え、近似精度がどの程度よくなっていくかをみてい

きます*4。

*4 r は、「Simpsonの公式による数値積分 1」や「Simpsonの公式による数値積分 2」でご説明した、グリッドの準備で作る {xi}の数です。

10

Page 11: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

実行プログラムは以下の通りです。

*x1 の積分区間の上限・下限;

%let low x1 = -1;

%let uppx1 = 1;

*x2 の積分区間の上限・下限;

%let low x2 = -2;

%let uppx2 = 2;

%macro f1(x); *標準正規分布の確率密度関数;

  pdf(’norm’, &x)

%mend f1;

%macro f2(x); *標準正規分布の累積分布関数;

  cdf(’norm’, &x)

%mend f2;

%simp4(1, 1)

%simp4(2, 2)

%simp4(3, 3)

%simp4(4, 4)

%simp4(5, 5)

%simp4(6, 10)

%simp4(7, 15)

%simp4(8, 20)

%simp4(9, 50)

%simp4(10, 100)

data out;

  set out1 out 2 out 3 out 4 out 5 out 6 out 7 out 8 out 9 out 10;

run;

出力は以下の通りです。

11

Page 12: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

no r area

1 1 0.62173

2 2 0.62137

3 3 0.62122

4 4 0.62120

5 5 0.62119

6 10 0.62119

7 15 0.62119

8 20 0.62119

9 50 0.62119

10 100 0.62119

以上より、r = 5以上で小数第 5位まで一致し

∫ 1

−1

(∫ 2

−2

Φ(3− x2)φ(x2 − x1)dx2

)φ(x1)dx1 ; 0.62119

となることが分かりました。

12

Page 13: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

【補足 1】作成データセットのサンプル (r = 3)

プログラムを見るだけでは分かりにくいと思いますので、作成されるデータセットのサンプルをご紹介します。r = 3と

します。まず、d1∼d5は変数 x1に対するグリッドの作成です。

d1

OBS i0 x

1 1 -7.39445

2 2 -4.62186

3 3 -3.00000

4 4 -2.50000

5 5 -2.00000

6 6 -1.50000

7 7 -1.00000

8 8 -0.50000

9 9 0.00000

10 10 0.50000

11 11 1.00000

12 12 1.50000

13 13 2.00000

14 14 2.50000

15 15 3.00000

16 16 4.62186

17 17 7.39445

d2

OBS i0 x

1 8 -0.5

2 9 0.0

3 10 0.5

d3

OBS i0 x

1 8 -1.0

2 8 -0.5

3 9 0.0

4 10 0.5

5 10 1.0

d4

OBS z1

1 -1.00

2 -0.75

3 -0.50

4 -0.25

5 0.00

6 0.25

7 0.50

8 0.75

9 1.00

d5

OBS i z1

1 1 -1.00

2 2 -0.75

3 3 -0.50

4 4 -0.25

5 5 0.00

6 6 0.25

7 7 0.50

8 8 0.75

9 9 1.00

13

Page 14: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

以下、データが多くなるものは上から 30行目だけ取り出します。d6, d7は変数 x2 に対するグリッド作成の準備です。

  d6

OBS i z1 low y upp y j0 y0

1 1 -1.00 -1.00 3.00 8 -0.5

2 1 -1.00 -1.00 3.00 9 0.0

3 1 -1.00 -1.00 3.00 10 0.5

4 1 -1.00 -1.00 3.00 11 1.0

5 1 -1.00 -1.00 3.00 12 1.5

6 1 -1.00 -1.00 3.00 13 2.0

7 1 -1.00 -1.00 3.00 14 2.5

8 2 -0.75 -1.25 2.75 7 -1.0

9 2 -0.75 -1.25 2.75 8 -0.5

10 2 -0.75 -1.25 2.75 9 0.0

11 2 -0.75 -1.25 2.75 10 0.5

12 2 -0.75 -1.25 2.75 11 1.0

13 2 -0.75 -1.25 2.75 12 1.5

14 2 -0.75 -1.25 2.75 13 2.0

15 2 -0.75 -1.25 2.75 14 2.5

16 3 -0.50 -1.50 2.50 7 -1.0

17 3 -0.50 -1.50 2.50 8 -0.5

18 3 -0.50 -1.50 2.50 9 0.0

19 3 -0.50 -1.50 2.50 10 0.5

20 3 -0.50 -1.50 2.50 11 1.0

21 3 -0.50 -1.50 2.50 12 1.5

22 3 -0.50 -1.50 2.50 13 2.0

23 4 -0.25 -1.75 2.25 6 -1.5

24 4 -0.25 -1.75 2.25 7 -1.0

25 4 -0.25 -1.75 2.25 8 -0.5

26 4 -0.25 -1.75 2.25 9 0.0

27 4 -0.25 -1.75 2.25 10 0.5

28 4 -0.25 -1.75 2.25 11 1.0

29 4 -0.25 -1.75 2.25 12 1.5

30 4 -0.25 -1.75 2.25 13 2.0

  d7

OBS i z1 y0

1 1 -1.00 -1.00

2 1 -1.00 -0.50

3 1 -1.00 0.00

4 1 -1.00 0.50

5 1 -1.00 1.00

6 1 -1.00 1.50

7 1 -1.00 2.00

8 1 -1.00 2.50

9 1 -1.00 3.00

10 2 -0.75 -1.25

11 2 -0.75 -1.00

12 2 -0.75 -0.50

13 2 -0.75 0.00

14 2 -0.75 0.50

15 2 -0.75 1.00

16 2 -0.75 1.50

17 2 -0.75 2.00

18 2 -0.75 2.50

19 2 -0.75 2.75

20 3 -0.50 -1.50

21 3 -0.50 -1.00

22 3 -0.50 -0.50

23 3 -0.50 0.00

24 3 -0.50 0.50

25 3 -0.50 1.00

26 3 -0.50 1.50

27 3 -0.50 2.00

28 3 -0.50 2.50

29 4 -0.25 -1.75

30 4 -0.25 -1.50

14

Page 15: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

変数 x1, x2 の両方に対するグリッドを作成します。

d8

OBS i z1 z2

1 1 -1.00 -1.000

2 1 -1.00 -0.750

3 1 -1.00 -0.500

4 1 -1.00 -0.250

5 1 -1.00 0.000

6 1 -1.00 0.250

7 1 -1.00 0.500

8 1 -1.00 0.750

9 1 -1.00 1.000

10 1 -1.00 1.250

11 1 -1.00 1.500

12 1 -1.00 1.750

13 1 -1.00 2.000

14 1 -1.00 2.250

15 1 -1.00 2.500

16 1 -1.00 2.750

17 1 -1.00 3.000

18 2 -0.75 -1.250

19 2 -0.75 -1.125

20 2 -0.75 -1.000

21 2 -0.75 -0.750

22 2 -0.75 -0.500

23 2 -0.75 -0.250

24 2 -0.75 0.000

25 2 -0.75 0.250

26 2 -0.75 0.500

27 2 -0.75 0.750

28 2 -0.75 1.000

29 2 -0.75 1.250

30 2 -0.75 1.500

d9

OBS i j z1 z2

1 1 1 -1.00 -1.000

2 1 2 -1.00 -0.750

3 1 3 -1.00 -0.500

4 1 4 -1.00 -0.250

5 1 5 -1.00 0.000

6 1 6 -1.00 0.250

7 1 7 -1.00 0.500

8 1 8 -1.00 0.750

9 1 9 -1.00 1.000

10 1 10 -1.00 1.250

11 1 11 -1.00 1.500

12 1 12 -1.00 1.750

13 1 13 -1.00 2.000

14 1 14 -1.00 2.250

15 1 15 -1.00 2.500

16 1 16 -1.00 2.750

17 1 17 -1.00 3.000

18 2 1 -0.75 -1.250

19 2 2 -0.75 -1.125

20 2 3 -0.75 -1.000

21 2 4 -0.75 -0.750

22 2 5 -0.75 -0.500

23 2 6 -0.75 -0.250

24 2 7 -0.75 0.000

25 2 8 -0.75 0.250

26 2 9 -0.75 0.500

27 2 10 -0.75 0.750

28 2 11 -0.75 1.000

29 2 12 -0.75 1.250

30 2 13 -0.75 1.500

15

Page 16: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

次に、ウェイトを作成していきます。まずは変数 x1 に対するウェイトです。

w1p1

OBS z1p1

1 -0.75

2 -0.50

3 -0.25

4 0.00

5 0.25

6 0.50

7 0.75

8 1.00

w1p2

OBS z1p2

1 -0.50

2 -0.25

3 0.00

4 0.25

5 0.50

6 0.75

7 1.00

w1m1

OBS z1m1

1 .

2 -1.00

3 -0.75

4 -0.50

5 -0.25

6 0.00

7 0.25

8 0.50

9 0.75

w1m2

OBS z1m2

1 .

2 .

3 -1.00

4 -0.75

5 -0.50

6 -0.25

7 0.00

8 0.25

9 0.50

w1

OBS i w1

1 1 0.08333

2 2 0.33333

3 3 0.16667

4 4 0.33333

5 5 0.16667

6 6 0.33333

7 7 0.16667

8 8 0.33333

9 9 0.08333

16

Page 17: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

次に、変数 x2 に対するウェイト作成の準備です。

w20

OBS i j z2

1 1 1 -1.000

2 1 2 -0.750

3 1 3 -0.500

4 1 4 -0.250

5 1 5 0.000

6 1 6 0.250

7 1 7 0.500

8 1 8 0.750

9 1 9 1.000

10 1 10 1.250

11 1 11 1.500

12 1 12 1.750

13 1 13 2.000

14 1 14 2.250

15 1 15 2.500

16 1 16 2.750

17 1 17 3.000

18 2 1 -1.250

19 2 2 -1.125

20 2 3 -1.000

21 2 4 -0.750

22 2 5 -0.500

23 2 6 -0.250

24 2 7 0.000

25 2 8 0.250

26 2 9 0.500

27 2 10 0.750

28 2 11 1.000

29 2 12 1.250

30 2 13 1.500

w2p1

OBS i j z2p1

1 1 1 -0.750

2 1 2 -0.500

3 1 3 -0.250

4 1 4 0.000

5 1 5 0.250

6 1 6 0.500

7 1 7 0.750

8 1 8 1.000

9 1 9 1.250

10 1 10 1.500

11 1 11 1.750

12 1 12 2.000

13 1 13 2.250

14 1 14 2.500

15 1 15 2.750

16 1 16 3.000

17 2 1 -1.125

18 2 2 -1.000

19 2 3 -0.750

20 2 4 -0.500

21 2 5 -0.250

22 2 6 0.000

23 2 7 0.250

24 2 8 0.500

25 2 9 0.750

26 2 10 1.000

27 2 11 1.250

28 2 12 1.500

29 2 13 1.750

30 2 14 2.000

w2p2

OBS i j z2p2

1 1 1 -0.50

2 1 2 -0.25

3 1 3 0.00

4 1 4 0.25

5 1 5 0.50

6 1 6 0.75

7 1 7 1.00

8 1 8 1.25

9 1 9 1.50

10 1 10 1.75

11 1 11 2.00

12 1 12 2.25

13 1 13 2.50

14 1 14 2.75

15 1 15 3.00

16 2 1 -1.00

17 2 2 -0.75

18 2 3 -0.50

19 2 4 -0.25

20 2 5 0.00

21 2 6 0.25

22 2 7 0.50

23 2 8 0.75

24 2 9 1.00

25 2 10 1.25

26 2 11 1.50

27 2 12 1.75

28 2 13 2.00

29 2 14 2.25

30 2 15 2.50

17

Page 18: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

変数 x2 に対するウェイトを作成します。

w2m1

OBS i j z2m1

1 1 1 .

2 1 2 -1.000

3 1 3 -0.750

4 1 4 -0.500

5 1 5 -0.250

6 1 6 0.000

7 1 7 0.250

8 1 8 0.500

9 1 9 0.750

10 1 10 1.000

11 1 11 1.250

12 1 12 1.500

13 1 13 1.750

14 1 14 2.000

15 1 15 2.250

16 1 16 2.500

17 1 17 2.750

18 2 1 .

19 2 2 -1.250

20 2 3 -1.125

21 2 4 -1.000

22 2 5 -0.750

23 2 6 -0.500

24 2 7 -0.250

25 2 8 0.000

26 2 9 0.250

27 2 10 0.500

28 2 11 0.750

29 2 12 1.000

30 2 13 1.250

w2m2

OBS i j z2m2

1 1 1 .

2 1 2 .

3 1 3 -1.000

4 1 4 -0.750

5 1 5 -0.500

6 1 6 -0.250

7 1 7 0.000

8 1 8 0.250

9 1 9 0.500

10 1 10 0.750

11 1 11 1.000

12 1 12 1.250

13 1 13 1.500

14 1 14 1.750

15 1 15 2.000

16 1 16 2.250

17 1 17 2.500

18 2 1 .

19 2 2 .

20 2 3 -1.250

21 2 4 -1.125

22 2 5 -1.000

23 2 6 -0.750

24 2 7 -0.500

25 2 8 -0.250

26 2 9 0.000

27 2 10 0.250

28 2 11 0.500

29 2 12 0.750

30 2 13 1.000

w2

OBS i j w2

1 1 1 0.08333

2 1 2 0.33333

3 1 3 0.16667

4 1 4 0.33333

5 1 5 0.16667

6 1 6 0.33333

7 1 7 0.16667

8 1 8 0.33333

9 1 9 0.16667

10 1 10 0.33333

11 1 11 0.16667

12 1 12 0.33333

13 1 13 0.16667

14 1 14 0.33333

15 1 15 0.16667

16 1 16 0.33333

17 1 17 0.08333

18 2 1 0.04167

19 2 2 0.16667

20 2 3 0.12500

21 2 4 0.33333

22 2 5 0.16667

23 2 6 0.33333

24 2 7 0.16667

25 2 8 0.33333

26 2 9 0.16667

27 2 10 0.33333

28 2 11 0.16667

29 2 12 0.33333

30 2 13 0.16667

18

Page 19: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

変数 x1, x2 全体のウェイトです。

w

OBS i w1 j w2

1 1 0.08333 1 0.08333

2 1 0.08333 2 0.33333

3 1 0.08333 3 0.16667

4 1 0.08333 4 0.33333

5 1 0.08333 5 0.16667

6 1 0.08333 6 0.33333

7 1 0.08333 7 0.16667

8 1 0.08333 8 0.33333

9 1 0.08333 9 0.16667

10 1 0.08333 10 0.33333

11 1 0.08333 11 0.16667

12 1 0.08333 12 0.33333

13 1 0.08333 13 0.16667

14 1 0.08333 14 0.33333

15 1 0.08333 15 0.16667

16 1 0.08333 16 0.33333

17 1 0.08333 17 0.08333

18 2 0.33333 1 0.04167

19 2 0.33333 2 0.16667

20 2 0.33333 3 0.12500

21 2 0.33333 4 0.33333

22 2 0.33333 5 0.16667

23 2 0.33333 6 0.33333

24 2 0.33333 7 0.16667

25 2 0.33333 8 0.33333

26 2 0.33333 9 0.16667

27 2 0.33333 10 0.33333

28 2 0.33333 11 0.16667

29 2 0.33333 12 0.33333

30 2 0.33333 13 0.16667

19

Page 20: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

グリッドとウェイトをmergeし、Simpsonの公式を用いて面積計算をします。

d10

OBS i j z1 z2 w1 w2 Si area

1 1 1 -1.00 -1.000 0.08333 0.08333 0.000407 0.00041

2 1 2 -1.00 -0.750 0.08333 0.33333 0.002024 0.00243

3 1 3 -1.00 -0.500 0.08333 0.16667 0.001183 0.00361

4 1 4 -1.00 -0.250 0.08333 0.33333 0.002599 0.00621

5 1 5 -1.00 0.000 0.08333 0.16667 0.001341 0.00755

6 1 6 -1.00 0.250 0.08333 0.33333 0.002599 0.01015

7 1 7 -1.00 0.500 0.08333 0.16667 0.001183 0.01134

8 1 8 -1.00 0.750 0.08333 0.33333 0.002023 0.01336

9 1 9 -1.00 1.000 0.08333 0.16667 0.000812 0.01417

10 1 10 -1.00 1.250 0.08333 0.33333 0.001224 0.01539

11 1 11 -1.00 1.500 0.08333 0.16667 0.000433 0.01583

12 1 12 -1.00 1.750 0.08333 0.33333 0.000573 0.01640

13 1 13 -1.00 2.000 0.08333 0.16667 0.000177 0.01658

14 1 14 -1.00 2.250 0.08333 0.33333 0.000205 0.01678

15 1 15 -1.00 2.500 0.08333 0.16667 0.000055 0.01684

16 1 16 -1.00 2.750 0.08333 0.33333 0.000055 0.01689

17 1 17 -1.00 3.000 0.08333 0.08333 0.000006 0.01690

18 2 1 -0.75 -1.250 0.33333 0.04167 0.000764 0.01766

19 2 2 -0.75 -1.125 0.33333 0.16667 0.003545 0.02121

20 2 3 -0.75 -1.000 0.33333 0.12500 0.003036 0.02424

21 2 4 -0.75 -0.750 0.33333 0.33333 0.010076 0.03432

22 2 5 -0.75 -0.500 0.33333 0.16667 0.005890 0.04021

23 2 6 -0.75 -0.250 0.33333 0.33333 0.012937 0.05315

24 2 7 -0.75 0.000 0.33333 0.16667 0.006674 0.05982

25 2 8 -0.75 0.250 0.33333 0.33333 0.012935 0.07275

26 2 9 -0.75 0.500 0.33333 0.16667 0.005887 0.07864

27 2 10 -0.75 0.750 0.33333 0.33333 0.010062 0.08870

28 2 11 -0.75 1.000 0.33333 0.16667 0.004036 0.09274

29 2 12 -0.75 1.250 0.33333 0.33333 0.006073 0.09881

30 2 13 -0.75 1.500 0.33333 0.16667 0.002140 0.10095

20

Page 21: Simpson の公式による数値積分3...Simpsonの公式による数値積分3 H24 年度BioS 継続勉強会:第9回補助資料1 土居 正明 1 はじめに 1.1 本稿の内容

積分の近似値の出力です。

out 3

OBS no r area

1 3 3 0.62122

4 【補足 2】Rでの検算

計算しっぱなしは気持ち悪いので、Rで検算した結果をご紹介します。パッケージ cubatureの関数 adaptIntegrateを用い

ることで重積分が計算できますので、プログラムは以下の通り非常に簡単です。

library(cubature)

f1 < − function(x){   pnorm(3 - x[2]) * dnorm(x[2] - x[1]) * dnorm(x[1])

  }adaptIntegrate(f1, c(-1, -2), c(1, 2))

出力は以下の通りです。

$integral

[1] 0.6211886

$error

[1] 5.35479e-06

$functionEvaluations

[1] 1071

$returnCode

[1] 0

となり、Simpsonの公式で計算した値と小数第 6位四捨五入で一致しました。

参考文献

[1] Jennison,C., and Turnbull,B,W. (1999)Group Sequential Methods with application to Clinical Trials. Chapman Hall/CRC.

[2] 森川敏彦,山中竹春(2012)臨床試験における群逐次法 理論と応用,株式会社シーエーシー.([1] の和訳です)

21