• 検索結果がありません。

数値計算講義 第4 回 数値積分

N/A
N/A
Protected

Academic year: 2021

シェア "数値計算講義 第4 回 数値積分"

Copied!
19
0
0

読み込み中.... (全文を見る)

全文

(1)

数値計算講義 第4 回 数値積分

金子 晃

[email protected]

http://kanenko.a.la9.jp/

(2)

数値積分

=

定積分の近似値

= Riemann

近似和?

1

函数

f (x)

は有界閉区間

[a, b]

上で値が有界:

i.e. ∃ M s.t. | f (x) | ≤ M (a ≤ x ≤ b)

区間

[a, b]

の分割:

a = x

0

< x

1

< x

2

< · · · < x

N

= b,

各微小区間

[x

i−1

, x

i

]

の代表点

ξ

i に対する

f

の値

f (ξ

i

)

= ⇒ Riemann

近似和

N

X

i=1

f (ξ

i

)∆x

i

(∆x

i

= x

i

− x

i−1

)

※ 数値計算では,

N

等分割を 採用し

, ξ

i

= x

i−1 ま たは

x

i にと る のが普通.

数学では,

f

が連続ま たは単調なら ,

h → 0

と すれば,

こ の和は Z b

a

f (x)dx

に近付く . 計算機ではど う か?

0 1

x

N

x x ξ

i

f

( )

ξ

i

数値計算では普通, 代表点 ξi は区間の左ま たは右端点に選ぶ.

(3)

リ ーマン 近似和の数値実験

f (x) = 1 2

1 + x

で実験.

プロ グラ ミ ン グ的には級数の和. 既にやっ たも の

(cf. riemann.f)

h = 1

N

N

X

i=1

f((i − 1)h)h 0.100000000000000 0.718771403175428 0.010000000000000 0.695653430481824 0.001000000000000 0.693397243059937 0.000100000000000 0.693172181184961 0.000010000000000 0.693149680566267 0.000001000000000 0.693147430560375 0.000000100000000 0.693147205575825 0.000000010000000 0.693147182933255 0.000000001000000 0.693147180363882

0.000000000100000 0.693147170362674 ←−

こ こ から 崩れる

True value :

Z 1

0

1

1 + x dx = log 2 = 0.693147180559945

(4)

Riemann

近似和の公式誤差の解析

3

各微小区間上で

xi−1

inf

xxi

f (x)h ≤

Z xi

xi−1

f(x)dx ≤ sup

xi−1≤x≤xi

f (x)h

よ っ て

,

誤差は高々

( sup

xi−1≤x≤xi

f (x) − inf

xi−1≤x≤xi

f (x)) h

平均値の定理によ り

f (ξ) − f (η) = f

(c)(ξ − η) for ∀ ξ, η ∈ [x

i−1

, x

i

]

| f

| ≤ M

1 と すれば

,

こ れは

≤ M

1

h

2 よ っ て

,

総和を と れば

,

誤差は

M

1

h

2

× N = M

1

(b − a)h h = b − a N

で押え ら れる

. = ⇒

1 次の近似式

丸め誤差は

,

各項で

ε.

よ っ て

,

総和を と れば

N ε = (b − a)ε h

こ の場合も

,

二種の誤差の釣り 合いは, オーダー的に

h = ε

h

i.e. h = ε

1/2

= 10

−8 ぐ ら いが最適で

,

こ れが同時に総

(

相対

)

誤差を 与え る

.

(5)

台形公式

(trapezoidal rule) 4

f

のグラ フ を 水平線で近似する よ り は

,

弦で近似し て 台形の面積の和を と る 方がずっ と 正確だろ う

.

一つの部分区間

[x

i−1

, x

i

]

と その両端点上の点

(x

i−1

, f (x

i−1

)), (x

i

, f (x

i

))

を 結ぶ弦で作ら れる 台形の面積は

1

2 { f (x

i−1

) + f (x

i

) } h

こ れを

i = 1, 2, ..., N

につき 加え る と

,

両端以外での値は2 度ずつ現れ,

