データ解析ツールoctaveを語ろう Part 2
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2009/10/28(水) 22:13:01unixを科学研究で使っている香具師には非常に心強い味方のはずだ。
matlab互換を主張しながら、微妙にバージョンアップを続ける
octaveについて語ろう。
そのPart 2です
前スレ
データ解析ツールoctaveを語ろう
http://pc12.2ch.net/test/read.cgi/unix/1086016412/
0161octave for windows メモの筆者
2011/09/22(木) 14:14:55.62ttp://www.gnu.org/software/octave/doc/interpreter/Compiling-Octave-with-64_002dbit-Indexing.html
にしたがってビルドするしかないようですね。
Debian 上での例が載ってます。
0162octave for windows メモの筆者
2011/09/22(木) 17:00:01.71Scilab なら64bit版があるようです。
ttp://www.scilab.org/products/scilab/download
でも,文法かなり違うからなあ。
0163名無しさん@お腹いっぱい。
2011/09/26(月) 13:34:26.79Scilabの32bitも64bitもメモリー管理としては大差無いようです
Windows7 64bit に4GBのメモリーを積んだ条件で
Octave 3.2.4で
AA=ones(12000,10000);
とやると通りますが
AA=ones(13000,10000);
では error: memory exhausted と出ます。
Scilab 5.3.3 では32bitでも64bitでも
stacksize('max');
を実行した後に
AA=ones(13000,10000);
は通りますが
AA=ones(14000,10000);
はエラーが出ます。
倍精度が16bitだとして(複素数の実部と虚部にそれぞれ8bit倍精度)
2GBぐらいに壁があるようです。
0164octave for windows メモの筆者
2011/09/26(月) 17:59:23.61私もやってみました。
-->AA=ones(13600,10000);
!--error 17
stack size exceeded!
Use stacksize function to increase it.
Memory used for variables: 135007946
中間的なメモリが必要です: 136000002
Total memory available: 268435455
Scilabの場合,スタックサイズの上限に問題があるようですね。
0165名無しさん@お腹いっぱい。
2011/09/27(火) 09:00:38.67倍精度複素数16bitではなくて16Bytesの間違いでした
全部の変数で2GB未満しかアロケート出来ないっぽいです
2^32は42億9496万7296でしたか、つまり4Gですが
CPUは2の補数をとった2Gまでしかアクセスできないのでしょう
0166octave for windows メモの筆者
2011/09/27(火) 10:26:32.43ttp://www.gnu.org/software/octave/doc/interpreter/Compiling-Octave-with-64_002dbit-Indexing.html
をよく読むとArray Indexとなる整数のバイト数を64 bitの体系にあわせて,
ライブラリまで含めて構築しなおす必要があるようです。
(たとえばFortran のライブラリなら(たとえばLAPACK),
interger のデフォルトのバイトを8バイトにする。)
Scilab 64 bitは,そこまで考えてビルドされていなのではと推測します。
0167octave for windows メモの筆者
2011/09/30(金) 10:42:53.78ttp://octave.1599824.n4.nabble.com/Octave-3-4-3-rc0-release-candidate-available-for-ftp-td3857294.html
だそうです。
0168名無しさん@お腹いっぱい。
2011/10/01(土) 22:47:50.57データに番号がついていて連続していない状態で、他のデータから連続していないデータを参照しているので
内部で番号をつけ直しています。つけ直しの時に総ナメのような感じになってしまうので連想配列が使えたら
と思いまして質問しました。
0169名無しさん@お腹いっぱい。
2011/10/02(日) 01:13:05.09構造体で、それっぽいことはできたはず。
その用途でしたら、スパース行列でもよさげ。
どっちが速いかは未検討。
0170168
2011/10/02(日) 09:20:50.75a.idみたいな感じで丁度構造体を使っているので構造体を使った連想っぽい処理をもう少し具体的に知りたいです
どんな感じで使えば良いのですか?
0171名無しさん@お腹いっぱい。
2011/10/02(日) 14:17:52.86問題がややあいまいなので、もうちっと具体的にどうぞ。
情報の後出しは、無しということで。
0172168
2011/10/02(日) 18:24:07.84有限要素法のプログラムを勉強のために作っているのですが、データが節点、
要素等番号がついています。NASTRANのデータ形式をGRIDとかCHEXAとか
を使っています。(手を抜いて継続行を一行にしていたりしますが・・・)
これらの番号(ID)は連続した数字ではなく、プログラム内部で参照して番号を
関連付けるしかないのですが、現状総ナメで番号(ID)を内部の連続した配列番号
に関連付けています。変数はelem(:).id、node(:).idがデータの番号で関連付
けした変数はelem(:).no、node(:).noとかにしています。主にelemがnode
を参照するのでnode(:).idを連想配列風の処理で内部の配列番号に変換したいのです
読みにくいと思いますが、構造体を使った連想配列風の処理を教えていただけない
でしょうか?
0173名無しさん@お腹いっぱい。
2011/10/02(日) 23:48:46.22もっとスマートな方法もありそうですが…
期待外れだったら、すいません。
案1(スパース行列)
node_id = [1 10 100 1000 10000];
node_id_t = sparse(0,0);
node_id_t(node_id) = 1:length(node_id);
% node_id_t(10000) -> 5
案2(連想配列?)
node.id_1 = 1;
node.id_10 = 2;
node.id_100 = 3;
node.id_1000 = 4;
node.id_10000 = 5;
% getfield(node,['id_' num2str(10000)]) -> 5
ちなみに、FEMをOctaveで、ということでしたら、OpenFEMというのも参考になるかもしれません。
Matlab用で、コードがめちゃくちゃ読みづらくて、かなりbuggyで信用なりませんが、
各種アルゴリズムの実装を知るには非常に有用です(個人的に、固有値解析のとこは感動しました)。
0174168
2011/10/04(火) 20:03:02.40お返事有り難う御座います。
処理速度を早くするためにはスパース行列が良さそうですね、
処理手順を多少弄らなければいけなさそうですが少し考えてみます。
案2の方も少し考えてみます。(使えそうな使えなさそうな・・・)
OpenFEMの情報有り難う御座います。少しググってみます。
0175octave for windows メモの筆者
2011/10/11(火) 10:17:19.15ttp://octave.1599824.n4.nabble.com/GNU-Octave-3-4-3-Released-td3890670.html
0176名無しさん@お腹いっぱい。
2011/10/11(火) 21:28:31.48毎度ありがとうございます。
目玉機能は何かあります?
(simulinkがついに出来たとか :-P )
0177octave for windows メモの筆者
2011/10/12(水) 16:12:10.66残念ながら喜ぶような機能の追加はなく,バグフィックスのようです。
3.4はこれでおしまいで,次は3.6になります。
GUIのインターフェースがつくかも知れませんが,はっきりとしません。
0178名無しさん@お腹いっぱい。
2011/10/12(水) 20:10:34.63あ、それは残念。
純正のOctave Workshopと、ネイティブEXCELリーダーが付けばいいなぁ。
0179octave for windows メモの筆者
2011/10/13(木) 11:33:00.99Octave-forgeのio packageである程度のことはできるようです。
私はつかったことがないのでよくわかりません。
ttp://octave.sourceforge.net/io/overview.html
>>純正のOctave Workshop
Qt BaseのGUIが検討されていてもしかしたら,3.6で実装
(たぶんExperimental)されるやもしれません。
Windows版については,最近活動がストップしているBenjaminさんに
変わる人が出てくればいいのですが。
私のスキル,体調,仕事上の都合でそこまでついていけないのが実情です。
0180名無しさん@お腹いっぱい。
2011/10/13(木) 13:02:18.29s=poly(0,"s")
sys=1/(1+s)
ってできますが
Octaveでは
sys=tf( [1] , [1 1] );
ですよね。
scilabみたいに記法する方法はないですかね?
0181octave for windows メモの筆者
2011/10/13(木) 17:08:44.70Octave 3.4に対応した
Octave-forgeのcontrol packageでは,
ttp://octave.sourceforge.net/control/function/tf.html
Exampleに
octave:1> s = tf ("s");
octave:2> G = 1/(s+1)
Transfer function "G" from input "u1" to output ...
1
y1: -----
s + 1
とあります。
Windowsの場合
ttp://www.tatsuromatsuoka.com/octave/jpn/OctaveWinMemo.html#110906
こちらをご覧ください。
0182octave for windows メモの筆者
2011/10/13(木) 17:10:32.551
y1: -----
s + 1
が崩れて表示されていますね。すみませんm(__)m。
0183octave for windows メモの筆者
2011/10/13(木) 17:18:17.15何度もすみません。
****************************
Windowsの場合
ttp://www.tatsuromatsuoka.com/octave/jpn/OctaveWinMemo.html#110906
こちらをご覧ください。
****************************
は
WindowsでOctave-3.4.2でcontrol packageなどのOctave-forgeを使いたい場合
ということです。舌足らずな説明ですみません。
0184名無しさん@お腹いっぱい。
2011/10/13(木) 23:33:20.68使ってみます。
ginputのバッティングなんかも解消できているといいのですが。
0185名無しさん@お腹いっぱい。
2011/10/14(金) 15:57:12.92OctaveのはMatlab互換なので馴れてしまえば後々で便利です
例えば化学の一次反応を
(d/dt)x=k(x0-x)
と置きましょう。xは反応量、x0は初期量、kは反応速度定数(毎秒)です。
式を展開すると
(1/k)(d/dt)x=x0-x
x0=(1/k)(d/dt)x+x
これをラプラス変換すると
X0=(s/k)X+X=(s/k+1)X
X0=((s+k)/k)X
伝達関数G(s)は(伝達関数はOutput/Input)
G(s)=X/X0=k/(s+k)
これを普通にラプラス逆変換すると
x/x0=k exp(-kt)
ですが、Octaveで計算すると、k=0.02 として
Octave:4> k=0.02; G=tf([k] [1,k],0);
Octave:5> [y,t]=step(G);plot(t,y);
であっさり描けてしまいます
時定数は1/k=1/0.02=50秒で、図でも50秒で1-exp(-1)=63%にまで上がってるはずです。
0186名無しさん@お腹いっぱい。
2011/10/15(土) 13:48:46.19>>180のヒトは
伝達関数G(s)は(伝達関数はOutput/Input)
G(s)=X/X0=k/(s+k)
で
Octave:4> k=0.02; G=tf([k] [1,k],0);
を
Octave:4> k=0.02; G=k/(s+k)
で書ければいいなぁ
って言っているんだと思います。
Octave3.4だと出来るのか。
0187名無しさん@お腹いっぱい。
2011/10/15(土) 14:33:56.65それはわかってるつもりなのですが
伝達関数は計算してから入れればいいという考え派なので
しかし制御の本がScilabばっかりなのは
伝達関数の計算なんかめんどい&scicos(5.2以降ならxcos)で制御を勉強したい
という人が多いのでしょうね
0188octave for windows メモの筆者
2011/10/17(月) 07:33:56.72>Octave3.4だと出来るのか。
正確にいうと最近のControl package でできるようになり,
それにはoctaveが3.4以上である必要があるということのようです。
ところで3.4.2 for winodws用のOctave-forge Packageが更新されました。
http://wiki.octave.org/wiki.pl?OctaveForWindows
を参考にしてください。Control package もバージョンが
あがっているようです。
0189名無しさん@お腹いっぱい。
2011/10/17(月) 20:24:04.79すいません。
http://octave.sourceforge.net/
のWindows installer (Octave and Octave-Forge)
の方は更新されないんですか?
0190octave for windows メモの筆者
2011/10/18(火) 08:54:52.33される見込みは,残念ながら今のところありません。
MaintainerのBenjamin Lindnerさんが5月ごろから,svnの作業ツリーやML
などから,姿を消しておられます。
私は,ビルドしかできないので3.4.2を自分のWebにのせたら,
Nitzan Araziさんが7zipによるアーカイブと octave-forge のパッケージを
(7 zip)作ってくださいました。
0191名無しさん@お腹いっぱい。
2011/10/19(水) 20:34:16.86変数xが負の値をとる場合にはゼロになるように条件を加えたいのですが
そういったことは出来るのでしょうか。
0192名無しさん@お腹いっぱい。
2011/10/20(木) 12:35:32.94数学的な工夫でできるかもしれませんが。すみませんがわかりません。
0193名無しさん@お腹いっぱい。
2011/10/21(金) 23:07:54.32Octave3.4.2_gcc4.5.2\share\octave\packages\control-2.1.54
の中身を見ているのですが、
tf2ss とか sysout とか、その変の関数がゴッソリと無くなっているのは
なんか理由があるんでしょうかね?
s=tf("s") で G=1/s , H = 1/(s^2+1) , GH=G*H
っていう記述が出来るようになったのは有りがたい反面、使い慣れた関数が
無くなっているのはちょっと寂しい。
(matlabにはあるのに)
0194名無しさん@お腹いっぱい。
2011/10/24(月) 20:16:09.57ないでしょう。たしかMaintainer が最近変わったようなので。
0195名無しさん@お腹いっぱい。
2011/10/24(月) 21:27:34.49tf2ssはssでイケルっぽい
0196octave for windows メモの筆者
2011/10/27(木) 07:58:32.39http://octave.1599824.n4.nabble.com/Mingw-Octave-3-4-3-binaries-for-testing-on-windows-Updated-td3942303.html
0197名無しさん@お腹いっぱい。
2011/10/29(土) 15:09:02.44communicationsを使いたいので、どなたか情報を持ってる方お願いします
pkg install signal image optim miscellaneous struct specfun -auto -forge -global (これはOK)
pkg install communications -auto -forge -global
ov-galois.o:C:\Users\hoge\AppData\Local\Temp\oct-2\communications\src/ov-galois.cc:556: undefined reference to `H5Gcreate'
ov-galois.o:C:\Users\hoge\AppData\Local\Temp\oct-2\communications\src/ov-galois.cc:567: undefined reference to `H5Screate_simple'
(snip)
collect2: ld returned 1 exit status
make: *** [gf.oct] Error 1
'make' returned the following error: make: Entering directory `/tmp/oct-2/communications/src'
(snip)
make: Leaving directory `/tmp/oct-2/communications/src'
error: called from `pkg>configure_make' in file C:\Octave\Octave3.4.3_gcc4.5.2\share\octave\3.4.3\m\pkg\pkg.m near line
1339, column 9
error: called from:
error: C:\Octave\Octave3.4.3_gcc4.5.2\share\octave\3.4.3\m\pkg\pkg.m at line 790, column 5
error: C:\Octave\Octave3.4.3_gcc4.5.2\share\octave\3.4.3\m\pkg\pkg.m at line 361, column 9
0198名無しさん@お腹いっぱい。
2011/10/30(日) 05:18:24.99回線が細いので確認できませんが,
Octave3.4.3_gcc4.5.2_20111025.7zにくわえて
Octave3.4.3_gcc4.5.2_pkgs_20111026.7zもいれて
pkg rebuild -auto
でいけませんか。
不要なものはpkg uninstallで消す。
Octave3.4.3_gcc4.5.2_pkgs_20111026.7zにすでにoctave-forgeは入っていて,
それを再認識させるには pkg installでなく,pkg rebuildを使います。
0199名無しさん@お腹いっぱい。
2011/10/31(月) 01:21:57.38すみません、最初にpkg rebuild -autoしたのにどうしてもダメだと思ってましたが
octaveの再起動が必要なことに今の今まで気づいてませんでした;;
どうもお騒がせしました。
0200名無しさん@お腹いっぱい。
2011/12/02(金) 10:02:30.70http://freemat.sourceforge.net/
Octave互換モードも出来たらしいです
FreeMATとOctaveを統合してはどうかという話もありますがはたして
0201octave for windows メモの筆者
2011/12/03(土) 10:38:58.08情報ありがとうございます。確かにOctave Integrationとありますね。
OctaveのMLでは,なにも話しは出ていませんが,どうなんでしょうね。
Octave MLでは3.6のリリースに向けて議論がなされています。
GUIも開発されつつあります。
0202octave for windows メモの筆者
2011/12/03(土) 20:10:07.47Octave のMLで情報を流してみました
http://octave.1599824.n4.nabble.com/FYI-FreeMat-4-1-includes-Octavee-Integration-td4151738.html
レスポンスがどうなるかですね。
0203名無しさん@お腹いっぱい。
2011/12/04(日) 10:21:08.63G=1/(1+0.1*s)
bode(G)
みたいな事はできるんですかね?
Octaveは最新版でやっと出来るようになったみたいですが。
0204:octave for windows メモの筆者
2011/12/05(月) 07:09:35.32だそうです。
http://octave.1599824.n4.nabble.com/control-2-2-2-released-in-package-forum-please-upload-td4157808.html
http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/main/control/NEWS?revision=9260&view=markup
0205:octave for windows メモの筆者
2011/12/08(木) 07:03:41.15http://octave.1599824.n4.nabble.com/control-2-2-3-released-in-package-forum-please-upload-td4169495.html
[2]
http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/main/control/NEWS?revision=9303&view=markup
0206octave for windows メモの筆者
2011/12/09(金) 12:18:21.65されました。
https://sourceforge.net/projects/octave/files/Octave_Windows%20-%20MinGW/Octave%203.4.3%20for%20Windows%20MinGW%20Installer/
0207名無しさん@お腹いっぱい。
2011/12/10(土) 02:50:59.58おぉお。
ついに!
ありがとうございます
0208octave for windows メモの筆者
2011/12/10(土) 17:54:33.57今回のバイナリーには,インストーラーがありません。そのため上記のページに
詳しい解説とインストール方法が記載されています。英語なので,拙Webページに自分の
改定を少し加えた翻訳の解説とインストール方法を記載しましたので,ご利用
ください。
http://www.tatsuromatsuoka.com/octave/jpn/OctaveWinMemo.html#111210
0209名無しさん@お腹いっぱい。
2011/12/11(日) 23:57:09.22初期設定ファイルいじらずに、初めて起動した。
startxからoctave起動して、簡単な計算とかはできるんだけど
グラフがまったく出力されない。↓こんなのでる。
gnuplotにパス通してないから?(´・ω・`)
octave:1> x=[0,0.2,0.4]
x =
0.00000 0.20000 0.40000
octave:2> plot(x,sin(x))
78 [main] octave-3.4.2 2720 exception::handle: Exception: STATUS_ACCESS_VIOLATION
1712 [main] octave-3.4.2 2720 open_stackdumpfile: Dumping stack trace to octave-3.4.2.exe.stackdump
error: popen2: popen2 (child): unable to start process -- Bad address
error: called from:
error: /usr/share/octave/3.4.2/m/plot/__gnuplot_open_stream__.m at line 30, column 44
error: /usr/share/octave/3.4.2/m/plot/__gnuplot_drawnow__.m at line 72, column 19
error: Invalid call to strcat. Correct usage is:
-- Function File: strcat (S1, S2, ...)
error: called from:
error: /usr/share/octave/3.4.2/m/help/print_usage.m at line 87, column 5
error: /usr/share/octave/3.4.2/m/strings/strcat.m at line 92, column 5
error: /usr/share/octave/3.4.2/m/plot/__gnuplot_get_var__.m at line 113, column 11
error: /usr/share/octave/3.4.2/m/plot/__go_draw_axes__.m at line 40, column 18
error: /usr/share/octave/3.4.2/m/plot/__go_draw_figure__.m at line 167, column 19
error: /usr/share/octave/3.4.2/m/plot/__gnuplot_drawnow__.m at line 86, column 5
0210209
2011/12/12(月) 00:01:14.96cygwinのダウングレードで解決されていましたが、
ダウングレードはするつもりがないので相性がよくなるまで待ちます。
0211octave for windows メモの筆者
2011/12/12(月) 05:14:49.53CygwinのMLを見ているとOctaveとの相性の悪い1.7.9に代わって1.7.10が
テストリリースされているようです。まだ,試していませんが問題が解決して
いることを願います。
■ このスレッドは過去ログ倉庫に格納されています