-
知的情報処理(櫻井)2005-03
Copyright (C) 2005 A. Sakurai All rights reserved.
知的情報処理(3)非線形方程式を解く(一変数)
慶應義塾大学理工学部
櫻井彰人
方程式を解く
代数方程式を解くことは昔から重要な問題であった算木にもたくさんある
数学競技会(例: 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/IntInfProc-class/2005/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 =+−=
解がありそう
http://www.sakurai.comp.ae.keio.ac.jp/classes/IntInfProc-class/2005/AlgebraicEq01.nb
-
知的情報処理(櫻井)2005-03
Copyright (C) 2005 A. Sakurai All rights reserved.
2分法(bisection method)「連続関数 f(x) に対して、もし f(a)f(b)
-
知的情報処理(櫻井)2005-03
Copyright (C) 2005 A. Sakurai All rights reserved.
2 4 6 8 101.× 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 法
不動点 Fixed-Point 法
f(x)=0 という方定式を(工夫して – これが大切 – ) x = g(x) という形にするx0
を初期値(うまく選ぶ)としxi+1 = g(xi) という繰返しを行う。
収束すれば、それが解。
不動点法の収束と発散
収束する場合もあれば発散する場合もある
不動点 x* の周囲で |g'(x)|
-
知的情報処理(櫻井)2005-03
Copyright (C) 2005 A. Sakurai All rights reserved.
変換
これなら求まる
1)x('g <
1)x('g >
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
図で見る Newton-Raphson 法
接線を引き、x 軸との交点を求める
根 x*
043)( 4 =−+= xxxf
xixi+1
-
知的情報処理(櫻井)2005-03
Copyright (C) 2005 A. Sakurai All rights reserved.
2 4 6 8 101.× 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
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
-
知的情報処理(櫻井)2005-03
Copyright (C) 2005 A. Sakurai All rights reserved.
大域的な収束
大域的な収束は保証されない
プログラム
Java
のアプレットがあります。非常に分かりやすい。試してみてください。http://www.apropos-logic.com/nc/Mathematica
のプログラムはこれです
http://www.sakurai.comp.ae.keio.ac.jp/classes/IntInfProc-class/2005/NonlinearEq-01.nb
レポート課題
各自の学籍番号を seed として、-100 から +100
までの擬似乱数を7個生成し、それらを係数とする7次代数方程式の根(近似値)をすべて求めよ。複素数根があるので注意されたし。
注: 求解プログラムは自分でMathematicaを用いて作成する(といっても、変更点はないか?)
注: 複素数に対しても、Newton Raphson の式はそのまま使える。
下記2点については、Mathematica のヘルプ(またはマニュアル)で調べてください
Mathematica における擬似乱数の生成Mathematica における複素数
レポート課題: 注意提出期間: 10/24~10/28 (日付が変わらないうちに)提出先
メールにします。が、アドレスは次回に連絡します
件名は、学籍番号(半角数字)と氏名を併記したものとしてください。間は半角の空白
例: 12345678 矢上太郎
作成方法ファイル形式は plain text, Mathematica notebook, MSWord,
pdfのいずれかとします。
但し、メールで提出するにあたって、zip, lha, またはgz 形式で圧縮してから添付してください。
考察をしっかり、説得的に書いてください。
その他レポートは、各自、独自に作成してください
http://www.apropos-logic.com/nc/http://www.sakurai.comp.ae.keio.ac.jp/classes/IntInfProc-class/2005/NonlinearEq-01.nb