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

● 前回の講義のまとめ

N/A
N/A
Protected

Academic year: 2021

シェア "● 前回の講義のまとめ"

Copied!
6
0
0

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

全文

(1)

● 前回の講義のまとめ

数列{an}が極限値 αを持ち,

an=α+c1λn1+c2λn2+· · · , 1> λ1> λ2>· · ·>0 という振る舞いをしているとき,

a(1)n = an−λ1an−1

1−λ1

で定義された数列{a(1)n }も同じ極限に収束し,

|a(1)n −α|=c2λ22+· · · をみたす. これをRomberg加速と呼ぶ.

数列{an}が極限値 αを持ち,

(an+1−α) = (A+εn)(an−α), εn0, |A|<1 という振る舞いをしているとき,

a(1)n =an (an−an+1)2 an+22an+1+an

で定義された数列{a(1)n }も同じ極限に収束し, a(1)n −α

an−α 0 の意味で加速される. これを Aitken 加速と呼ぶ.

いずれの加速方法でも,加速された数列{a(1)n }に対して,再び加速を施すことが可能である. Romberg 加速を用いるときには,加速された数列{a(1)n }

a(1)n =α+c(1)2 λn2+c(1)3 λn3 +· · ·, 1> λ2> λ3>· · ·>0 となるので,加速係数としてはλ2 を用いれば良い.

Romberg 加速は「収束の主要項」λ1 の値が分からなければ加速することができないが, Aitken

速は,それが分からなくても加速することが可能である. 特に1次より速い収束をしている列に対し ても加速が可能である. しかし,一方ではAitken加速は「収束しない数列」を収束させてしまうこ とがあるので注意が必要である.

半径1の円に内接する正 n角形の周長を 2nとおいた, {n} は, k−π= π3

6 k−2 π5

120k−4+O(k−6) をみたすので,an=n02n とおくと,

an−π= π3

6n20(1/4)n π5

120n40(1/16)n+· · ·

をみたす. したがって, λ1 = 1/4としてRomberg-Richardson加速によって収束を加速することが できる.

(2)

ニュートン法 (m 重根)の場合には, 各ステップでの誤差 εn =|an−α| εn+1 = m−1m εn となる ので,

an =α+C

m−1

m n

+o(

m−1

m n

)

と考えて Romberg加速を用いることができる.

● 講義資料

1. 「常微分方程式の数値計算」の授業で題材にする代表的な常微分方程式は以下の通り.

x(t) =λx(t), x(0) =x0, λ= 0. (1)

x(t) = (1−x(t)2), x(0) = 0. (2)

x(t) +ax(t) +bx(t) =f(x), x(0) =x0, x(0) =v0. (3) x(t) + sin(x(t)) = 0, x(0) =x0, x(0) =v0. (4) x(t) + (x(t)21)x(t) +x(t) = 0, x(0) =x0, x(0) =v0. (5)

(2)“logistic equation”と呼ばれ,初期条件が−1< x0<1をみたすとき,解はt∈(−∞,∞) 上で−1< x(t)<1 をみたす.

(3) a= 0,b=k2,f(x)0の時, “単振動”の方程式である.

(4) “単振り子”の方程式である.

(5) “Val del Pol’s equation”と呼ばれ,非線形抵抗を持つ電気回路の方程式である.

2. (前進)オイラー法による計算

1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8

0 0.2 0.4 0.6 0.8 1 1.2

x’=x, x(0) = 1

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

0 0.5 1 1.5 2 2.5

x’=(1-x^2), x(0) = 0

(1)λ= 1,x0= 1, h= 0.01 (2)h= 0.01

-1.5 -1 -0.5 0 0.5 1 1.5

0 2 4 6 8 10 12

x’’+x=0, x(0) = 1, x’(0) = 0

-1.5 -1 -0.5 0 0.5 1 1.5

-1.5 -1 -0.5 0 0.5 1 1.5

x’’+x=0, x(0) = 1, x’(0) = 0

(3)a= 0,b= 1,x0= 1, v0= 0

(3)

-1.5 -1 -0.5 0 0.5 1 1.5

0 5 10 15 20 25

x’’+sin(x)=0, x(0) = 1, x’(0) = 0

-1 -0.5 0 0.5 1

-1 -0.5 0 0.5 1

x’’+sin(x)=0, x(0) = 1, x’(0) = 0

(4)x0= 1,v0= 0

-2 -1 0 1 2

0 10 20 30 40 50

x’’+(x^2-1)x’+x=0, x(0) = 1, x’(0) = 1

-3 -2 -1 0 1 2 3

-3 -2 -1 0 1 2 3

x’’+(x^2-1)x’+x=0, x(0) = 1, x’(0) = 1

(5)x0= 1,v0= 0 3. 後退オイラー法による計算

1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8

0 0.2 0.4 0.6 0.8 1 1.2

x’=x, x(0) = 1

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

0 0.5 1 1.5 2 2.5

x’=(1-x^2), x(0) = 0

(1)λ= 1,x0= 1, h= 0.01 (2)h= 0.01

-1.5 -1 -0.5 0 0.5 1 1.5

0 2 4 6 8 10 12

x’’+x=0, x(0) = 1, x’(0) = 0

-1.5 -1 -0.5 0 0.5 1 1.5

-1.5 -1 -0.5 0 0.5 1 1.5

x’’+x=0, x(0) = 1, x’(0) = 0

(3)a= 0,b= 1,x0= 1, v0= 0