1

2 f (x

0

) + f (x

1

) + f (x

2

) +

· · · + f (x

N−1

) + 1

2 f (x

N

) h

−1

x

x

i

f

( i )

f

( )i

x

i−1

x

h

こ れも 級数の和を ち ょっ と ひねる だけで プロ グラ ム可.

計算量は Riemann 近似和と ほぼ同じ !

(6)

台形公式の数値実験

5

前と 同じ

f (x) = 1

1 + x

で実験し て みる

(cf. daikei.f)

h = 1/N

近似値

0.100000000000000 0.693771403175428 0.010000000000000 0.693153430481824 0.001000000000000 0.693147243059937 0.000100000000000 0.693147181184961 0.000010000000000 0.693147180566267 0.000001000000000 0.693147180560375 0.000000100000000 0.693147180575825 0.000000010000000 0.693147180433255 0.000000001000000 0.693147180113882 0.000000000100000 0.693147170337674

←−

こ こ から 崩れる

True value : 0.693147180559945

こ れから 台形公式が2 次の公式である こ と が予想さ れる . それを 仮定し た上で, 最も 効率的な

h

h

2

= ε

h

よ り

h = ε

1/3

= . . 10

−5

,

(

相対

)

誤差は

h

2

= 10

−10 程度.

(7)

台形公式の誤差解析

6

微小区間を

[0, h]

に平行移動し て 考え る

. (

面積は平行移動で不変

)

こ の区間分の値

f (0) + f (h)

2 h

1

次関数

f (0) + f (h) − f (0)

h x

の積分値

.

よ っ て こ の区間分の誤差は

E =

Z h

0

n

f (x) −

f (0) + f(h) − f(0)

h x

o

dx

=

Z h

0

n

f(x) − f (0) − f (h) − f (0)

h x

o

dx

=

Z h

0

f

(c

1

)x − f

(c

2

)x) dx =

Z h

0

f

′′

(c)(c

1

− c

2

)xdx.

こ こ に

c

1

, c

2

∈ [0, h] (

平均値の定理

)

よ っ て

| c

1

− c

2

| ≤ h

故に

M

2

= sup | f

′′

(x) |

と し て 1 区間分の誤差は

,

| E | ≤ M

2

h

Z h

0

xdx = M

2

2 h

3 全体での誤差はこ れの

N = b − a

h

倍で

M

2

(b − a)

2 h

2 で抑え ら れる

.

誤差のオーダーが O(h2), そ れを 保証する には f′′ の評価が必要.

(8)

も う 少し 丁寧な計算を する と

,

係数

1/2

1/12

に改良でき る :

7

Z h

0

n

f(x) − f (0) − f (h) − f (0)

h x

o

dx

=

Z h

0

nZ x 0

f

(t)dt − x h

Z h 0

f

(t)dt

o

dx

=

Z h

0

dx

Z x

0

f

(t)dt − h 2

Z h 0

f

(t)dt

=

h

x

Z x 0

f

(t)dt

ih 0

Z h 0

xf

(x)dx − h 2

Z h 0

f

(t)dt

= h

Z h

0

f

(t)dt −

Z h

0

xf

(x)dx − h 2

Z h

0

f

(t)dt

=

Z h

0

h 2 − x

f

(x)dx =

h

hx 2 − x

2

2

f

(x)

ih 0

Z h 0

hx 2 − x

2

2

f

′′

(x)dx

= −

Z h

0

hx 2 − x

2

2

f

′′

(x)dx

よ っ て こ の絶対値は

h

hx

2

4 − x

3

6

ih

0

M

2

= M

2

12 h

3 こ の評価は最良なこ と が

f (x) = x

2 で確認でき る .

(9)

Simpson

の公式

8

被積分函数のグラ フ を 折れ線でな く 放物線の断片で近似する と , も っ と 精度が上がる .

3

(a, y

0

), (b, y

1

), (c, y

2

)

を 通る 放物線の方程式は

, Lagrange

補間多項式の作り 方の処方によ り

y = y

0

(x − b)(x − c)

