HOME >

数値計算勉強日記 【No1】
非線型方程式その1

文責:高橋 佑生 (2014年10月17日) カテゴリ:

皆様こんにちは。高橋です。three.jsの勉強日記を書いていましたが最近はコンピュータ・グラフィックスの勉強だけでなく、数値計算について勉強しています。今回は数値計算の記事として書こうと思います。では、まずは方程式をとくところからいこうと思います。

数値的に方程式をとく

ニュートン法

$$x^{2}-2=0          (1) $$ 今回はxを求めることを考える。もちろん皆さん解けますよね? $$x^{2}=2$$$$x=\pm\sqrt{2}$$ となりますよね。さて、ルート2は1.41421356...(一夜一夜に人見頃)ですよね。 皆様はルート2をどのように求めますか? 一番身近な計算機であるパソコンでこのような方程式を求めることを考えます。

例えば $$2x+3=5          (2)$$ だいたいこのへんであろうというところから順に代入して、左辺と右辺が等しくなったときのxを解とすることが考えられます。 しかし、これでは例えばルート2のような無理数は求めることができません、また莫大な時間がかかってしまいます。 さて、もう少し頭をつかって考えてみましょう。

(1)の例を考えます。例えば$$f(x)=x^{2}-2$$として、f(x)=0のときのxを求めればいいですね。グラフでかくとこのようになります。

このf(x)の解はx軸との交点となります。 この交点を求める事によって解をだすということを考えます。 ではどのようにして交点を求めればよいのか。 以下のように考えることができます。 まずは下の図を見てください

まず解に近いところに初期値を取ります。 今回の関数の場合xは2より小さく1より大きいということはわかりますよね。 $$f(1)<0,f(2)>0$$ では、その間に初期値を適当に決め打ちをします。 今回の場合は初期値x0を1.5としましょう。 では、ここからどのようにして解を求めていくのかといいますと、そこの点での接線を考えます。 そうすることによって図にあるように解に近づけます。 接線というのは、その点で接して、その関数のその点での傾きを継承した直線となります。 この直線のx軸の交点を数列のようにx2という点を得ます。 これを繰り返すことによって解に近づいていくことができます。 すなわち、数列の式で記述するなら $$x_{n+1}=x_{n}-\frac{f(x_{n})}{f'(x_{n})}$$ のように表すことが可能です。 そして、数値計算の基本なのですが適切な誤差までもとめてることによって解とします。 さて、実際に組んでみましょう。 私は以下のようにプログラムをくみました

        var x=[];
    var i=0;
    x[0]=1.5;//おおよその近い値を入れる必要がある。
    x[1]=x[0]-(x[0]*x[0]-2)/(2*x[0]);
    console.log(x[i]);
    while(abs(x[i]-x[i+1])>0.000000000001){
        i++;
        x[i+1]=x[i]-(x[i]*x[i]-2)/(2*x[i]);

        console.log(x[i]);
        }
    

第一導関数は解析的に自分で実装したものです。 さて、absという関数はMathライブラリでも存在しますが(Math.abs()として)値の絶対値をとるという関数です。 whlie文のなかで誤差の精度を制定しています。では、どのような解が出力されるかというと

のように求めることができます。 そして、√2の値は1.414213562373095048...となっています。 小数点15桁の精度で求めることができました。 何桁まで精度を求めるべきかという問題はまた後日記事に致します。 このように、繰り返して解に近づけていくアルゴリズムを反復法と一般にいいます。 二分法という有名なアルゴリズムも今後機会がありましたらご紹介いたします。そのときには数値計算で大切な精度と誤差、計算の速さのうちの計算の速さについて触れる形でご紹介しようかなと思います。

本日の懺悔

久々の更新になってしまいました。 最近、自分は自己合理化という単語をよく聞くようになりました。 合理化をすることによって自分の都合のいいほうに捉えたりだとかそう思い込もうとするのです。 自分も自己合理化をしてしまいます。 これは最近わかったのですが、合理化は人によって現れ方がまったくことなります。 その場が荒れないように合理化するもの、自分の利益を獲得するために合理化するもの。 自分の場合は正当化することで自分になっとくさせようとしてしまう傾向にあります。 合理化する前に罪悪感を感じます。それをごまかすために正当化してしまいます。 この合理化に対して、しっかりむきあって改善していこうと思います。 本日は以上です。(次回の更新は早いと思います)



▲このページのトップNPO法人 natural science トップ

関連記事

▲このページのトップNPO法人 natural science トップ




Warning: mysqli_connect(): (28000/1045): Access denied for user 'xsvx1015071_ri'@'sv102.xserver.jp' (using password: YES) in /home/xsvx1015071/include/natural-science/include_counter-d.php on line 8
MySQL DBとの接続に失敗しました