Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
数値・記号処理(櫻井)2004-04
Copyright (C) 2004 A. Sakurai All rights reserved.
数値・記号処理(4)方程式を解く(一変数)
慶應義塾大学理工学部
櫻井彰人
方程式を解く
代数方程式を解くことは昔から重要な問題であった算木にもたくさんある
数学競技会(例: 30題を40~50日で解く)で出された3次・4次代数方程式が一般的に解けたScipione del Ferro (1465-1526), Niccoló Fontana Tartaglia(1499-1547), Girolamo Cardano (1501-1576)
5次以上の代数方程式は一般的には解けないNiels Henrik Abel (1802-1829), Évariste Galois (1811-1832)
一般的に解く係数を記号にして、四則と根号のみで、解を記述する
Mathematica で解いてみようhttp://www.sakurai.comp.ae.keio.ac.jp/classes/numsymbol-class/2004/AlgebraicEq01.nb
方程式を数値的に解く
根の公式(有限の計算手順)がないとしたらどうするか?近似計算と 試行錯誤の組合せ!
でも、どういう風に 「試行錯誤」 をするか?
グラフを描く
-2
-1
-1
0
1
1
2
2
3
3
4
0 0.5 1 1.5 2
x f(x)
0 1.0000.1 0.7010.2 0.4080.3 0.1270.4 -0.1360.5 -0.3750.6 -0.5840.7 -0.7570.8 -0.8880.9 -0.9711 -1.0001.1 -0.9691.2 -0.8721.3 -0.7031.4 -0.4561.5 -0.1251.6 0.2961.7 0.8131.8 1.4321.9 2.1592 3.000
を求めるとなるのとき xxfxxxf 0)( 13)( 3 =+−=
解がありそう
2分法(bisection method)「連続関数 f(x) に対して、もし f(a)f(b)
数値・記号処理(櫻井)2004-04
Copyright (C) 2004 A. Sakurai All rights reserved.
Regula Falsi 法英語では False-Position method. 語源は不明2分法の中点のかわりに、(xi,f(xi)) と (xi+1,f(xi +1))の2点を通る直線と x軸の交点を次の候補点とする2分法と同様に常に符号の異なる点で挟む
f(x)
xx*xi xi+1xi+2
f(xi+1 )
f(xi )
( )( ) ( )
ii
ii
iii
xxxfxf
xfxx
−−−=
+
+
+++
1
1
112
f(xi+1)–f(xi)
xi+1–xi
Regula Falsi 法の収束
2分法より速い、、、いずれも 但しαは定数 (一次の収束)
2 4 6 8 101.×10−13
1.×10−11
1. ×10−9
1. ×10−7
0.00001
0.001
0.1
付近のものとなるのとき 5.1で 0)( 13)( 3 ==+−= xxxfxxxf
2分法
Regula Falsi
ii εαε ⋅≈+1
Regula Falsi 法の収束速度
そうでないこともある
中点根
1 2 3 12
[ ] [ ]3,0,043)(
10
4
==−+=
xxxxxf
挟み撃ち Bracketing 法
以上のように、根のある場所を、それを含む閉区間で近似し、その閉区間をだんだん小さいしていく方法を総称して挟み撃ち法と呼ぶ。安全確実であるが、一般に遅いのが欠点
そうでない方法を Open method という(日本語訳不詳)
まず、 Regula Falsi を改良してみよう
割線 Secant 法Regula Falsi とそっくり。違いは、「符号の異なる点で挟む」ことは要求しない。
(xi,f(xi)) と (xi+1,f(xi +1))の2点を通る直線と x軸の交点を次の候補点 xi +2 とする. xi +1は xi +1そのまま.
f(x)
xx*xi+1 xixi+2
f(xi )
f(xi+1 )
( )( ) ( )
ii
ii
iii
xxxfxf
xfxx
−−−=
+
+
+++
1
1
112
f(xi+1)–f(xi)
xi+1–xi2 4 6 8 10
1.× 10−13
1.× 10−11
1. ×10−9
1. ×10−7
0.00001
0.001
0.1
Secant 法の収束
確かに速い
付近のものとなるのとき 5.1で 0)( 13)( 3 ==+−= xxxfxxxf
2分法
Regula Falsi
Secant 法
数値・記号処理(櫻井)2004-04
Copyright (C) 2004 A. Sakurai All rights reserved.
不動点 Fixed-Point 法
f(x)=0 という方定式を(工夫して – これが大切 – ) x = g(x) という形にする
x0を初期値(うまく選ぶ)としxi+1 = g(xi) という繰返しを行う。
収束すれば、それが解。
不動点法の収束と発散
収束する場合もあれば発散する場合もある
不動点 x* の周囲で |g'(x)|
1)x('g >
と変形
を
31
0133
3
+=
=+−xx
xx
変換
一点も収束点がないこともある
x = g(x)
1)(' どちらの交点でも >xg
と変形を
2
2
1 01
xxxx−=
=−+
Newton-Raphson 法 原理
f(x)=0 の解を求めることを考える. f(x) を xiの周りで Taylor 展開する. よりよい近似値となるであろう(なってほしい) xi+1での値は
f(xi+1) の方が f(xi) より0に近いので、0とおく
これから
( ) ( ) ( ) ( )iiiii xxxfxfxf −′+= ++ 11
( ) ( )( )iiii xxxfxf −′+= +1 0( )( )i
iii xf
xfxx′
−=+1
数値・記号処理(櫻井)2004-04
Copyright (C) 2004 A. Sakurai All rights reserved.
図で見る Newton-Raphson法
接線を引き、x軸との交点を求める
根 x*
043)( 4 =−+= xxxf
xixi+12 4 6 8 10
1.× 10−13
1.× 10−11
1. ×10−9
1. ×10−7
0.00001
0.001
0.1
Newton-Raphson法の収束
確かに速い
付近のものとなるのとき 5.1で 0)( 13)( 3 ==+−= xxxfxxxf
2分法
Regula Falsi
Secan 法
Newton-Raphson 法の特徴
収束が速い: 2次の収束
微分が必要: 一変数のときはさほどの問題ではないが、多変数のときは大問題
逆行列を計算する必要があるが、これが大変
微分値で「割り算」: 傾きが0に近くなると問題発生
挟み撃ち法ではない
解に近づくとは限らない
21 ii
εαε ⋅≈+
重根の問題
重根とは
三重根
二重根
2781904611)( 2345 −+−+−= xxxxxxf
重根問題とその対策
問題は、 f‘(x) が 0 に近くなること丸め誤差が発生し、変なところで「本当に」 0 になったり(0-割り算発生!問題!)0 にならなかったり(こっちは問題ではない)収束が1次になる(現在では、あまり問題ではない)
対策一次の収束でよければ、Secant 法が安定していて計算も速い
(勧めない)2次の収束を維持するには( ) ( )
( )[ ] ( ) ( )iiiii
iii
iii xfxfxf
xfxfxx)(xu)u(xxx
(x)ff(x) u
′′−′′
−=′
−=⇒′
= ++ 211 すなわち
)(xf)f(xmx x
i
iii ′−=+1
大域的な収束
大域的な収束は保証されない
数値・記号処理(櫻井)2004-04
Copyright (C) 2004 A. Sakurai All rights reserved.
プログラム
Java のアプレットがあります。非常に分かりやすい。試してみてください。http://www.apropos-logic.com/nc/Mathematica のプログラムはこれです
http://www.sakurai.comp.ae.keio.ac.jp/classes/numsymbol-class/2004/NonlinearEq-01.nb
http://www.apropos-logic.com/nc/http://www.sakurai.comp.ae.keio.ac.jp/classes/numsymbol-class/2004/NonlinearEq-01.nb