(4)

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1

0 5 10 15 20 25

x’’+sin(x)=0, x(0) = 1, x’(0) = 0

-1 -0.5 0 0.5 1

-1 -0.5 0 0.5 1

x’’+sin(x)=0, x(0) = 1, x’(0) = 0

(4)x0= 1,v0= 0

-2 -1 0 1 2

0 10 20 30 40 50

x’’+(x^2-1)x’+x=0, x(0) = 1, x’(0) = 1

-3 -2 -1 0 1 2 3

-3 -2 -1 0 1 2 3

x’’+(x^2-1)x’+x=0, x(0) = 1, x’(0) = 1

(5)x0= 1,v0= 0

4. 前進オイラー法と後退オイラー法での (1)の収束の様子λ= 1,x0= 1,h= 0.01

1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3

0 0.2 0.4 0.6 0.8 1 1.2 1

1.5 2 2.5 3 3.5 4

0 0.2 0.4 0.6 0.8 1 1.2

前進オイラー法 後退オイラー法

5. (1) (λ= 1) hを動かしたときの誤差. t= 1.0における eとの誤差. 横軸は1/h.

1e-10 1e-08 1e-06 0.0001 0.01 1

10 100 1000 10000 100000 1e+06 1e+07 1e+08 1e+09 1e+10 1e+11 x’=x, x(0) = 1 error

1e-10 1e-08 1e-06 0.0001 0.01 1

10 100 1000 10000 100000 1e+06 1e+07 1e+08 1e+09 1e+10 1e+11 x’=x, x(0) = 1 error

前進オイラー法 後退オイラー法

(5)

● 実習内容

1. (1), (2), (3)の真の解(「解析解」)を求めなさい.

2. 時間刻み幅,解を求める時間の範囲を適当に決めて, (1), (2), (3), (4), (5)の数値解を,(前進)オイ ラー法を用いて構成しなさい. また, 解析解が分かるものに関しては, 時間刻み幅を変化させたとき, 解析解との誤差がどうなるかを観察しなさい.

3. 時間刻み幅,解を求める時間の範囲を適当に決めて, (1), (2), (3)の数値解を,後退オイラー法を用い て構成しなさい. また,解析解が分かるものに関しては,時間刻み幅を変化させたとき,解析解との誤 差がどうなるかを観察しなさい.

4. (3) a= 0,b=k2, f(x)0とすると, (x(t))2+ (x(t))は時間に寄らず一定であることを示しな さい. 前進オイラー法・後退オイラー法で(3)を解いたとき, (x(t))2+ (x(t))の値がどのように変化 するかを観察しなさい.

5. (4)では, (x(t))2cos(x(t))が時間に寄らず一定の値をとることを示しなさい. また,前進オイラー 法で(4)を解いたとき, 12(x(t))2cos(x(t))の値がどのように変化するかを観察しなさい.

6. 時間刻み幅,解を求める時間の範囲を適当に決めて, (4)の数値解を,後退オイラー法を用いて構成し なさい. また,このとき 12(x(t))2cos(x(t))の値がどのように変化するかを観察しなさい.

7. 時間刻み幅,解を求める時間の範囲を適当に決めて, (4)の数値解を,後退オイラー法を用いて構成し なさい.

8. 後退オイラー法の局所離散化誤差,大域的離散化誤差,丸め誤差を評価しなさい.

(6)

★ サンプル

【オイラー法のサンプルプログラム】

x=f(x)をオイラー法で解くプログラムの一つの例.

/* 前進 Euler */

#include <stdio.h>

#define X0 (1.0) /* 初期値 */

#define H (0.01) /* 時間刻み幅 */

#define T (1.0) /* 終了時間 */

int main(int argc, char **argv) {

double t=0.0 ;

double x, x0 ;

x0 = X0 ; while(t<(T+H)) {

printf("%.16e\t%.16e\n", t, x0) ; x = x0 + H*f(x0) ;

x0 = x ; t += H ; }

return 0 ; }

【2階常微分方程式の場合の出力と gnuplotの利用法】

2階常微分方程式で「相空間」の図を出力するには,x(t)に対応する値だけではなく,x(t)に対応す る値も出力する必要がある. この場合,第1列にt, 第2列にx(t),第3列にx(t)の値を出力したと すると, gnuplotにおいて,

set size ratio 1

plot ‘‘euler.out’’ using 2:3 with p と入力すればよい.

1行目は描画する図の縦横の比率を1:1にする指定である.

2行目の“using 2:3”を指定することにより,データファイルのの第2列目と第3列目を入力

データとすることができる.

参照

関連したドキュメント

そのため, 上の評価式(二次収束の式, または, 一次収束の式)を利用す

• 添付ファイルのファイル名は, zzzzzz-xx-y.c などと, 拡張子を適切につけ, 拡張子よりも前の 部分は,

また, クッ タの3次公式とホインの3次公式が, それらの条件を満たすことを示しなさい.. これらの問題については, A: 10 点, C: 0

反復法も Gauss-Seidel の反復法もともに収束する.. 収束の速度は

特に, 一般の行列の固有値 を有限回の代数的操作で求めることは不可能である... また,

計を想定しよう。この時計で光子が一方の鏡と他方の鏡を往復する時間を考えてみる。但しその際にこの時計は運動

リサヸチの分析 活用さ 多変 解析の 概要 ポ

今日のレポート課題 以下をレポートにまとめてください。次回講義中に回 収します。