方程式を解く 知的情報処理(3) - Keio University · 2005. 10. 17. ·...

6
知的情報処理(櫻井)2005-03 Copyright (C) 2005 A. Sakurai All rights reserved. 知的情報処理(3) 非線形方程式を解く(一変数) 慶應義塾大学理工学部 櫻井彰人 方程式を解く 代数方程式を解くことは昔から重要な問題であった 算木にもたくさんある 数学競技会(: 30題を4050日で解く)で出された 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.000 0.1 0.701 0.2 0.408 0.3 0.127 0.4 -0.136 0.5 -0.375 0.6 -0.584 0.7 -0.757 0.8 -0.888 0.9 -0.971 1 -1.000 1.1 -0.969 1.2 -0.872 1.3 -0.703 1.4 -0.456 1.5 -0.125 1.6 0.296 1.7 0.813 1.8 1.432 1.9 2.159 2 3.000 を求める となる のとき x x f x x x f 0 ) ( 1 3 ) ( 3 = + = 解がありそう

Transcript of 方程式を解く 知的情報処理(3) - Keio University · 2005. 10. 17. ·...

  • 知的情報処理(櫻井)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