octaveの使い方(kyoto-u.ac.jp)。うちのマシンだと、コンパイルオプションは
g++ testoctave.C -I/usr/include/octave-2.1.36 -L/usr/lib/octave-2.1.36 -lblas -loctave -lcruft -llapack -ldl -loct-readline -lreadline -lcurses -lg2c -Wl,-rpath /usr/lib/octave-2.1.36
になる。長い。C++かぁ。わざわざライブラリとして使わんでもいいか、とも思う。どっちにしても、octaveの使い方はどっかにメモしておかなきゃ必ず忘れてしまう。
こいつをPythonから使えないかなぁとも思ったが、PythonにはNumeric Pythonがある。Numarray(stsci.edu)に名前が変わったのかな?? よくわからないがnumarray-0.6.2をインストールしてみた。Packagesの下にあるやつも忘れずにインストールする。bdist_rpmするためには各所にある.hをMANIFESTに入れないと失敗する。lapackみたいに、もともとその環境にライブラリがあれば使わないんだけど。
Numarrayは行列演算ができる。でも行列の積は「*」演算子じゃなくて、matrixmultiply(a,b)らしい。「*」は要素を全部掛けるだけみたいだ。転置はa.transpose()。transpose()は破壊的なメソッドです。
…なんか大袈裟かも、と思う。使い方をこれから調べなければならないし。私は単に「コンピュータでn次方程式を解きたい」だけなのだけどなぁ。というかむしろ解くまでいく必要はなくて、プロットされた点を通る線を近似したいだけ。今時のコンピュータってそういうもんじゃないのかな。行列演算なんて、bashに最初から組み込まれててもいいくらいだ(迷惑?)。n元一次方程式なら、たぶんNumarrayのlinear_algebraのsolve_linear_equations(a,b)で済むような気がする。
それで、近似ならoctaveではpolyfit()一発みたいだ。むかしもっと難しいやりかたしたような気がするが…。numarrayにもpolyfit()みたいなのがあるといいな。
(追記) 2003-09-24 10:47
ちなみにpolyfitの例。
GNU Octave, version 2.1.36 (i686-pc-linux-gnu). Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 John W. Eaton. This is free software; see the source code for copying conditions. There is ABSOLUTELY NO WARRANTY; not even for MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, type `warranty'. Report bugs to <bug-octave@bevo.che.wisc.edu>. octave:1> x=[0,1,2,3,4] x = 0 1 2 3 4 octave:2> y=[576,579,634,613,591] # 最近の某社の株価 y = 576 579 634 613 591 octave:3> polyfit(x,y,1) # 1次式で近似 ans = 6.4000 585.8000 # y=6.4x+585.8 octave:4> polyfit(x,y,2) # 2次式で近似 ans = -9.0000 42.4000 567.8000 # y=-9x^2+42.4x+567.8
(追記) 2003-09-24 11:38
z=polyfit(x,y,d)で代入しておいて、polyval(z,n)とすると値を求められる。
(追記) 2003-09-24 11:02
グラフにしてみた。