(a − b)(a − c) + y

1

(x − a)(x − c)

(b − a)(b − c) + y

2

(x − a)(x − b) (c − a)(c − b)

実際

,

こ れは

2

次式で

,

かつ与え ら れた

3

点を 通る こ と は明ら か.

こ こ で特に

a = − h, b = 0, c = h

と と れば

y = y

0

x(x − h)

− h( − 2h) + y

1

(x + h)(x − h)

h( − h) + y

2

(x + h)x 2h · h

= y

0

(x

2

− hx) − 2y

1

(x

2

− h

2

) + y

2

(x

2

+ hx)

2h

2

.

こ の

2

次式の

[ − h, h]

上の定積分の値は

,

奇数次の項の積分が消え , Z h

−h

ydx = 2y

0

h

3

+ 8y

1

h

3

+ 2y

2

h

3

6h

2

= h

3 { y

0

+ 4y

1

+ y

2

}

,

区間

[a, b]

2N

等分し

,

前の方から 二つずつ対にし て 上の計算を 当て はめる と

, y

i

= f (a + ih)

と 置けば

,

面積の近似値と し て

Simpson

の公式

S =

N−1

X

j=0

h

3 { y

2j

+ 4y

2j+1

+ y

2j+2

}

= h

3 { y

0

+y

2N

+2(y

2

+y

4

+ · · · + y

2N−2

)+4(y

1

+ y

3

+ · · · + y

2N−1

) }

こ の公式も , 計算量は

Riemann

近似和と そう 変わら ない.

(10)

9 Simpson

公式の数値実験

f(x) = 1

1 + x

で実験を 続ける

(cf. simpson.f)

h = 1/N

近似値

0.100000000000000 0.693150230688930 0.010000000000000 0.693147180872367 0.001000000000000 0.693147180559975 0.000100000000000 0.693147180559958 0.000010000000000 0.693147180560013 0.000001000000000 0.693147180560307 0.000000100000000 0.693147180575871 0.000000010000000 0.693147180433503 0.000000001000000 0.693147180113916 0.000000000100000 0.693147170337656

←−

こ こ から 崩れる

True value : 0.693147180559945

こ れから

Simpson

公式が4 次の公式である こ と が予想さ れる . それを 仮定し た上で, 最も 効率的な

h

h

4

= ε

h

よ り

h = ε

1/5

= . . 10

−3

,

全誤差は

h

4

= 10

−12 程度.

4 桁の計算なら

10

等分程度で済む.

Riemann

和だと

10000

等分必要だから , プロ グラ ミ ン グの時間ま で入れれば,

Riemann

和を 計算機でやら せる よ り

Simpson

公式によ る 手計算の方が速いかも !

(11)

10 Simpson

公式の誤差解析

1 区間

(

正確には二つの区間の一対分

)

[ − h, h]

に平行移動する . こ の1 区間分の誤差は

E =

Z h

−h

f (x)dx − h

3 { f ( − h) + 4f (0) + f (h) }

=

Z h

−h

{ f (x) − f (0) } dx − h

3 { f (h) +f ( − h) − 2f (0) }

=

Z h

−h

f (x) − f (0) − f (h) +f ( − h) − 2f(0) h

2

x

2

2!

dx

=

Z h

−h

n

f (x) − f (0) − f

(0)x − f

′′

(0)

2 x

2

− f

′′′

(0) 3! x

3

+

f

′′

(0) − f (h) +f ( − h) − 2f (0) h

2

x

2

2!

o

dx (x

の奇数冪の項の積分は対称性によ り 消え る こ と に注意

.)

よ っ て ,

=

Z h

−h

{ O(x

4

) + O(h

2

)x

2

} dx = O(h

5

)

故に全体での誤差はこ の

N = b − a

h

倍で

O(h

4

)

と なる

.

(12)

も う 少し 高級な誤差解析の手法

(

函数解析的アプロ ーチ

) 11

1 区間

[ − h, h]

における 函数

f

に対する

Simpson

公式の出力を

Simp[f ] := h { f( − h) + 4f (0) + f (h) }

