非線形方程式の根を数値的に求める方法について ---- #contents ---- *線形方程式と非線型方程式 [#z051bb79] &ref(rootfinding.eq1.gif,nolink,70%);についての方程式&ref(rootfinding.eq2.gif,nolink,70%);の解を求めたい. もし,&ref(rootfinding.eq3.gif,nolink,70%);が #ref(rootfinding.eq4.gif,nolink,70%) のような線形方程式(1次方程式)であるならば,その解は, #ref(rootfinding.eq5.gif,nolink,70%) と計算できる(ただし,&ref(rootfinding.eq6.gif,nolink,70%);). しかし,&ref(rootfinding.eq3.gif,nolink,70%);が非線形方程式であったならどうだろうか. たとえば,以下の&ref(rootfinding.eq7.gif,nolink,70%);次代数方程式(algebraic equation)を考える. #ref(rootfinding.eq8.gif,nolink,70%) 2次方程式(&ref(rootfinding.eq9.gif,nolink,70%);)ならば解の方程式,3次や4次方程式の場合はカルダノ(Cardano)やフェラリ(Ferrari)の公式で 解析的に解くことができるが,5次以上だと直接的な解法はない. また,超越方程式(transcendental equation)と呼ばれる無限次代数方程式(&ref(rootfinding.eq10.gif,nolink,70%);)もある. たとえば,&ref(rootfinding.eq11.gif,nolink,70%);は無限べき級数で表されるため,&ref(rootfinding.eq11.gif,nolink,70%);を含む方程式は超越方程式となる. 超越方程式に関してもほとんどの場合直接的な解法がない. 以下では非線形方程式を数値的に解く方法として, -2分法 -ニュートン・ラフソン法 -多次元のニュートン・ラフソン法 -ホーナー法 -DKA法 について述べる. *2分法 [#a273a108] #include(2分法,title) *ニュートン・ラフソン法 [#daa02208] #include(ニュートン・ラフソン法,title) *多次元のニュートン・ラフソン法 [#p1959a72] #include(多次元のニュートン・ラフソン法,title) *ホーナー法(組立除法) [#ia8c4b4d] #include(ホーナー法,title) *DKA法 [#t3a86f44] #include(DKA法,title) *ソースコード [#k90fe13f] 上記のコードを含むVisual Studio 2010用のソースコードを以下に置く. #ref(rootfinding.zip) *参考文献 [#j925424d] -佐藤次男, 中村理一郎, ``よくわかる数値計算 アルゴリズムと誤差解析の実際'', 日刊工業新聞社, 2001. -川上一郎, ``数値計算の基礎'', http://www7.ocn.ne.jp/~kawa1/