2018.03.10 Saturday
フィッティングで方程式を解いてみる
実に半年ぶりのブログ更新。
Fallout4やったり、ウィッチャー3やったりしてた。
あんまり家でガッツリ趣味やる時間がなくて放置していた。
会社ではいろいろ面白いことやってるんだけどそれをここに書くわけにはいかないし。
趣味やるくらいなら英語やらねばというのもある。ここしばらく英語は勉強してなくて、3月に入ってから勉強を再開した。
本題。
今日は以前ふと思いついたことを実際にやってみることにした。
それは・・・、フィッティングを使って方程式を解くこと!
さて、どういうことをするかは後で説明することにして思い出話から。
高校の数学では、基本的に解析的に解けない方程式は出てこない。
しかし、大学に入ると解析的に解けない方程式のオンパレード。
ここで面食らうわけだが、大学1年生のときに先生にいいことを教わった。
グラフソフトでグラフ書けば数値解簡単に求められるよ、と。
例えば
x^2 -2x = -1
を考えよう。
この数値解はグラフソフトでy=x^2-2xとy=-1をプロットして交点の座標を読み取ればいい。
この例は解析的に解けるが、解析的に解けない方程式も同じだ。
さて、ここからが本題。
同じグラフソフトを使って解を求めるならフィッティング機能使えないかな?
グラフソフトにはフィッティング機能がついていることがある。
例えば僕が愛用しているGnuplotは
fit a*x "data.txt" via a
と入力すれば直線フィットが出来る。
与えたデータに最も近くなるようにパラメータを推定してくれるわけだ。
これを利用して方程式を解けないだろうか。
フィッティングは次のようなことをしている。
対象のデータを{xi,yi}としよう。これをパラメータ{a}の関数fでフィッティングするとは
を最小化する{a}を求めることに他ならない。
それではこれを利用して方程式を解いてみよう。
ここでは
g(a) = c
をaについて解くことにする。cは定数である。
Gnuplotではデータは2点以上必要である。
次のようにデータを用意する。
0 0
1 c
フィッティング関数は
f(x;a) = g(a)*x
とする。
するとフィッティングすることにより求まるパラメータaは
を最小化するものとなる。これはg(a)=cである。
つまり数値解が求まる。
さて、x^2-2*x = -1をこの方法で解いてみよう。
"data.txt"として
0 0
1 -1
を用意する。
fit (a**2-2*a)*x "data.txt" via a
を実行すれば
はい、ばっちしa=1が得られました!
いや、だから何?なんだけど(笑)
役に立たなくても面白いものは面白いじゃない?