皆さん中学や高校で平方根を習って、√2は1.41421356...、√3は1.7320508...、などを語呂合わせで覚えたりすると思います。√5の2.2360679...も覚えたでしょうか。これらの数は、与えられたものを丸暗記するのが普通なので、そういうものだと思っているかもしれません。では、昔の人はどうやってこの数を計算したのでしょう?もっと多くの桁を知りたい場合は、何をどう計算したらいいでしょうか?調べてみると、√2は紀元前には6桁ぐらい知られていたそうですが、今なら数学や数値計算の知識を使って簡単な方法で√2の値を求められます。
よく知られた方法として、以下の式を反復的に計算すると√2が求まります。
xnは何らかの数値で、n回目の計算でxnを用いてxn+1を得ると、その度に√2に近づいていく手続きになっています。最初の値をx0=1として実際に計算してみましょう。
正確には√2=1.4142135623730950488016887242...なので、上の計算で正しかった桁には下線を引いておきました。手で計算するのは相当大変でしょうが、すごく頑張れば、暗記しなかった桁まで自分で計算できることがわかるでしょう。
では、最初の値をx0=2とした場合はどうでしょうか?計算してみるとすぐにわかりますが、x1=2/2+1/2=3/2=1.5となって、以降は上の例と全く同じになります。
それなら、最初の値をx0=3としたらどうでしょう?
すごい分数がでてきてしまったし、残念ながらx0=1のときより精度が悪いですが、計算を進めると正しい桁が増えていくのがわかります。最初の値x0が正しい値に近いほど、少ない反復で高精度な値を求めることができます。
上のように、√2の場合が上手くいくことがわかったので、調子に乗って他の数も計算してみましょう。数によって計算式が変わって、√3の場合は
を反復的に計算すれば求まります。実際にx0=2として計算してみましょう。
正確には√3=1.73205080756887729352744634150587236694...なので、ちゃんと√3を求めることができました。
ついでに√5も計算してみましょう。反復更新式は
になります。x0=2から計算してみると以下の通りです。
こちらも正解は√5=2.236067977499789696409173668731276235440618...なので、とても高い精度で求めることに成功しています。
ここまでの更新式を見てみると、ある数aの平方根√aを求めるには
を適当な数x0(≠0)から反復すれば良さそうに見えます。なぜこのような漸化式が得られるのでしょうか?平方根以外の関数の計算にも同じような反復更新式はあるのでしょうか?
実は、上の更新式は「ニュートン法」と呼ばれる反復アルゴリズムを導出した結果として得られます。ニュートン法は、関数値が0になる点を求めるための非常に有名なアルゴリズムです。具体的には、微分可能な関数fについてf(x)=0となるようなxを求めるアルゴリズムで、次の漸化式によって与えられます。
ただし、f′はfの導関数です。平方根√aを求めるには、x2=aを満たすxを求めればいいので、x2−a=0となるxを求めればよいです。つまり、f(x)=x2−aという関数を考えてニュートン法を使えば√aの近似値が得られます。実際にニュートン法の更新式を導出してみると、fの導関数は
なので、これをニュートン法の定義式に代入すれば
のように√aを求めるニュートン法の反復アルゴリズムが得られます。
では、ニュートン法の式はどのような考え方で出てくるのでしょうか?言葉で言えば、xnでf(x)に接する接線を引いて、その接線が0になる点をxn+1とする、という手続きを繰り返すアルゴリズムになっています。
xnでf(x)に接する接線はf(xn)+f′(xn)(x−xn)と書けますが、この接線が0になる点を考えてみると
となり、ニュートン法の定義式の右辺が出てきました。この、接線が0になる点を次の反復でxn+1として用いれば、ニュートン法の完成です。
ニュートン法のように、問題を反復アルゴリズムで解く方法は理工学のあらゆる場面で活用されています。例えば、物理シミュレーションも反復アルゴリズムで実装されるし、深層学習で用いられている学習法も反復アルゴリズムです。興味のある人はぜひ「反復法」「数値計算」「最適化」などのキーワードを調べてみてください。
掲載大学 学部 |
東京農工大学 工学部 | 東京農工大学 工学部のページへ>> |
私たちが考える未来/地球を救う科学技術の定義 | 現在、環境問題や枯渇資源問題など、さまざまな問題に直面しています。 これまでもわたしたちの生活を身近に支えてきた”工学” が、これから直面する問題を解決するために重要な役割を担っていると考えます。 |