は定積分と 同様の性質を 持つ :

Simp[λf + µg] = λSimp[f ] + µSimp[g] (

線型性

) f (x) ≥ 0

なら

Simp[f ] ≥ 0 (

正値性

)

よ っ て

,

積分形の剰余項を 持つ

Taylor

の定理

f (x) = f (0) + f

(0)x + f

′′

(0)

2 x

2

+ f

′′′

(0) 3! x

3

+

Z x 0

(x − t)

3

3! f

(4)

(t)dt

を 用いる と

,

3 次多項式の部分は両者で同じ 値と な る ので,

E = Simp[f ] −

Z h

−h

f (x)dx

= Simp[

Z x 0

(x − t)

3

3! f

(4)

(t)dt] −

Z h

−h

dx

Z x

0

(x − t)

3

3! f

(4)

(t)dt

こ こ で,

Simp[

Z x 0

(x − t)

3

3! f

(4)

(t)dt]

= h 3

Z h 0

(h − t)

3

3! f

(4)

(t)dt + h 3

Z −h 0

( − h − t)

3

3! f

(4)

(t)dt

= h 3

Z h 0

(h − t)

3

3! f

(4)

(t)dt + h 3

Z 0

−h

(h + t)

3

3! f

(4)

(t)dt

= h 3

Z h

−h

(h − | t | )

3

3! f

(4)

(t)dt

(13)

積分の方は順序交換を する .

12

x t

h

h

x t

h

h

h

h

Z h

−h

dx

Z x

0

(x − t)

3

3! f

(4)

(t)dt

=

Z h

0

f

(4)

(t)dt

Z h

t

(x − t)

3

3! dx +

Z 0

−h

f

(4)

(t)dt

Z −h

t

(x − t)

3

3! dx

=

Z h

0

(h − t)

4

4! f

(4)

(t)dt +

Z 0

−h

( − h − t)

4

4! f

(4)

(t)dt

=

Z h

−h

(h − | t | )

4

4! f

(4)

(t)dt

よ っ て ,

| f

(4)

(x) | ≤ M

4 と すれば,

| E | =

1 3 · 4!

Z h

−h

{ 4h(h − | t | )

3

− 3(h − | t | )

4

} f

(4)

(t)dt

≤ M

4

72

Z h

−h

{ 4h(h − | t | )

3

− 3(h − | t | )

4

} dt

= M

4

72 2

Z h

0

{ 4h(h − t)

3

− 3(h − t)

4

} dt = M

4

36

h

5

− 3

5 h

5

= M

4

90 h

5 こ の評価は

f(x) = x

4 に適用し て みる と 最良である こ と が分かる . 区間全体では, こ の

N = (b − a)/2h

倍で, 誤差評価

(b − a)

180 M

4

h

4 を 得る .

(14)

無限区間における 定積分

13

例と し て

Z

0

e

−x2

dx

を 考え る . 倍精度で求める 場合,

Z

R

e

−x2

dx ≤

Z

R

x

R e

−x2

dx = e

−R2

2R < 10

−16 なる

R

を と れば,

Z

0

e

−x2

dx =

Z R

0

e

−x2

dx

だと 思っ て も よ い.

e

−R2

< 10

−16

R

を 決める 人が多いが, あま り 根拠は無い

. (

正項の無限級数を ど こ で切る かを 見る のに, 捨て る 最初の項の 大き さ だけを 見る のと 同じ く ら い意味がな い.

)

R = 6

のと き

e

−R2

12 = 1.932935691869641 · · · × 10

−17 と なる ので,

こ こ では,

Z 6

0

e

−x2

dx

を 今ま での方法で計算し て みる .

Cf.

Z

0

1

x

2

+ 1 dx

など は, こ の方法で

R

を 求める と

,

と て も 耐え ら れない値になる .

= ⇒

収束の遅い級数の和と 同様, 適当に変換し て 計算する .

(15)

数値実験の結果

(cf. normal.f) 14

h = 1/N

台形公式

Simpson

公式

