本日も、りけいのりからお届けします。
今回は,
解けない方程式を解く!
をテーマにしていきます.まずは,解けない方程式ってどんなものかを説明し,具体的に解く手順を説明していきます.
そして,次回以降,実際にC言語でプログラムを書き,解いていきます.
解けない方程式
皆さん,以下の式を解いてみましょう!
中学校一年生の一次方程式の問題ですね.答えは次のようになりますね.
これは,線形方程式(linear equation)に分類されます.これに対して,非線形方程式(nonlinear equation)もあります.この,線形と非線形の言葉については別の機会に説明しますが,簡単に紹介すると,厳密には違いますが,なんとなく線形は「直線的」というイメージでいいと思います.話を戻します.非線形方程式の例は以下の通りです.
もちろん,非線形方程式のすべてが解くことができないわけではありません.解くことができる方程式もたくさんあります.しかし,これから,紹介する方法を使えば,だいたいの方程式を解くーその方程式を満たす未知数の値を導くーことができます.もちろん,場合によっては解けない場合がありますが,普通は解けます.
ニュートン法
それでは,解けない方程式を解いていく手順を紹介します.まず,今回はニュートン法の手順を説明しますが,ほかにも,反復法と呼ばれる手順もあります.
まず,未知数をとして,その方程式の項を左辺にまとめ,右辺をゼロにしたものを
と表現します.この方程式を満たす,を近似的に求めていきます.
ここで,このニュートン法の理解のコツとして,図を用いて説明していきます.このを関数として,
と考えると,求める解は以下の図のを満たす点,つまり,軸との交点ということがわかります.
では,具体的な手順を見ていきます.
- 初期値
の点で垂線を引きます.この
は,微分や累乗を表しているのでなく,k回目の計算で求めた解という意味で,第k次近似解とか言われます.この初期値
は,適当に決めます.大体の場合は,どんな値にしても最終的にはうまくいきます.
- 曲線
との交点をAとします.
- A点での接線の方程式を立てます.
より
- その接線と水平軸との交点をBとし,座標値
とおきます
上の接線の式より次のように求まります.
線の方程式を立てます. - この操作を繰り返す.
一般に,は次のように表せます.
- 操作を繰り返すにつれて,
は限りなく
の解に近づいていきます.
以上です!こんな手順です!
手順はわかったけど,まだなんかしっくりこないなあ,,,って人が多いと思います.
それは当然で,実際にこれを利用した具体例がないとイメージがわかないと思います.
計算例
具体例を,計算してみましょう.
をニュートン法で解け.
この問題は,別に数値解析でなくても解けますね.この解は,
ですね!だいたい,1.7320508・・・(ひとなみにおごれや)ですね.
では,これを,ニュートン法を用いて解いたとき,どうなるか見ていきましょう.
まず,次のように変形します.
この時,以下のように計算できます.
これらを用いて,以下のようにニュートン法の計算を行います.
となります.ちなみにですが,私の場合以下のように変形します.計算ミスを減らすためです.累乗の計算をしなくて済みます.
では,さっそく計算してみましょう.ここでは,初期値をとします.
\begin{eqnarray} x^{(1)} &=& \frac{ 1 }{ 2 } ( x^{(0)} + \frac{ 3 }{ x^{(0)} } ) \\ &=& \frac{ 1 }{ 2 } ( 2 + \frac{ 3 }{ 2 } ) \\ &=& 1.75 \end{eqnarray}
次も行きます!
\begin{eqnarray} x^{(2)} &=& \frac{ 1 }{ 2 } ( x^{(1)} + \frac{ 3 }{ x^{(1)} } ) \\ &=& \frac{ 1 }{ 2 } ( 1.75 + \frac{ 3 }{ 1.75 } ) \\ &=& 1.732142857 \end{eqnarray}
\begin{eqnarray} x^{(3)} &=& \frac{ 1 }{ 2 } ( x^{(2)} + \frac{ 3 }{ x^{(2)} } ) \\ &=& \frac{ 1 }{ 2 } ( 1.732142857 + \frac{ 3 }{ 1.732142857 } ) \\ &=& 1.73205081\end{eqnarray}
以上です!だいぶ,に近い値が計算で求まってきましたね!これをずっと繰り返すと,さらに精度が高まってきます!
ですが,ここで,気づいてほしい問題が2つあります.
1つ目は,もう一つの解のの結果が得られなかったこと.ちなみに今回も含め,大体の場合,初期値の与え方で,ほかの解も得られます.
2つ目は,初期値をとすると,分母がゼロとなり,計算ができないこと.
今回はそこまで詳しい考察はしませんが,ニュートン法を利用される際は,正解が複数個あるときの初期値の与え方や,初期値の与え方による計算の変化,について検討が必要です.
おわりに
いかがでしたか?
もし,どうしても解けない方程式があなたの目の前に現れても,あっても今日の方法を使えば,何とか太刀打ちできます.
しかし,このニュートン法には繰り返しの処理が必ず必要です.今回の計算例では,すぐに大体の値に答えが収束しましたが,場合によっては50回,100回繰り返す必要が出てきます.このため,コンピュータを使っていきます!
次回は,ニュートン法での方程式の解法を,本格的にC言語でコンピュータでの計算を詳しく行っていきましょう!
本日も、りけいのりがお届けしました。
参考文献
1)高橋麻奈『やさしいC 第4版』 風工舎
2)安田仁彦 『数値解析基礎』 コロナ社