データ解析ツールoctaveを語ろう Part 2
■ このスレッドは過去ログ倉庫に格納されています
知る人ぞ知る強力なデータ解析ツール octave ...
unixを科学研究で使っている香具師には非常に心強い味方のはずだ。
matlab互換を主張しながら、微妙にバージョンアップを続ける
octaveについて語ろう。
そのPart 2です
前スレ
データ解析ツールoctaveを語ろう
http://pc12.2ch.net/test/read.cgi/unix/1086016412/ t=0:dt:t;
octaveにかけると、この文でエラーになるけど?
>>290
上のコードはこれ単独では動きません。
動かすには,tとdtの設定のほかにも,xx1とxx2の定義が必要ですので。
できれば,単独で動いて動作確認できるコードをあげていただけると
答えがつきやすいと思います。
ところで
t=0:dt:t; はループの外に出すでしょう。ループの中にいれるのは,
間違いでないけど意味が不明です。 やってみました。たしかにループでなく描画するとグラフかけますね。
バグかもしれません。
Octaveのバージョン,Windows,Mac,Linuxなどお知らせください。 >>
おっと, windows版octave 3.4.3で試してみました。 >>287
よくコードを読むと
t=0:dt:t;
がfor loopの中に入っているためn=2からは
区間ではなくなってますね。
t=0:dt:t
をloopの外に出すと正しく動くようです。
以上
Octave team で開発中のOctave-GUIの現在のスナップショット
http://www.geocities.co.jp/tmoctwin/files/OctaveGUI0.8.5.html
Windows上のスナップショットですが,Ubuntuでもほぼ同じイメージでした。 >>213
bode線図でこけるのは,control packageのせいではではなく,
fltk graphic_toolkit が対数軸でのマウスオペレーションがこける
ためのようです。
https://savannah.gnu.org/bugs/?35292
>>296
Scilabも5.4.0-alphaからコマンドウインドウの左右に
補助ウインドウが出るようになりました
ただしScilabは左が、変数&履歴ウィンドウ、右がファイルブラウザ
まあでもド素人にMatlab系のプログラミング技術を教えるだけなら
FreeMATでいいかもしれないです
インストールが簡単だし、dos画面じゃないし、
グラフもgnuplotとかではなくてネイティブだし >>298
FreeMATって、コントロールパックとかあるんでしたっけ?
伝達関数とか、それのインパルス応答とか、ボード線図かくやつ。
>>299
無いですね
tfもzpもstepもbodeも
制御をやる目的ならscilabの方がいいと思います
scilabはmatlabから入ると流儀がわからないかもしれませんが
慣れればどってことないです
octaveは限界が高いですけど
初心者がやるにはハードルも高いと思います
dos画面だけってのは初心者は面くらうでしょう
それで電卓代わりに使う目的ならfreematで十分という話です >>300
OctaveはもともとUnix由来のソフトですし,Windowsの開発陣のリソースは実に
薄い。UnixではTerminalでのソフトはまだ一般的ですし,UnixのTerminalは
コマンドプロンプトよりは使いやすい。
#Windows 2000からはコマンドプロンプトが正しい名称であって
#ドスプロンプトではないです。まあ,それのほうがつうじますが。 >>301 ちょっと舌足らずした。
とはいうもののUnixでもGUIのご時世なので,Octave本体もやっと
真剣にGUIインターフェースをつくりはじめています。
ちとお待ちください。 遅ればせながら、3.6.0のNEWSを読んでみた。
ぱっと目についた新機能は以下。
1.バイナリ演算子のブロードキャスト
ex.) rv=(1:5)'、M=magic(5)の時、repmat(rv,1,5).*Mがrv.*Mと書ける
2.プロファイラの実装
profile, profshow, profexplore
3.parfor(for文の並列処理)のサポート
但し、内部動作はforのまま
parfor、一瞬期待したのに…! >>303
Release 3.6.0 still not "official"
http://octave.1599824.n4.nabble.com/Release-3-6-0-still-not-quot-official-quot-td4345497.html
で3.6.1がでるようです。qhullのルーチンがごく最近改定されたのでちょうど
いいかもです。Windows版のビルドもATLASのバージョンを変えてテストが
終わりつつあるのでこれもいいかもです。
parforですか。たしかにあるといいと思いますが今の開発陣のマンパワー
だとどうかなという気がします。そこらへんに強い人が開発陣に参戦される
ことを期待したいのですが。 octaveってデフォルトで上三角の連立方程式 U x = y を高速に解けないの?
ちょっと使ってみようと思ってググったら2003年の記事出てきたんだけど、
http://www.math.meiji.ac.jp/~mk/labo/text/a-remark-lu.pdf
これ未だにfixされてない? >>308
もしかして、試してすらいない?
うちの環境だとこんな感じ。
Octave 3.2.4, Linux 2.6.32, Core2Duo 1.8GHz
octave:1> lutest(5000);
P の掛け算の計算時間
Elapsed time is 0.0580444 seconds.
L による割り算の計算時間
Elapsed time is 0.0310717 seconds.
U による割り算の計算時間
Elapsed time is 0.0300882 seconds.
leftdivu() による割り算の計算時間
Elapsed time is 0.843658 seconds.
精度
ans = 1.1294e-06
ans = 1.1197e-06
※実際は100回計算してる。上の時間は平均値 >>309
試してというか、インストールすらまだしてないw
ちょっとoctave使ってみようかな、ありがとう 久々です
少し訳の分からないエラーが出たので質問したいのですが…
今サクラエディタ上で次のようなプログラムを作ってました
function dx = f(x,t)
dx = 1/(1+t^2);
end
t = linspace(0,10,101);
x = lsode("f",1,t);
因みにプログラムの内容は微分方程式 X' = 1/(1+t^2)をlsodeを用いて解くというものです
コレをコンパイラしたところ以下のようなエラーが出てしまいます
warning: function name `f' does not agree with function file name (filename)
parse error near line 5 of file (filename)
syntax error
>>> t = linspace(0,10,101);
error: `t' undefined near line 2 column 12
error: called from:
error: (filename)
こんな感じのエラーでした
しかし窓でプログラムを制作した場合は何故かエラーなしでグラフを表示することができました
何でこんなエラーが出たのでしょうか?
^ >>311
今サクラエディタ上で次のようなプログラムを作ってました
というのは,以下の内容を含むmファイルを作成して(例えばfoo.m)
function dx = f(x,t)
dx = 1/(1+t^2);
end
t = linspace(0,10,101);
#**********:
Octave のプロンプトからfooと打ったということでしょうか。
Octaveのmファイルには,スクリプトmファイルと関数mファイルがある。
Octaveはfunctionで始まるmファイルは関数mファイルと考える。
上の例は関数定義のあとにlsodeがあり,明らかに関数mファイルではない。
したがって上のスクリプトは間違いである。
warning: function name `f' does not agree with function file name (filename)
は,関数mファイルは関数名とファイル名が一致しないといけないのでたwarning.
>>311 >>312
上のスクリプトをスクリプトmファイルと認識させたいならfunctionキーワードの
前に命令を入れる。例えば
1;
function dx = f(x,t)
dx = 1/(1+t^2);
end
1;は無意味な命令だがそのおかげで,octaveはこのファイルをスクリプトm
ファイルと認識できる。
>>313
解決しました!
ありがとうございます! 流石に課題丸投げは行けないと思うが、悩みに悩んだ結果積んでしまったので教えてください
ttp://loda.jp/subject_2ch/?id=762
これが課題の内容(pdf形式)です
只今小問2に関するプログラムを制作してるのですが、どうしても等高線グラフができません
一応原因はある程度把握してますが(ip(k,n)に関して、kが整数ではないからエラーがでる)それに変わるプログラムが分からず…
以下に小問2に関するプログラムを載せますので、どこがどう違うのかを指摘してくれれば有難いです
1;
function dx = f(x,t,n1,k1)
dx = -k1*x^n1;
endfunction
t = (0:1:300);
x0 = 10;
for k = 10^-9 : 0.1 : 1
for n = 1 : 5
x = lsode(@(x)f(x,t,n,k),x0,t);
ip(k,n) = (x(21) - 8)^2 + (x(41) - 6)^2 + (x(61) - 5)^2 + (x(121) - 3)^2 + (x(181) - 2)^2 + (x(301) - 1)^2;
endfor
endfor
contourf(pi) >>315
ttp://loda.jp/subject_2ch/?id=762
がダウンロードできないので,もとの問題についてはわかりませんが,
ip(k,n) = (x(21) - 8)^2 + (x(41) - 6)^2 + (x(61) - 5)^2 + (x(121) - 3)^2 + (x(181) - 2)^2 + (x(301) - 1)^2;
はkが正の整数かロジカルでないといけないので,こういう書き方は許されません。 >>316
(ip(k,n)に関して、kが整数ではないからエラーがでる)って書いてありましたね。
すみません。 >>315
1;
function dx = f(x,t,n1,k1)
dx = -k1*x^n1;
endfunction
t = (0:1:300);
x0 = 10;
k=1e-9;
for m = 1:10
for n = 1 : 5
x = lsode(@(x)f(x,t,n,k),x0,t);
ip(m,n) = (x(21) - 8)^2 + (x(41) - 6)^2 + (x(61) - 5)^2 + (x(121) - 3)^2 + (x(181) - 2)^2 + (x(301) - 1)^2;
k=k+0.1;
endfor
endfor
contourf(ip)
は一応等高線はでるが,目指しているものと同じかわかりません。 >>318
contourf(ip)
は
contourf(1:5, 1e-9:0.1:1, ip)
か
contourf(1e-9:0.1:1, 1:5,ip')
にすればよいかも。 >315-319
要は配列の概念とcontoturfの使い方がわかっていないのかなと思います。
ヘルプを読めばいいのですが,英語ですしね。無理もないかもしれません。
pdfをダウンロードできました。
もう少しいじる必要があると思いますが,基本的にはこれでいいのかな。
あとは自力で頑張ってください。 >315-319
要は配列の概念とcontoturfの使い方がわかっていないのかなと思います。
ヘルプを読めばいいのですが,英語ですしね。無理もないかもしれません。
pdfをダウンロードできました。
もう少しいじる必要があると思いますが,基本的にはこれでいいのかな。
課題ですので,あとは自力で頑張ってください。 まだ,公式には発表されていませんが,Michael氏がMSVC版のoctaveの復活に意欲
を見せておられます。さて,どうなるでしょうか。 まだ,公式には発表されていませんが,Michael氏がMSVC版のoctaveの復活に意欲
を見せておられます。さて,どうなるでしょうか。 いきなりの質問ですみません。
2つほど質問があります。
1.2段のワードの形式で論文を書いているのですが、
どうしても、ワードの大きさに縮小してしまうと、メモリどころか
線すらはっきり映りません。これをどう解決すればよいのでしょうか?
2.グラフを描くときに、色ではなく破線や点線はどのようなコードを
打てばよいのでしょうか?
なにとぞよろしくお願いします。特に1番目の質問が深刻です。
>>326
?? プロットした図が縮小すると見えなくなるということでしょうか。
ワードだからWindowsですよね。octave-3.2.4でしょうか。
gnuplotの画面をコピーしてワードに貼り付けているということでしょうか。
私はoctave の図をそのまま使わないので良くわかりませんが,
print コマンドでemfか何かでセーブした図を使ったほうがいいかもしれません。 octave-3.6.0で
1.1
ans = 1.10000000000000
single(1.1)
ans = 1.10000002384186
となります。これってどうなんですか?
どなたか教えて下さい。 >>329
補足するとsingle(単精度)の有効桁は10進に治すと約6-7桁なので
それ以上の桁数の数値についての保証はなく
>>330
の方がおっしゃるように,単精度の範囲では問題ないことになります。 octave 3.6.1-mingwで例えば
text(0.5,0.5,"{\pi}","interpreter","tex")
とやってもTeXでπで書いてくれません。
対処法を教えていただけませんか。
お願いします。 >>333 graphics_toolkit gnuplot
でなんとかなりませんか?
octave 3.6.1-mingwはgraphics_toolkitはfltkがデフォで,texはまだfltkでは
対応していないと思うので。 最近はJuliaというのが出てるらしいです
http://julialang.org/ >> 335
へー…。
そういえば、OctaveにもJIT Compilerを実装するプロジェクトが、
今年のGSoCに登録されてました。
これは、期待してもいいんでしょうか…
http://jit-octave.blogspot.jp/ SourceForgeに登録されてるWindowsバイナリの3.2.4、3.4.3、3.6.1
(MinGW版、いずれもクリーンインストール)を、現在XPで使用中
なのですが、3.2.4と比較して3.4.3、3.6.1の起動がやたらと遅くなって
おります(30secくらい?CPU100%)。
どなたか、回避策をご存知の方とかいらっしゃいませんでしょうか? >>337
全く同じ事で悩んでいたけど、
windows7/64bit+Corei7+16GBRAMに買い換えたら起動が速くなったよ
>>338
おぉ、やはり他の環境でも再現することがあるのですね。
ぐぐっても何も出てこないので、困ってました。
時間ができたら、起動シーケンスを追っかけてみることにします。Thx! >>337 >>338
MinGW版はXPではやたらと起動が遅くなるようです。
MSVC版だとそれほど遅くならないようです。 >>340
そうなんですか…情報感謝。
ただ、MSVC版は開発環境が揃ってないんで、自作octが
コンパイルできないのがネックです。
コンパイラだけでなく、dllとかもぼろぼろ抜けてるような… >>341
>コンパイラだけでなく、dllとかもぼろぼろ抜けてるような…
それはこまったことですね。 337の件、追加でご報告。
どうも、時間が掛かってるのはoctaveのmain関数が呼ばれる前で、
main関数に入ってしまえばコンソールにアクセスできるまで
1秒もかかってません。
dllのロードが重いのかとrebase.exeとか使ってみましたが、効果なし。
私にはここから先のアプローチが思いつかないのですが、どなたか
ヒントお願いします… octave-3.6.2 mingw版ですが、peaksなどなんでも良いのですがグラフを書いてもちゃんと描いてくれません。refreshすると描いてくれます。以前にもこんなことありましたが対処法はありますか。 345の件
graphics_toolkit("gnuplot")
putenv("GNUTERM","wxt")
でとりあえず希望どおりに動きました。 345の続き
putenv("GNUTERM","wxt")の状態でpeaksなどとしてグラフを描くと、グラフは
ちゃんと描いてくれますがwindowsのターミナルが大きくなってしまいます。
どなたか教えてくれませんか。
最近、書き込みが少なくて寂しいです。 答えてあげたいけど、Linux版を使ってるしグラフも余り書かないから答えてあげられない・・・ > 男性は聯合ニュースの取材に対し、
暴行を受けている間も警察は積極的に止めようとせず、
男らは韓国人を差別する暴言を吐いたという。
警察はチョンの見方ですから有り得ません。
日本人にどうしても有事を惹起せしめたい欧米軍産複合体の意図じゃん
Congratulations, Max Brister!
ttp://jit-octave.blogspot.jp/
Octave用のJIT Compilerに、とりあえず一通りの機能が揃ったらしい!
速度も期待を裏切らず、例えば下のコードが、34sec->0.1secになるとか。
result = 0;
for ii = 0:1e-7:1
result += inc * (1/3 * ii * ii);
end
Octave本家にマージもされたらしく、次回のリリースにexperimentalとして含まれるという話。
ソースはこちら。
ttp://inversethought.com/hg/octave-max
誰か試してみません? Windows(MSYS)版を使ってますが、ファイル選択ダイアログを表示してパスを
取得できる関数、あるいはそういう機能が使えるようになるパッケージって
ないもんでしょうか? >>351
使ったことないのでよくはわからないが,uigetfile なるものがあるらしい。
ttp://www.gnu.org/software/octave/doc/interpreter/I_002fO-Dialogs.html#I_002fO-Dialogs おぉ、望みどおりのことができました。
GTKなのか見た目はショボいですが、機能的には十分です。 画像データを読み込んで行列にしたりそれを表示したりできますが、
この行列データに対して直線や円を描画する関数とかないですか? >>354
それは表示した状態に書き込むのか,
それとも画像の実体(行列)に書き込むのか? 行列に対してです。
一応Bresenhamのアルゴリズムとか調べてみましたけど、既に実装
されているものがあればそっちを使いたいなぁと。 そういえばScilab-5.4.0がβ3まで来ましたが
xcosが不安定で使い物にならないですね
5.3.3は安定なんですけど、AFFICH_mがバグって使えない(実行中に数値を表示しない) Scilabが5.4.0のβ3が不安定なのを認めてひっこめましたね
原因が特定できたらしいので
リリース時には急に落ちる事はなくなりそうです MatlabのGUIを自宅でやりたいんだけどOctaveでできますか? >>360
ありがとうございます
では、他のフリーソフトで行うことはできませんか?
どうしても自宅でやりたいんですが・・・ >>361
SIMULINKをやりたいってことですかい? imcropがoctaveにはないけどトリミングはどうすればいいの? leasqrを使って、2変数関数のフィッティングをやりたいんですが、
どう書けばいいですか?
http://octave.sourceforge.net/optim/function/leasqr.html
によると、
x = vector or matrix of independent variables.
と、独立変数がmatrixでもいいように書いてあるので、
2変数でも使えるんじゃないかと思っています。
試しに、xを2次元で取って、それぞれ-1〜1の整数を代入してやると、
推定対象の関数f(x,p)の中で、x=(-1,0,1,-1,0,1)として認識されています。
その先、関数内で2つの独立変数を式にどう表せばいいのかが分かりません。 前のスレから
256 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2006/06/27(火) 20:52:22
>>253
octave-forge から持ってきて、leasqrdemo.m をにらめっこしながら、
ようやく動かすことができました。
x=[1; 2; 3; 4; 5];
y=[1; 3; 6; 7; 8];
function ret=F(x,p)
ret = p(1)*x.*x + p(2)*x + p(3);
endfunction
pin=[1 1 1];
[f,p]=leasqr(x,y,pin,"F")
まず、xとyを列ベクトル標記に変え、さらにx*xの計算のところを
x.*xに変えました。これで、動かし方を理解できました。
どうもありがとうございます。 [f,p]=leasqr(x,y,pin,"F")と、「x*x→x.*x」ですね。
ありがとうございました。
試してみます(月曜にならないとためせないんですが)。 Octave-3.6.2-vs2010-setup
って、ライブラリもインストールできるのはいいんですが、
pkg rebuild -auto
ってやってもロード出来ない(再起動しても、autoLoadされていない)
のはしょうがないんですかね?
(pkg load all って打てば大丈夫だから、スタートアップに入れておけばいいんだけどさ) >>368 >>369
・・・って、思ったら「前のスレから256」は、独立変数xが1つの場合ですよね?
知りたいのは、例えば独立変数xが2種類(x1とx2とします)あって、
(x1,x2)の組に対して観測値yが1つあり、
ret = p(1)*x1 + p(2)*x2 + p(3)
みたいな場合に、x1とx2のそれぞれの取る値をmatrix xに入れた上で、
ret = F(x,p)
の式で、matrix xの中のx1に相当する値とx2に相当する値を
どう表現すればいいかってことなんですが・・・。
具体的には、画像座標(x,y)について、各整数画像座標位置に対して与えられる
とある値(例えば標高値)を関数でフィッティングしたいんです。 参考になりますかどうか。
あと、複素数で表すことも出来ます。
function z = f1(x,p)
x0=p(1); y0=p(2);
z = exp( -( (x(:,1)-x0).^2 + (x(:,2)-y0).^2 )/2 );
endfunction
% ns = xpoints*ypoints;
% z(ns,1), x(ns,1) = x of data, x(ns,2) = y of data
% p(1, parameters)
x0 = 0.1; y0 = 0.2;
xt = [-4:0.5:4]; yt = [-4:0.5:4];
[xm, ym] = meshgrid(xt, yt);
zm = exp(- ((xm-x0).^2+(ym-y0).^2)/2 );
plot3 (xm, ym, zm, "linestyle","none","marker","+");
input("type enter","s");
x = [xm(:),ym(:)]; z = zm(:);
pin = [0.3, 0.4];
[f,p,cvg,iter] = leasqr(x,z,pin,@f1);
p ちょっと板違いかもしれませんが…
WindowsでC++からOctaveを呼ぶ場合、cygwinかMSYSのgccでしか使えないんでしょうか?
VC++で通常のWindowsアプリから使える方法はあるでしょうか? octaveを使おうとインストールしたのですが、エラーが出てgnuplotが出ません。
error: feval: function `unimplemented' not found
と出ます。どうすればいいのでしょうか。 >>378
Octaveのバージョンとプラットフォーム(WIndows,Mac, Ubuntu)などを明示してください >>379
バージョンは3.6.1で、windowsです。 >>380
MSVC版ですか? MinGW版ですか?
名前にスペースのあるフォルダ (C:\Program Files 等)にインストールして
いませんか? >>381
申し訳ないのですが、自己解決しました。
ありがとうございました。 Windows VS2010版Octave 3.6.2のGUIで
実行するたびにコマンドラインが右にずれるのはなぜでしょうか
日本語ロケールがいけないのかな
ちなみにスタート直後にmoreがかかってるので
more off した方がいいです >>385 試しに
system("chcp 437")
としてみてください。 >>386
カーソル位置はずれるけど、
shift-jis(932)
よりはましですね
英語版Windowsならまともに動くのかもね >>387
>カーソル位置はずれるけど、
Fileメニューのsetteingでterminalタブでfontを
Lucida Consoleに選んて,chcp 437をかけると少しましになります。 Octave-3.7.2+/Windows [VS2010] available
ttp://octave.1599824.n4.nabble.com/Octave-3-7-2-Windows-VS2010-available-td4650194.html >>388
本当だ、すげ!
使いものにならないと思ってたのが見違えた ■ このスレッドは過去ログ倉庫に格納されています