0.600000000000000 0.886226925454957 0.885603411424864 0.060000000000000 0.886226925452758 0.886226925452758 0.006000000000000 0.886226925452757 0.886226925452757 0.000600000000000 0.886226925452748 0.886226925452747

真の値

√ π

2

0.886226925452758

こ れを 見る と ,

Simpson

公式の誤差はほぼ理論通り なのに対し

,

台形公式は最初から 驚異的に

(Simpson

公式よ り も 更に

)

良い近似値を 与え て おり , 分割を 細かく する と かえ っ て 悪く な っ て ゆく .

今ま での誤差解析が通用し ない!

1970

年代に, 高橋英俊と 森正武によ り 発見・ 解明さ れた特異現象.

(

説明には函数論を 使う

)

無限区間における 定積分はその後

,

杉原

,

大浦によ り 研究さ れて いる

.

そのよ う な研究は

,

特に

Fourier

変換のよ う な振動する 積分に対し て 需要が多い

.

(16)

PARAMETER

文に注意!

15

たと い,

IMPLICIT DOUBLE PRECISION(A-H,O-Z)

と 宣言し て も ,

g77

のコ ン パイ ラ は

PARAMETER(PI=3.14159265358979323846)

単精度に解釈し て し ま い, その結果7 桁の精度し か得ら れな い!

PARAMETER(PI=3.14159265358979323846D0)

と 書こ う .

C

#define 文も 避けた方がよ い

. (

const double PI= ... と する

.)

上のよ う に説明し て き たが

,

今回実験し て みて

,

次のこ と が判明し た :

1 g77

g95

IMPLICIT DOUBLE PRECISION (A-H,O-Z)

PARAMETER(PI=3.14159265358979323846)

の組合せでは

,

確かに

PI

の値は上に書かれたよ う に

,

単精度に丸めら れて し ま う

.

2 g77

g95

PARAMETER(PI=3.14159265358979323846D0)

だけだと

, PI

は倍精度浮動小数と はみなさ れず

, F22.15

で出力し て みる と 単精度で

, DSQRT

など の関数に入れる と 型の不一致のエラ ーにな る

.

3 g77

g95

,

こ れに加え

IMPLICIT DOUBLE PRECISION (A-H,O-Z)

があれば

,

上述のよ う に

PI

を 倍精度と し て 扱っ て く れ

,

値も 正確

.

最後のやり 方でよ いのだが

,

こ れでは逆に単精度変数はすべて 宣言が必要と なる

. g77

の場合はパラ メ ータ ごと に型の宣言を する 手段が無いと 思っ て いま し たが

,

DOUBLE PRECISION PI

PARAMETER(PI=3.14159265358979323846D0)

の順で書く と

, PI

はち ゃ んと 倍精度になり

,

かつ代入ができ ないので パラ メ ータ の扱いになっ て いる こ と が小川さ んの実験で分かり ま し た

.

ただし

,

こ れも 逆の順に書く と

,

二重定義のエラ ーになり ま す

.

ま た 末尾の

D0

を 省く と

,

こ れでも 単精度になっ て し ま いま す

.

2

について は

,

昔商用のコ ン パイ ラ を 使っ て いたと き はこ んな こ と は なかっ たよ う な気がし て いま すが

,

ま だ調べて いま せん

.

も し かする と

FORTRAN77

の限界かも し れない

.

(17)

なお

, FORTRAN 90

では定数にも 型宣言ができ る ので

, 16

最初から ソ ースを

FORTRAN 90

仕様で書けば

,

何の問題も 無い

. PARAMETER

を やめて

PI

を 変数と し て 扱う 方法も ある が

,

1

メ モリ ーを 一つ余計に使う

.

2

実行中に値を 変え ら れる 恐れがある

.

など 微妙な違いがある

.

ち なみに

C

言語について は

,

実験の結果次のこ と が分かっ た

.

1

#define PI 3.14159265358979323846でち ゃ んと 倍精度になる

. C

言語では関数名に型によ る 差が無いので

,

引数が単精度

,

倍精度の ど ち ら でも エラ ーにはなら ないが

