octaveの使い方
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
グラフにしてみた。