データ解析ツールoctaveを語ろう Part 2
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2009/10/28(水) 22:13:01unixを科学研究で使っている香具師には非常に心強い味方のはずだ。
matlab互換を主張しながら、微妙にバージョンアップを続ける
octaveについて語ろう。
そのPart 2です
前スレ
データ解析ツールoctaveを語ろう
http://pc12.2ch.net/test/read.cgi/unix/1086016412/
0002octave for windowsメモの筆者
2009/10/29(木) 00:07:360003名無しさん@お腹いっぱい。
2009/10/29(木) 02:35:440004名無しさん@お腹いっぱい。
2009/11/06(金) 10:32:08FreeMATでは関数名がOctave/MATLABと変わってるものがあります
例えば
Octave/MATLABのfgetlは、fgetline
Octave/MATLABのinterp1は、interplin1 (しかもオプションが違う)
とか色々
というような感じなので、Octave、MATLAB、FreeMATで共通に動かせるプログラムを
書くにはどの処理系で動かしているかプログラムの中で判別する必要があります。
OctaveとMATLABを判別するには
if exsit('OCTAVE_VERSION'),
% octave の処理
else
% MATLAB の処理
end;
とやれば良いです。FreeMATではどうやら
if exist('verstring'),
% FreeMAT の処理
else
% FreeMAT 以外の処理
end;
とやればいいようです。
0005名無しさん@お腹いっぱい。
2009/11/06(金) 10:56:36行うのは時間の無駄です。
逆に理論上は電卓やExcelでも計算可能だが超絶むずい問題を
Octave/MATALB/FreeMATでさらさらと計算する事は非常に有意義です。
統計計算ならExcelでも可能でしょうけど、非線形最小二乗法の計算ともなれば
ちょっと難しいですが、Octave/MATLAB系言語なら簡単(?)に計算可能です。
MATLABでは高いOptimization Toolboxのオプションを買えば
lsqcurvefitというマルカート法を用いた非線形最小二乗計算が出来ます。
でもまあしかし、Octave-Forgeについてくるleasqrを使えば只で
マルカート法による非線形最小二乗計算ができますのでそちらを使いましょう。
使うのはleasqr.mとdfdp.mだけなので簡単です。
FreeMATではこのleasqr.mをどう試行錯誤しても使えなかったので
FreeMAT自身のマルカート法を用いた非線形最小二乗関数であるfitfunを使います。
それらの使い方の例を次に示します。
0006名無しさん@お腹いっぱい。
2009/11/06(金) 11:02:54function F=test1()
stol=0.0001;
niter=50;
AA=[0:360];
BB=AA./180.*pi;
CC=cos(BB);
x0=[1,0];
%
if exist('verstring'),
wt=zeros(size(BB))+1;
[p1, f1] = fitfun(@sintest1, x0, CC, wt, eps, BB);
p1
else
[f1, p1] = leasqr(BB', CC, x0, @sintest2, stol, niter);
p1
end;
disp(sprintf('pi = %f', p1(2)*2));
function F=sintest1(param1, xx),
F=sintest(xx, param1);
function F=sintest2(xx,param1),
F=sintest(xx, param1);
function F=sintest(xx, param1),
freq =param1(1);
phase=param1(2);
E=sin(xx.*freq+phase);
F=E;
0007名無しさん@お腹いっぱい。
2009/11/06(金) 13:40:31の説明を簡単にします
sintestは、param1で指定された波数freqと位相phaseのsinデータを生成する関数で
入力値にはcosのデータを用意し、
その波数と位相を非線形最小二乗法で求めるというものです
cosはsinから見ると位相が90度=π/2ずれてますので
推定された位相を2倍すればπが得られるはず!で
実際に計算してみるとそうなりました
ところで、leasqrとfitfunでは、解析する関数のパラメータの順番が違います
そこで元になってるsintest関数をleasqr用とfitfun用にラッパー関数
sintest1, sintest2で置き換えてから処理しています。
ちなみにMATLABのOptimization Toolboxの非線形最小二乗法関数の
lsqcurvefitもFreeMATのfitfunと同じ並びだったりします
0008octave for windowsメモの筆者
2009/11/06(金) 18:27:07他の視点としてはC, fortran, C++で書けば速いコードができるのだが,
プログラムを書くのに時間がかかってしまのですが,octaveなどで組み込みの
強力なツールを使えばプログラミングが早く終わるケースなどがあります
よね。
ちょっとして問題までコンパイラを使うのは時間の無駄だと思います。
また,プログラミングする前のプロトタイプ作成にも有効ですよね。
liboctaveはC++で動く数値演算クラスライブラリとして有用ですし,
octaveのスクリプトからの移植は,比較的容易ですので真剣に高速化したい
ときも近道になりますよね。
私の主なoctaveの用途はodeのソルバーと固有値問題解析です。
いろんな場面で連立微分方程式を解く
超音波は波動を使った研究をしていて波動方程式はフーリエ変換すると固有値
問題になるのでそのときもoctaveが大変約に立っています。
ExcelでVBAでルンゲクッタ公式を書いて,微分方程式を解いているのを見ている
となんと時代遅れで時間の無駄なことをしているのだろうと
思ってしまいます。
スティッフな問題なんぞに対応できないですしね。
#ところで,思い切りスレ違いですが,
非線形最小2乗法はgnuplotもかなり強力ですよ。
0009名無しさん@お腹いっぱい。
2009/11/06(金) 19:16:01まずバージョン情報をば。
OS: Windows Vista
octave: 3.0.3(cygwin setupからインストール)
gnuplot: 4.0 patchlevel 0(wgnuplotをcygwinからではなく個別にインストール)
また、octaveはcygwin1.5.25上で動かしています。
octaveからgnuplotにデータを渡すために
octaveの設定ファイルに下記サイト等を参考にして変更を施しました。
http://www.t.hosei.ac.jp/~miya_ken/computer/octave.htm
ですがグラフを表示させようとすると
octaveのウィンドウでデータが羅列されるだけで
gnuplotがグラフィカルに表示してくれません。
自分の打ちこんだデータについては何度も確認しましたが間違っている場所は見当たりません。
参考までに載せておきます(テスト用なのでただのsinカーブです)
------------------------------------
x=0:0.1:2*pi;
plot(x,sin(x))
------------------------------------
解決法知っている方おられましたらよろしくおねがいします。
0010octave for windowsメモの筆者
2009/11/07(土) 05:44:41Cygwin版ならのcygwin版gnuplotを使うのがいいとおもいますが,Xを動かしたくないんですね。XソフトとしてCygwin-XでなくXmingを使う動作が軽くて結構いいですよ。
Octave 2.91?以降ではguiモードのwgnuplotはpgnuplotをつかっても使えません。コンソールモードのgnuplotを利用してください。
これはcvs版しかないので
角藤さんによるCVS版Windows 用バイナリ
http://www.ring.gr.jp/pub/text/TeX/ptex-win32/w32/
私がビルドしたもの
File list of gnuplot 4.5 for Windows
http://www.tatsuromatsuoka.com/gnuplot/Eng/winbin/
をつかってみてください。ただ,最近のoctaveは仕様の変更がありますからCygwin版のgnuplotしか
動かない可能性はあります。
その場合も,2DグラフのマウスズームをしたいのならCVS版が便利です。
・gnuplot 4.5 (cvs) cygwin binaries prepared by gcc-4.x.x
http://www.tatsuromatsuoka.com/gnuplot/Eng/cygbin/
gnuplot_binary()を~/.octaveなどのスタートアップファイル(マニュアル参照)
適切にセットしてください。
#個人的には,Cygwin-1.5はもうほとんど使っていません。Cygwin-1.7はbeta版とはいえ,すでにいろいろなアプリケーションで新し物は,Cygwin-1.7のみ
というものが増えています。OctaveもCygwin-1.7なら3.2.3がつかえますしCygwin-1.7への乗り換えをお勧めします
0011octave for windowsメモの筆者
2009/11/07(土) 07:12:46ところでCygwinにこだわりがありますか。わざわざ,xのgnuplotを使わないようにされているようなので,Octaveを使うのにCygwin版をお使いになるのかいまいちわかりません。
Cygwinでいろんなことしたいならやはり,xをいれてx版のgnuplotをつかうのが自然だと思います。
Cygwinに固執がなければ
octave/mingwだとインストールするだけで簡単にgnuplotも使えるわけですし,なにかわざわざ困難な方向に走っておられるような気がします。
octave/mingwは
以下からダウンロードできます。
http://sourceforge.net/projects/octave/files/Octave_Windows%20-%20MinGW/Octave%203.2.3%20for%20Windows%20MinGW32%20Installer/Octave-3.2.3-3_i686-pc-mingw32_gcc4.4.0_setup.exe/download
ただし,SSE3つきのAtlasはバグがあるのでSSE2のAtlasをお使いください。
0012名無しさん@お腹いっぱい。
2009/11/09(月) 15:56:31レスありがとうございます。
gnuplotはcygwin導入前から導入していてそれを使えるようにしたかったんです。
octaveはcygwinから使えるよっていうのをwebで見て
じゃあoctave/cygwinと単体で導入していたgnuplotをコラボさせましょうということで進めていくと
>>9 のような事態になりました^^;
MinGW版のoctaveさっそく導入しましたら一発で解決しました。
情報提供感謝でございます。
P.S.
あと>>9の補足ですが、octaveとgnuplotをつなぐための設定ファイルの内容ですが
参考として挙げたwebページではwgnuplotに投げるとなっていますが
ほかのページも巡回して検討し、pgnuplotとしてました。
まあ、それでも同じ現象が出たので設定ファイルのせいではないのかなと考えてます。
0013octave for windowsメモの筆者
2009/11/10(火) 08:56:21一時期MichaelさんやBenjaminさんがOctaveとwindowバージョンのgnuplotを
つなぐため独自にビルドされたコンソールモードのgnuplotに
pgnuplotと名前をつけていたのでそのような記述があるのではと
思います。その後gnuplotのcvs版コンソールモードのgnuplotが正式に
採用されたとき,いろいろ意見がありましたが,他のプラットフォームと
同様のコンソールモードのgnuplotは単にgnuplotになりました。
ちなみに,pgnuplotはwgnuplotにpipe接続するものですが,
一方通行の通信しかできません。
現在のoctaveでは双方向のpipeを使ったいるので,いわゆるpgnuplotをoctave
に使うことやoctaveでwgnuplotを使うことはできません。
できるのはコンソールモードのgnuplotに投げることしかできません。
見られたwebページはおそらくMichaelさんが一時期使っていた
コンソールモードのpgnuplotだと思います。
現在はそれは存在しないので,Windowsの場合cvs版のgnuplotを使わないと
いけません。
0014octave for windowsメモの筆者
2009/11/15(日) 06:27:13http://old.nabble.com/Octave-3.2.3-2-mingw32-available-tt26353433.html
まだ,自宅は回線が遅いのでためしていません。SSE3のATLASのseg-faultの問題
http://old.nabble.com/Octave-3.2.3-mingw32-crashes-on-a-simple-complex-operation-tt26159558.html
は解決していないようで今回はSSE3のATLASは組み込まれていないようです。
jpeg-7に対するバグは解消されたようです。
0015octave for windowsメモの筆者
2009/11/21(土) 14:57:57http://old.nabble.com/3.2.4-call-for-patches-tt26440879.html
0016名無しさん@お腹いっぱい。
2009/11/22(日) 02:25:10今までのは書き換わるだけだったのに
3.2.2のは画面がクリアされて一瞬白くなって
連続で書き換えるとチカチカして非常に見にくい。
0017octave for windowsメモの筆者
2009/11/22(日) 05:29:44その問題はmingw版だけの問題ではなく,octave-3.2.2ではそうなります。
(バグです。)
octave-3.2.3では,解決してますので,そちらをお使いください。
0018octave for windowsメモの筆者
2009/11/23(月) 18:29:01http://old.nabble.com/HOWTO-for-building-octave-using-mingw-msys-p26465144.html
これは,octave-forge の SVN の Tree 上に置かれていますが,テキストファイルなので直接読んだり, ダウンロードできるようです。
https://octave.svn.sourceforge.net/svnroot/octave/trunk/octave-forge/admin/Windows/mingw32/HOWTO.txt
0019名無しさん@お腹いっぱい。
2009/11/30(月) 20:22:19dynareのsimul_stochが機能しません。
このエラーを検索しても意味がわからないのですが、
octaveユーザの方でわかるひとはいますでしょうか。
warning: mark_as_command is obsolete and will be removed from a future version o
f Octave
octave-3.2.3.exe:1:C:\Octave\3.2.3_gcc-4.4.0\bin
> cd c:\test
octave-3.2.3.exe:2:c:\test
> dynare rbc.mod
Configuring Dynare ...
error: could not find library or dependents: c:\dynare\4.0.4\matlab\../mex/octav
e/mjdgges.mex
error: called from:
error: c:\dynare\4.0.4\matlab\dynare_config.m at line 92, column 10
error: c:\dynare\4.0.4\matlab\dynare.m at line 57, column 12
octave-3.2.3.exe:2:c:\test
>
0020octave for windows メモの筆者
2009/12/01(火) 01:05:58mexがうごかないといってるようですね。
octave version 3.0からmexに
対応していますが,バイナリ互換ではないのでmexのCのソースから
octave用のmexを作成しなおす必要があります。
まずは,mexのソースコード(c言語で書かれています。)を持っているかを
確認してください。
mexのソースがなければ,octaveで動かすのは無理です。
これは,ライセンスなどにもかかわるので,mexのソースコードが手に入らない場合
mexのコードをともなうMATLABのコードをoctaveで動かすのは無理だと考えて
ください。
0021名無しさん@お腹いっぱい。
2009/12/02(水) 09:59:34octave 3.2.3 からコンパイラを変えたのが原因の気がします。
たしか、dynare 4.0.4 はoctave 3.2.2 だったら動いたような。
ttp://www.dynare.org/DynareWiki/DynareOctave
にも
Pick version 3.2.2 (version 3.2.3 is not binary compatible with the package for Dynare 4.0.4).
とあるので。
まあ、じきに dynare の中の人が最新のoctaveでも動くようにしてくれるとは思います。
0022名無しさん@お腹いっぱい。
2009/12/02(水) 13:55:310023名無しさん@お腹いっぱい。
2009/12/16(水) 22:13:45別名で同じ機能の関数ってあるのでしょうか?
それともこれは自前で作成するしかないですか?
0024octave for windows メモの筆者
2009/12/21(月) 18:11:04そもそもkmeans関数はどのような機能の関数なのでしょうか?
また,mファイルで書かれている関数で,ソースが手に入るのならば,
octaveで動かせる可能性があります。
mexでもソースが手に入れば,octaveでmexを作成しなおせば,
動く可能性があります。
0025名無しさん@お腹いっぱい。
2010/01/06(水) 09:48:14>>21
dynare の version が 4.1.0にアップデートされました。
Octave 3.2.3 で動きます。
■ このスレッドは過去ログ倉庫に格納されています