,

sin(x)

に代入し て みる と 確かに倍精度が出て いる

.

#define文は単なる マ ク ロ で

, PI

の代わり にこ の値が書き 込ま れる のだろ う

. g77

コ ン パイ ラ のパラ メ ータ 文に対する 扱いはマ ク ロ と は異な る のか?

コ ン パイ ラ の規格と し て 定ま っ て いな いよ う な 事項について は

,

使用する コ ン パイ ラ にど のよ う に解釈さ れて も 大丈夫な よ う な 安全な書き 方を 心がけよ う

.

GNU

のコ ン パイ ラ では, う っ かり 油断する と , 倍精度でやっ て る つも り でも , 容易に単精度のゴミ が入っ て し ま う .

(18)

本日の講義内容の自習課題

17

1 riemann.f

を コ ン パイ ルし

,

実行し て みて

,

講義で述べた

Riemann

近似和の誤差の挙動を 確認する

. 2 daikei.f

を コ ン パイ ルし

,

実行し て みて

,

講義で述べた台形公式の誤差の挙動を 確認する

. 3 simpson.f

を コ ン パイ ルし

,

実行し て みて

,

講義で述べた

Simpson

公式の誤差の挙動を 確認する

. 4 normal.f

を コ ン パイ ルし

,

実行し て みて

,

講義で述べた誤差の挙動の特異現象を 確認する

.

5 EXTERNAL

文の復習と し て

,

台形公式と

Simpson

公式を 汎用函数に 書き 直し た

normal.f

ある いは

sekibun.f

の該当部分を 読む

.

6 daikei.f

C

言語に書き 直し た

daikei.c

を 作る

.

7 simpson.f

C

言語に書き 直し た

simpson.c

を 作る

.

(19)

本日の範囲の試験予想問題

18

問題

4.1

関数

f (x)

の定積分

Z b a

f (x)dx

の近似値を 求める ための数値積分 公式である ,

Riemann

近似和, 台形公式,

Simpson

公式について それぞれ説明し ,

f (x)

が必要なだけなめら かなと き の

メ ッ シュ

h

に対する 近似のオーダーを

(

証明無し で

)

示せ.

問題

4.2

定積分 Z π/2

0

sin xdx

の近似値を , 区間

[0, π

2 ]

の2 等分割に対し て 上記三種の数値積分公式によ り 計算し た結果を 有効数字4 桁で与え よ . 問題

4.3 (1)

積分公式

Z b

a

f (x)dx =

N−1

X

i=0

hf (a + ih + h/2)

の意味を 説明し

,

誤差のオーダーを 答え なさ い

.

ただし

f

は必要な だけ微分可能と する

.

(2)

台形公式と 比較し たこ の公式の実用的な優劣を 述べよ .[ ヒ ン ト : ま ず 図を 描いて ど んな値を 計算し て いる かを 見

,

オーダーを 推測せよ .]

問題

4.4

Z

0

e

−x4

dx

を 数値計算する 方法を 述べ, 実際に

C

言語で プロ グラ ムを 書け.

問題

4.5

Z

0

sin x

x

2

+ 1 dx

は収束が遅く , 無理数かど う かも ま だ分かっ て いない. こ の近似値を 有効数字2 桁程度計算する 工夫について 述べよ .

参照

関連したドキュメント

 当図書室は、専門図書館として数学、応用数学、計算機科学、理論物理学の分野の文

(注)本報告書に掲載している数値は端数を四捨五入しているため、表中の数値の合計が表に示されている合計

[r]

このアプリケーションノートは、降圧スイッチングレギュレータ IC 回路に必要なインダクタの選択と値の計算について説明し

第1段階料金適用電力量=90キロワット時 × 日割計算対象日数 検針期間の日数

(注)本報告書に掲載している数値は端数を四捨五入しているため、表中の数値の合計が表に示されている合計

*2: 一次+二次応力の計算結果が許容応力を上回るが,疲労評価を実施し疲労累積係数が許容値 1

現場 把握 配置 検討. 数量