データ解析ツールoctaveを語ろうat UNIX
データ解析ツールoctaveを語ろう - 暇つぶし2ch605:名無しさん@お腹いっぱい。
08/08/16 10:59:45
>>596
なんとなくわかった事の覚え書き(チラシの裏みたいなもの)

1) そのnet2comを入れて、ノート内蔵モデムのCOM3をlocalhost:8003にしてStartする
2) octave のコマンドラインから次の順番でコマンドを入れる
octave:1> more off
sock1 = 1252
octave:2> sock1=socket(AF_INET,SOCK_STREAM,0)
octave:3> server_info=struct('addr','localhost','port',8003)
server_info =
{
addr = localhost
port = 8003
}
octave:4> rc=connect(sock1,server_info)
rc = 0
octave:5> [msg_s,len_s]=recv(sock1,255);
octave:6> msg='ATI0';
octave:7> msg(5)=13;
octave:8> rc=send(sock1,msg)
rc = 5
octave:9> [msg_s,len_s]=recv(sock1,20)
msg_s =
13 10 53 54 48 48 48 13 10 79 75 13 10
len_s = 13
octave:10> num2str(msg_s,'%c')
ans =
56000
octave:11> disconnect(sock1)
rc = 0

606:octave for windowsメモの筆者
08/08/18 12:47:23
>>605 なるほど勘違いしていました。すねわち,forgeにsocket機能がある
からNet2comを使用して,socket機能で通信しようというわけですね。
自分の書いたレスが恥ずかしい。 まっ,いっか勉強になったし。ありがとう
ございます。


607:名無しさん@お腹いっぱい。
08/08/18 19:13:18
>>606
ここの一番下の方にOctaveでのSocketの使用例があります
URLリンク(www.nabble.com)
(しかしドキュメント少なすぎ)

昔、Parallel Octaveをやってる人がいましたが
あれは独自実装のSocket経由で2台以上のPCのOctaveを接続して
1台をlistenで計算サーバーにさせて、もう一台からsendでデータを送って、
recvで計算結果を得るといみたいな事をやってるようでした。
サーバーが10個ぐらいあれば、データ転送のオーバーヘッドがあるにせよ
10個のパラメータを1度に試せるわけで、特定的な問題なら
一台で解く場合よりも速くなるのでしょう。

608:octave for windowsメモの筆者
08/08/19 15:18:25
URLリンク(www.nabble.com)
のようにmaintainers向けのOctave-3.0.2がリリースされました。
まもなく,公式ページにもソースが載るでしょう。

また,新しいforgeも準備されつつあります。
これも,ここ1,2週間のうちに出ると思います。



609:名無しさん@お腹いっぱい。
08/08/19 22:42:30
>>599,600
有難うございます。
分かりました。確かにawkや c + gnuplot は便利ですよね。
最後に一つだけ質問:
octave だとdataから簡単にx,yzのデータから3D plot ができます。
ところが、gnuplotを用いるとデータの途中に適宜空行を入れないと
いけないのですが皆さんどのような工夫をされているのでしょうか?
1.メインプログラムでデータ出力時に空行を適宜入れる。
2.gnuplotで読み込む前に空行を入れる。
3.他の技がある--> ご教示ください。


610:名無しさん@お腹いっぱい。
08/08/20 16:53:10
>>603 です。 >>604様へ
まだ、うまくいきませんが・・・

丁寧な御回答ありがとうございました。

現在は octave workshop を用いて、

付属のメモ帳を使って頑張っています。

611:octave for windowsメモの筆者
08/08/20 18:51:01
>>610 octave workshopはちょっとバグ多いので。
OctaveのGUIのフロントエンドを利用するならQtOctaveがいいですよ。
URLリンク(wiki.octave.org)
から飛んでください。確か表形式の行列入力あった気がします。


612:octave for windowsメモの筆者
08/08/20 18:55:41
>>609
すみません。この板の範囲ではないので,gnuplotには,いい掲示板があるのでそこいって聞いてください。

Gnuplot Q&A 掲示板
URLリンク(ayapin.film.s.dendai.ac.jp)


613:octave for windowsメモの筆者
08/08/22 16:12:12
octave 3.0.2のソースが正式にリリースされました。
新しいForgeもまもなくでるので,
次のバイナリリリースは3.0.2+新forgeとなるでしょう。

URLリンク(www.gnu.org)


614:octave for windowsメモの筆者
08/08/25 08:48:37
新しいOctave-Forgeがリリースされました。
URLリンク(www-old.cae.wisc.edu)

そのうち各種バイナリも整備されるでしょう。

615:名無しさん@お腹いっぱい。
08/08/25 20:50:52
いつも乙です >> 中の人

616:名無しさん@お腹いっぱい。
08/08/27 00:50:18
FreeBSDのportsがまだ新しくなってないな。
3.0.1のまま

617:octave for windowsメモの筆者
08/08/27 12:28:38
>>615 こちらこそ乙です。


618:octave for windowsメモの筆者
08/08/27 12:35:06
>>616 もうちょっと待ってくださいや。Forgeが出たばっかしだし。
3.0.xのシリーズの本体はminor changeなので問題ないけど,
Forgeは新しいのがでると新しいパッケージがでて対応大変なんだよ。
Maintainerの苦労もわかってやって下せー。
おねげーしますだ。

619:octave for windowsメモの筆者
08/08/28 09:20:12
うーん。cygwinでForgeやってるけど前回できたoctgprがうまくビルドできん。
前のバージョンならうまくいくんだけど。

620:octave for windowsメモの筆者
08/08/29 11:18:04
>>619 自己レスです。Jaroslav Hajek氏(最近はこの方が,3.0.xの主たる
コードをかいてます。JWEさんは,3.1ブランチのコードに専念されてます)が
ミスがあったので,SVNにあげたと連絡ありで解決しました。
Cygwin gcc-dw2 版3.0.2+forge週明けにはリリースします。

621:octave for windowsメモの筆者
08/09/01 17:41:14
Octave 3.0.2 + forge 20080831 on cygwin (by gcc-dw2)をリリースしました。

URLリンク(www.tatsuromatsuoka.com)

です。

622:名無しさん@お腹いっぱい。
08/09/02 02:51:50
>621
あんたみたいになるにはc言語を勉強するの?

623:octave for windowsメモの筆者
08/09/02 09:15:17
>>602 Cもそうですが,それよりもUNIXの開発環境の知識が問われます。
でも,一番肝心なのは外国人とメーリングリストでやり取りする度胸ですね。

624:octave for windowsメモの筆者
08/09/02 09:17:27
>>623 >>602>>622の間違いです。すいません。

625:名無しさん@お腹いっぱい。
08/09/04 11:03:54
初心者ですが、質問させてください。
インパルス表示をさせようと、
プロット時に"^"を入力したのですが、
線ではなくなぜか△のマークが表示されます。
「それまでのプログラムに問題があるのかな。」
と、思い打ち直しましたが結局同じ症状でした。
違う簡単な式などをプロットしても同じ状況です。
この状況は打開できるでしょうか。
また、ほかにインパルス表示をさせる方法がありますでしょうか。
よろしくお願いいたします。

ちなみにOctaveのバージョンは3.0.1になります。

626:octave for windowsメモの筆者
08/09/04 18:27:27
Octave 3.0.2 + forge 20080831 on cygwin (by gcc-dw2)の
パッケージミスの修正とforgeのftp-1.0.1をビルドしたので
これをあわせたパッケージと差分をアップロードしてます。

URLリンク(www.tatsuromatsuoka.com)

627:octave for windowsメモの筆者
08/09/04 18:32:28
>>625 すみません。MSVC 版ならとGraphic backendがgnuplotかjhandleか
他のものならば,OSの種類とかgnuplotのバージョンとか明記しないと解答はつかないと思います。


628:625
08/09/04 22:46:19
>>627
ご丁寧にありがとうございます。
聞く側としての初歩的な所を忘れていました。
現在、OctaveはMSVC版3.0.1を使用。
graphic backendはgnuplotで、バージョンは4.2になります。
ちなみにOSはXPのSP3です。

上記のバージョンのoctaveにて、
どうすればgnuplotで言う所の、
「plot ~with impulse」
の様な表示が出来るのでしょうか。

以前使っていたバージョン(windows版octave2.173)では、
plot (~,"^")と入力をしたら出来ていたのですが、
現在のバージョンで同様に入力をすると、
三角マークが列をなしてしまいました。

ご教授、よろしくお願いいたします。

629:octave for windowsメモの筆者
08/09/05 09:02:23
>>628 ウーム。どうやらバグですな。
help plotで表示すると

`^'
Set impulses plot style.
ってでてくるし,Cygwin版でも同じ症状ですね。
いまから,本家に報告します。


630:octave for windowsメモの筆者
08/09/05 09:17:48
>>629

URLリンク(www-old.cae.wisc.edu)

本家bug@octave,orgにあげときました。お待ちください。


631:octave for windowsメモの筆者
08/09/05 10:31:06
>>630
どうもhelp,manualのミスでstemというのを使うらしい。

URLリンク(www-old.cae.wisc.edu)

詳しくは,help stemかマニュアルを見てください。


632:名無しさん@お腹いっぱい。
08/09/05 21:55:26
>>631
先ほどstemで実行をしてみた所、
エラーこそ出ますが、なんとか表示されました。
ここの辺りは自分のプログラムと、helpを参照しながら
解消していこうと思います。ありがとうございました^^

633:名無しさん@お腹いっぱい。
08/09/06 18:56:48
良かったね^^

634:octave for windowsメモの筆者
08/09/16 12:57:12
gcc-4.3.2-1(dw2 例外処理)によるcygwin octave3.0.2-2が
Marco Atzeriさんのサイトより手に入るそうです。
私もまだ試していません。

URLリンク(matzeri.altervista.org)

635:octave for windowsメモの筆者
08/09/16 15:26:46
>>634
testしました。動作確認しました。
URLリンク(www-old.cae.wisc.edu)

ということで私のgcc-3.4.4-dw2によるoctaveの配布は役割を終えました。
まもなくページは封鎖します。
少し寂しい気もしますが,Cygwin上のOctaveはこれですっきりするでしょう。
ただし,gnuplotは4.3(cvs)でないとマウスズームが使えません。
したがって,gnuplotは4.3(cvs)を配布することにしました。

URLリンク(www.tatsuromatsuoka.com)

636:octave for windowsメモの筆者
08/09/17 16:12:00
うーん。cygwin版は3.0.2版は出たのですが,
msvc版は3.0.2はMichaelさんはスキップするのかな?
BenjaminさんのMINGW版は,いつになったら出るんだろう。
彼は慎重派だからな。
で, Windows Native版3.0.2は,どうなるんだろう
と思っています。

それでmingwの3.0.2のあるんですが,BenjaminさんのMINGW版がでるんならと
出していませんが,興味のあるかたいますか。一人でもいたら,私のページ
にあげますが。


637:octave for windowsメモの筆者
08/09/18 12:10:15
>>634
Octave 3.0.2-2 on cygwinがcygwin setupからでもinstall
できるようになりました。

URLリンク(cygwin.com)

でもforge20080831-2はインストールできないので手動となります。


638:octave for windowsメモの筆者
08/09/18 14:37:00
>>637 なんかHangしますね。しばらくは手動でインストールしてください。
一応報告したので解決すると思いますので手動インストールができない方は
対応するまでお待ちください。

639:octave for windowsメモの筆者
08/09/19 17:53:15
>>636
Michaelさんに確認したところ,MSVC版のoctaveは3.0.2はスキップ
するそうです。

あまり時間をおかずに Jaroslavさんが3.0.3を出しそうないきおいですからね。

640:octave for windowsメモの筆者
08/09/22 08:47:48
>>638 一部あちらのミスもありましたが,私の思い違いでした。
experimental versionha expのボタンをアクティブにしてインストール
するそうです。

URLリンク(cygwin.com)

641:名無しさん@お腹いっぱい。
08/09/24 17:49:01
>>640
expボタンを選ばなくても3.0.2-2を選び binところののチェックボタン
(□(四角))をチェックするのを忘れないようにすればいいようです。


642:octave for windowsメモの筆者
08/09/29 09:22:42
maintainers向けに3.0.3のプレリリースがありました。
各maintainerも確認したところです。
ただし,マイナーチェンジなため各バイナリーが出るかは分かりません。
MSVC版は3.0.2をスキップしたため3.0.3の準備をミカエルさんがされている
ようです。


643:名無しさん@お腹いっぱい。
08/09/29 11:24:48
初めて立ち寄りました。

場違いですが、matlabにオイラー法を使えるコマンドはないのでしょうか?

644:octave for windowsメモの筆者
08/09/30 18:35:06
>>643
なぜまたオイラー法が必要なんでしょう。
MATLABには
ODE45などのルンゲクッタ法の発展型の優れた関数があるのに。



以下はOctaveでしか動きませんが,
ODEの解法の原理として講義で使ったものです。
関数を引数として受けるやり方は良く分かりませんが。
% Octave script m file
% Eulerのテスト
1; %dummy
% ****** Definition of a function
function dy=f(y,t); dy=-y; end

% ******* Main script
t0=0; tend=5; N=100; %t0 初期値,tend 範囲の終わり, N 間隔の数(点の数は,N+1)
t=linspace(t0,tend,N+1); % tの配列を定義
dt=(tend-t0)/N; % tの刻み幅
y(1)=1; % yの初期値
%
for n=1:N
y(n+1)=y(n) + f(y(n),t(n))*dt;
end
%
plot(t,exp(-t), "", t, y, "@");


645:名無しさん@お腹いっぱい。
08/10/02 12:10:19
スレリンク(tech板:123番)

646:名無しさん@お腹いっぱい。
08/10/02 12:46:32
あれなんかリンク貼ってある。
>>645じゃないですけど、リンク先の質問したものです。
インテルコンパイラでのコンパイルはどのように行うのでしょうか?

647:octave for windowsメモの筆者
08/10/02 13:44:52
自分でOctaveをintel complierでビルドする必要があります。
そういう方はLinux userには多いですね。

本家のMLで検索して調べてください。(Nabbleサーチが便利です。)

日本でもやっている方はいるとおもうんですが,ここを見ておられるかと
いうとそういう猛者の方は英語のMLを参考にされていると考えたほうが
いいとおもいます。
がんばってください。


648:646
08/10/02 14:01:01
>>647
"intel compiler"で検索してみたら結構な数がでてきたのでちょっと読んでみます。
アドバイスありがとうございます。

649:octave for windowsメモの筆者
08/10/02 16:40:37
Mingw版の正規版のOctave-3.0.2がリリースされました。

URLリンク(sourceforge.net)

からダウンロードできます。
gnuplotは4.3cvsリリースをpguplotとして使っているようなので
Michaelさんのものと違いマウスズームが効くとおもいます。

週末試してから私のWebには,リリースニュースとしてあげようとおもいます。


650:octave for windowsメモの筆者
08/10/06 08:46:06
Octave 3.0.3 のソースが公開されました

URLリンク(artax.karlin.mff.cuni.cz)

Octave の公式ページには,そのうち公開されるでしょう。基本的にはバグフィックスが中心です。Michael氏はおそらく この3.0.3でMSVC版のUpdateをするのではと踏んでいます。

651:名無しさん@お腹いっぱい。
08/10/07 00:28:21
( ゙゚'ω゚')モマママ…マジで!?

スレリンク(kao板)

652:octave for windowsメモの筆者
08/10/10 18:15:52
>>650
読みどおりMSVC Ver.3.0.3はまもなく出るようです。

URLリンク(sourceforge.net)

653:名無しさん@お腹いっぱい。
08/10/18 00:33:36
スレの皆様に質問があります。

MSVC版を愛用しているものです。
私の目的では32bitだとメモリが少なすぎるように感じています。
64bit windowsではMSVC走りますか?
それよりもunixに移行するのが手っ取り早いのでしょうか。
64bitを使う上で気をつけたほうがいいことなどありましたら
教えてください。
(Matlabを買うというのが一番だとは思うのですが)

654:octave for windowsメモの筆者
08/10/20 08:14:00
octdevスレッドに同様の質問があり,MicahelさんとBenjaminさんが答えてます。

ただし,このスレッドは他のTopicと混じってますので,
Status of Windows 64-bit support? のタイトルの記事を見てください。

自分でコンパイルしろ書いてあります。
LInuxでも64bitでは自分でビルドする必要があると思います。
ただし,自分でビルドする手間は,windowsよりLinuxの方が簡単かとおもいます。



URLリンク(sourceforge.net)

655:船木康博
08/10/20 08:22:56
信濃の国でも伊那方面は、有線でxDSLを最初にやったりさぁ、
無線じゃあ一昔前に妖怪がネット組んでいるのさ。おもしれぇぞ。

656:名無しさん@お腹いっぱい。
08/11/02 19:24:11
>>654

ありがとうございます。急に立て込んでしまって、まだ試せていません。
とりあえずお礼まで。

657:octave初心者
08/11/08 09:50:11
cygwinからoctaveをインストールして、imageパッケージを入れて
画像処理を行いたいのですが、imreadするところで下記エラーが出力されて
画像を読み込むことができません。
(ImageMagickもcygwinからインストールしました)

im=imread('im1.bmp');

convert: unable to open image `/cygwin/tmp/oct-22d688.0.ppm': No such file
or directory.
error: imread: error running ImageMagick's 'convert'
error: evaluating if command near line 113, column 5
error: called from `imread' in file
`/home/tosiyuki/octave/image-1.0.8/imread.m'
error: evaluating assignment expression near line 1, column 5

どなたか解決方法を教えてもらえませんか?

658:octave for windowsメモの筆者
08/11/13 07:59:52
Macroさんに教えてもらいました。

Hi Tatsuro,

it is not a fault of image.

I don't know for wich reason on cygwinthe TMPDIR enviroment is set to C:/CYGWIN/TMP instead of /TMP

see src/sysdep.cc call to cygwin32_conv_to_full_win32_path

Probably is for old compatibility with non cygwin programs, but it confuse cygwin programs likeconvert of ImageMagick.

As workound is possible to

setenv ("TMPDIR","/tmp")
before
im=imread('im1.bmp');


I will try to remove the issue on the next octave cygwin release.

659:659
08/11/22 15:24:37
はじめまして。
windowsVistaで、スタンドアローンoctaveを使おうとしています。
使いたいのは画像処理のpackage内のedge.mです。

image packageをインストールまでしたのですが、
edge("***.jpg", 'canny', [0 7], 1.6);などしても
error: nonmax_supress underined...と言われ、エラー箇所を見ると
bw = nonmax_supress(Es, Eo, thresh(1), thresh(2));とありました。
nonmax_supress()は関数のようですが、これが見あたらないようです。
どうすればいいのでしょうか?
(cannyを使わないでprewittを使うと動作が確認できました。BW = edge(I,'prewitt'))

660:659
08/11/22 15:25:51
UNIX板なのですが、octaveに関する場所がここしかないので、
ここで聞かせていただきました。場所違いでしたらすみません。

661:659
08/11/22 15:33:46
nonmax_supress()はCanny専用の関数のようです。
なぜ読み込まれていない(または組み込まれていない)のでしょう?
URLリンク(octave.sourceforge.net)

662:659
08/11/22 15:48:16
URLリンク(octave.svn.sourceforge.net)
を見るとnonmax_supress()はC++で書かれていて、
それをoctaveで動的に利用できるようです(URLリンク(www.obihiro.ac.jp))。

C++のソースコードは公開されているので、
それをコピーして手動でoctaveでコンパイルして、
nonmax_supress()を持っておけばいいのだと思うのですが。。。

663:octave for windowsメモの筆者
08/11/25 09:34:43
>>659
image packageは自分で使わないのでよく分かりません
つい最近,octave-3.0.3 (MSVC)がでたのでとりあえずそれを使って
試してください。だめならhelp@octave.orgに投稿します。

URLリンク(sourceforge.net)




664:名無しさん@お腹いっぱい。
08/11/25 13:47:04
>>309
Octave3.01では
wavread.m, wavwrite.m は不要
sound.m の中身を一行
system("wavplay \"%s\"", wavefile);
とダブルクォーテーションに変えてやる必要がある。

検索してたどり着く人用コメントでした

665:octave for windowsメモの筆者
08/11/25 18:47:19
>>659
文法違いませんか。
以下のように使うのでは,edgeの第一引数はMxNの
グレースケールの行列のはずでファイル名ではないですよ。

help imread,help edge でhelpを読みましょう。

octave:2> IM=imread('test.jpg');
octave:3> image(IM);
octave:4> BM=edge(IM(:,:,1),'Canny');
octave:5> image(BM);

666:octave for windowsメモの筆者
08/11/25 19:04:32
>>665
すみませんm(__)m。書き方が刺々しいですね。
反省m(__)m。





667:名無しさん@お腹いっぱい。
08/12/06 01:09:30
(;'ー`)FreeBSDのportsにあるoctaveのコンパイルオプションに-ffast-mathつけるのやめてくれ

668:名無しさん@お腹いっぱい。
08/12/06 10:56:47
理由があるならそれ書いて send-pr しれ

669:octave for windowsメモの筆者
08/12/07 14:34:16
>>666 確かに変ですね。いつか本家で聞いてみます。

670:octave for windowsメモの筆者
08/12/07 14:37:22
さっきのは>>667>>668の間違い。m(__)m

671:octave for windowsメモの筆者
08/12/08 13:10:45
>>667 >>668
いま,octaveのMLできいていますが,FreeBSDで聞けといわれたらすみませんが
自分でFreeBSDの方で聞いてください。m(__)m

672:名無しさん@お腹いっぱい。
08/12/08 15:27:43
あ,668 の人だけど >668 は >667 宛てね
(FreeBSD 事情なら >668 ということで)

673:octave for windowsメモの筆者
08/12/08 18:35:09
Octave MLより
3.0.4 call for patches (Jaroslav Hajek-2 Dec 08, 2008; 03:49pm)

URLリンク(www.nabble.com)

ということでOctave-3.0.4のリリースの準備が始まりました。

674:octave for windowsメモの筆者
08/12/09 09:51:01
>>667

最初の書き込みがいけなかったため,該当する返事はまだ得られていません。
(-ffast-mathオプションが使えるかという風にとられたため。
違う趣旨の返事しか来てません。再度趣旨を訂正しましたがこれまでのところ
答えはついていません)

では,
URLリンク(www.nabble.com)


675:octave for windowsメモの筆者
08/12/10 13:28:53
>>668
--- John W. Eaton wrote:
> I think you should ask the people who packaged Octave for FreeBSD.
>
> Based on the description in the GCC manual, I would generally
> recommend against using -ffast-math.
>
> jwe

ということで,FreeBSDで聞いてくださいとのこと。m(__)m
jwe氏もagainstと書いている通り,おすすめしないといっておられます。
-ffast-mathなんでついてるのかな。

676:名無しさん@お腹いっぱい。
08/12/12 03:34:33
(;'ー`)つーか、-ffast-math付けると計算をはしょるから意図しない答えになることがある

677:octave for windowsメモの筆者
08/12/12 09:58:45
>>676
なるほどそうなんですか。私はJaroslav Hajekさんが書かれたことぐらいしか
知らないですが。どちらにしろつけるのは,変ですよね。

678:名無しさん@お腹いっぱい。
08/12/12 10:50:43
portsのMakefileには-ffast-mathついてないんだけど、
/etc/make.confに自分で書いてないかな?


679:octave for windowsメモの筆者
08/12/12 14:57:09
まあ,私が書き込んだことでoctaveのhelpとmaintainersのMLに残るのでFreeBSD
portsを使っている方へのアナウンスにはなっているわけでだし
あとはFreeBSD のportsをメンテされてる方がどう考えているかですよね。
ところでmkoctfile -vで出てくるg++でのコンパイルの表示に
-ffast-mathついてますか?
基本的にはconfigureで指定したoptionがついてますけどね。

680:名無しさん@お腹いっぱい。
08/12/12 20:02:11
(;'ー`)うわっ、ごめんよ!
FreeBSDのportsに-ffast-mathついてるのはmath/atlasだったよ

681:octave for windowsの筆者
08/12/14 12:32:14
>>680 了解。上にあげときます。

682:octave for windowsメモの筆者
08/12/15 11:52:18
>>680 上に報告しときました。

683:名無しさん@お腹いっぱい。
09/01/08 16:48:40
誰かovtaveで区分求積法を使って積分の計算をやってる例とか貼ってくれない?

684:octave for windowsメモの筆者
09/01/08 19:29:46
>>683
区分求積って台形公式でいいんでしょうか。
I = trapz (Y) ;
I = trapz (X,Y);
台形公式法(trapezodial method)による,数値積分をする関数。X,Yはともにベクトルであり,引数がYだけ時はX軸の間隔が1であるとしてyの台形の面積の和をとる。通常は,X,Yの両変数を指定し,和をとる。


685:octave for windowsメモの筆者
09/01/08 19:30:25
octave> format long
octave> x=linspace(0,pi,100+1);
octave> I=trapz(x,sin(x))
I = 1.99983550388744
octave> x=linspace(0,pi,200+1);
octave> I=trapz(x,sin(x))
I = 1.99995887647922
octave> x=linspace(0,pi,1000+1);
octave> I=trapz(x,sin(x))
I = 1.99999835506566



686:octave for windowsメモの筆者
09/01/08 19:32:58
精度が必要な時は,適応的自動積分のquadを使ってください。

687:octave for windowsメモの筆者
09/01/08 19:36:22
[v, ier, nfun, err] = quad (f, a, b, tol, sing)

Quadpackという積分パッケージに収録された適応的自動積分の関数。
第1引数は,被積分関数の名前で関数は,
y = f (x)
の形を持ち,xとyは、スカラーである。第2,第3引数は,積分範囲であり,-無限大や+無限大を片側または両方に指定できる。Octaveで無限大は,infまたはInfであらわす。
第4引数のtol は,ベクトルであり,第一要素は,要求したい精度の絶対値である。第二要素は,相対許容度である。
第5引数のsingは,ベクトルで被積分関数が特異点となる独立変数の値からなり,必要に応じて指定する。
第4,第5引数は,オプション引数なので省略は可能である。
左辺にvは,積分結果の値(関数の返り値)。ierはエラーコードで0は,積分の成功を意味する。nfunは関数の評価回数でと積分の困難さの指標になる。Errは,積分結果の評価誤差である。



688:octave for windowsメモの筆者
09/01/08 19:37:13
octave> format long
octave> function y=f(x);y=1./sqrt(1-x.^2);end;
octave> [v, ier, nfun, err] = quad (@f,0,1)
v = 1.57079632679489
ier = 0
nfun = 315
err = 5.44135847491134e-011
octave> pi/2
ans = 1.57079632679490



689:名無しさん@お腹いっぱい。
09/01/09 03:56:42
『octave for windowsメモの筆者』さんすごい!素敵です!

690:名無しさん@お腹いっぱい。
09/01/09 16:31:09
>>683ですが、貼ってくれた方ありがとうございます!

691:octave for windowsメモの筆者
09/01/09 16:57:46
>>689 >>690

大学の講義で使っている資料の一部を貼りました。
著作権の問題があり公開はしていませんが,
著作権問題がない部分については公開したほうがいいですかね。

ちょっと手間がかかるので要望あればぼちぼちやります。




692:名無しさん@お腹いっぱい。
09/01/16 16:35:33
大学の宿題で「観測値と予測値をプロットするoctaveのプログラムを示しなさい。」
っていう問題が出たんですけど授業を聞いてないボクにはさっぱりです・・・。。
誰か教えてくれませんか?

693:名無しさん@お腹いっぱい。
09/01/16 16:52:59
ノート買えばいいじゃん

694:octave for windowsメモの筆者
09/01/16 18:26:40
Octave 3.0.4のテストリリースのソースのリリースがありました。
しばらく,すれば3.0.4が出ることになります。

URLリンク(www.nabble.com)

695:octave for windowsメモの筆者
09/01/16 18:39:20
>>692 まあ,>>693さんがいっているように授業受けた人に聞きましょう。

↓に私の講義資料で著作権に関係のない部分をのせといたからこれでも読んで勉強しなさい。

URLリンク(www.tatsuromatsuoka.com)

696:名無しさん@お腹いっぱい。
09/01/16 22:36:07
予測値ってのはもう用意されてるのかね
予測手法も適切に選択するまでが課題だったら随分大雑把で困難な宿題だ

697:名無しさん@お腹いっぱい。
09/01/17 03:41:12
すいません。
勉強します・・・。

698:名無しさん@お腹いっぱい。
09/01/26 02:16:03
質問させてください。

cos(pi*90/180)

を実行すると

6.1232e-17

というネイピア数で表示されてしまうのですが、これを0と表示させるにはどうすれば良いのでしょうか?

699:名無しさん@お腹いっぱい。
09/01/26 08:55:39
つ round

700:名無しさん@お腹いっぱい。
09/01/26 10:33:35
ところでネイピア数は0.271828...e-1だが?

701:名無しさん@お腹いっぱい。
09/01/26 10:38:31
じゃない、0.271828...e1 だ

というか質問の意味がいまわかった。

そのeはネイピア数じゃなくて、浮動小数点数の10のべき乗表記で、
6.1232 × 10 ^ -17
じゃまいか?

702:名無しさん@お腹いっぱい。
09/01/26 13:03:46
>>699

roundで丸めるのではなく、不動小数点の10のベキ乗表記を小数点第何位までにするかという設定(要するに0の極限値の設定方法)があった気がしたので、そのやり方がわからないのです。

>>701

ネイピア数の定義がよくわかってなくてすみませんでした。
おっしゃるとおり6.1232 × 10 ^ -17です。

703:octave for windowsメモの筆者
09/01/26 19:31:40
octave3.0.4のソースのRC2が出ました。

URLリンク(www-old.cae.wisc.edu)

octave3.0.4ももうじきです。
一応3.0シリーズのラストと位置づけられているようで,
octave 3.2シリーズの準備がoctave 3.1で行われています。

704:octave for windowsメモの筆者
09/01/27 08:36:09
>>703
しかし,3.0になるときも,次は3.0とでながらかなり細かいバージョンアップを続けた経緯があるのでどうなるかは。分かりませんが。

705:octave for windowsメモの筆者
09/01/28 07:54:39
cygwin版のoctave-3.0.3がでました。ただし,パッケージングミスがあり,
mkoctfileが動きません。/usr/lib/octaveのlibctave.dll.a(oが抜けている)
をliboctave.dll.aにすれば動きました。報告をして,Macroさんが確認された
ので数日中にはfixされるでしょう。

706:名無しさん@お腹いっぱい。
09/02/01 00:21:14
output_precision=16って入力して表示桁数を変えようと思ったら,
output_precision is no longer a built-in variable
と出ました。
その後output_precition=16となりましたが数値の表示桁数が変わりませんでした。
どうすればよいのでしょうか

707:octave for windowsの筆者
09/02/01 18:03:15
>>706
output_precision(16)としてください。octaveはver3から殆この手のものは=ではなくて、()で設定します。

708:octave for windowsの筆者
09/02/01 18:05:12
>>706
output_precision(16)としてください。octaveはver3から殆この手のものは=ではなくて、()で設定します。


709:octave for windowsの筆者
09/02/01 18:05:36
>>706
output_precision(16)としてください。octaveはver3から殆この手のものは=ではなくて、()で設定します。


710:octave for windowsの筆者
09/02/01 18:06:06
>>706
output_precision(16)としてください。octaveはver3から殆この手のものは=ではなくて、()で設定します。


711:octave for windowsの筆者
09/02/01 18:08:53
携帯から書込みしたら重複投稿してしまいました。ごめんなさい。m(_ _)m

712:名無しさん@お腹いっぱい。
09/02/02 17:07:41
octaveでシミュレーションをやっているんですがどうしても下のようなエラーが出てしまいます
先生や先輩に聞いてもなぜかよくわからないというしまつ・・・orz
どなたか教えていただけないでしょうか?よろしくお願いします

octave:2> test2
error: invalid column index = 2001
error: evaluating binary operator `+' near line 72, column 28
error: evaluating assignment expression near line 72, column 17
error: evaluating for command near line 67, column 1
error: near line 73 of file `/home/soturon/test2.m'


ソース→URLリンク(www.uploda.org)

713:octave for windowsメモの筆者
09/02/03 10:48:16
712 ソースの場所に行ってみましたが見れませんでした^^;

714:名無しさん@お腹いっぱい。
09/02/03 10:54:34
めでたしめでたし

715:712
09/02/03 11:36:10
すいませんでした!
次こそ大丈夫なはずです

ソース→URLリンク(ultraup.net)
パス:test

716:名無しさん@お腹いっぱい。
09/02/03 12:25:39
>>715 Get Files Thank youとでますが,どこに落ちたかわからん。
サイトがサイトだけに,落ちないのかも,octave for windowsメモで
Googleれば私のサイトは見つかるのでそこのアドレスに添付で
送ってください。



717:名無しさん@お腹いっぱい。
09/02/03 12:26:31
>>715 Get Files Thank youとでますが,どこに落ちたかわからん。
サイトがサイトだけに,落ちないのかも,octave for windowsメモで
Googleれば私のサイトは見つかるのでそこのメアドに添付で
送ってください。



718:octave for windowsメモの筆者
09/02/03 12:28:23
>>716
m(__)m
そこのアドレス==>そこに記載のメールアドレス 

719:名無しさん@お腹いっぱい。
09/02/03 13:32:15
メール欄にsageと入れよう!

720:octave for windowsメモの筆者
09/02/03 13:40:12
>>719 入れましたがどのような意味で? おじさんはワカラナイ??

721:712
09/02/03 13:50:48
たびたび申し訳ないです><
メールで添付しときました!よろしくです

つーかアップローダーはどこがいいんだろ・・・
うpろだとか有名なとこはすぐ消えちゃうし

722:octave for windowsメモの筆者
09/02/03 14:06:50
>>721
メールとどきましたこれから見ます。

Uploaderではなく,Yahooのアカウントをお持ちなら,YahooのGeocitiesをフリーで
広告付きだけど50Mbyteのweb spaceを借りれますよ。
私は,自分のドメインと1Gbyteのスペースと持ちたいから
有料の契約してますが,普段使う分には50Mbyteあればいいでしょう。

723:名無しさん@お腹いっぱい。
09/02/03 14:13:21
>>722
Geocities?ブリーフケースのこと??

724:名無しさん@お腹いっぱい。
09/02/03 14:15:17
>>720
メール欄にsageと入れると書き込みをしてもスレッド一覧の最上位にいちいち浮上しません。
sageと入れないと一部の人からくどく思われる場合がありますので、普通はsageと入れます。
ちなみにsageは日本語の「下げ」をローマ字で書いたものです。他言語のsageの意味はありません。

725:octave for windowsメモの筆者
09/02/03 14:21:16
>>724 m(__)m ありがとうございます。

726:octave for windowsメモの筆者
09/02/03 14:22:03
>>724 m(__)m ありがとうございます。

727:octave for windowsメモの筆者
09/02/03 14:36:30
>>712 error: invalid column index = 2001ですね。

66行目 b(:,1)=[0;0];によって
octave:3> size(b)
ans 2 1
で1行2列の行列になってしまうわけです。

66行目 b=zeros(2,2001);
とすれば大丈夫です。
しかし,For Loopの塊ですね。
octaveでは,遅くなりますね。
漸化式likeなので
スパース行列を使えば高速化できるかも知れませんね。
URLリンク(www.nuce.nagoya-u.ac.jp)
偏微分方程式なのでまともにやったら2重ループなのですが,遅くなるので,
漸化式を係数行列にしてスパースを使って高速化してます。

古い資料なので,octaveのバージョンが古いですが,基本は同じから
参考にしてください。
でもいまのままでも,答えは少し待てば出るので,まあ,
現状でいいかもしれませんがこういうテクニックも
あることもしっておくといいですよ。



728:octave for windowsメモの筆者
09/02/03 14:41:57
>>723 ブリーフケースではありません。Webをおけるスペースです。
まあ,Yahooにいってみてください。
webがおけるのでファイルもおけて,
<html>
<a href='test2.m'>test2.m</a>
</html>
とでもして,index.htmlをつくり同じフォルダーに
test2.mをいれとけばいいです。



729:名無しさん@お腹いっぱい。
09/02/03 14:48:34
日本のyahooの利用規約では公開目的ではなく単にファイルを置くだけなのは禁止されているはず。
国内で利用するんだったらURLリンク(www.axfc.net)が良いかもしれないね。
流れてしまう速度はそんなに速くないはずだから。

730:octave for windowsメモの筆者
09/02/03 14:48:32
>>727 おっとこの講義資料の最後の回のものです。



731:名無しさん@お腹いっぱい。
09/02/03 14:55:26
ほんとループが長い!まだ回ってる・・・

>>728,>>729
つまりヤッホーのほうは利用しないで>>729のほうがいいってことですかね??
なにはともあれありがとうございます

>>730
是非拝見させていただきます

732:octave for windowsメモの筆者
09/02/03 15:07:17
>>729 あっとそうでしたね。

<html>
<body>
<P>数値計算ソフトのソースの例(octave)
<a href='test2.m'>test2.m</a>
</body>
</html>

とでもしとかなきゃだめでしたね。
こうすれば,一応公開目的なのでおけますよね。
ただし,パスワードがかけられませんからね。
まあ,見られてもいい(つまり公開)であればいいのですよね。



733:名無しさん@お腹いっぱい。
09/02/04 15:14:49
グラフを印刷する時、軸のラベルの文字の大きさを変えるのはどうするんですか?

print "hoge.eps" -deps -color -F:20

ってやると、目盛の数字は大きくなるけど、ラベルは小さい文字のままになりま
す。




734:octave for windowsメモの筆者
09/02/04 16:20:56
>>733
xlabel('{\fontsize{25} x}');

735:名無しさん@お腹いっぱい。
09/02/04 16:31:14
使ってるプロットツールによると思うんだけど
文字はそのままでグラフを小さく出力すると印刷時には相対的に文字が大きくなる
例えば俺はgnuplot使ってるから
__gnuplot_set__ size 0.4 0.4;
とかやって全体的に文字サイズを変えてしまうのはどうだろう

736:octave for windowsメモの筆者
09/02/04 16:40:56
__gnuplot_set__ size 0.4 0.4;
この設定は3.0からは使えません。

URLリンク(www.gnu.org) following plot commands are now considered obsolete and will be removed from a future version of Octave:

__gnuplot_set__
__gnuplot_show__
__gnuplot_plot__
__gnuplot_splot__
__gnuplot_replot__
Additionally, these functions no longer have any effect on plots created with the Matlab-style plot commands (plot, line, mesh, semilogx, etc.).html より


The following plot commands are now considered obsolete and will be removed from a future version of Octave:
__gnuplot_set__
__gnuplot_show__
__gnuplot_plot__
__gnuplot_splot__
__gnuplot_replot__
Additionally, these functions no longer have any effect on plots created with the Matlab-style plot commands (plot, line, mesh, semilogx, etc.).


737:octave for windowsメモの筆者
09/02/04 16:49:14
>>736 すいません。m(__)m。また,確認ミス。
とろろで「この設定は3.0からは使えません。」は使えませんはうそで,
正しくは,plot関数などによるplotには影響せず,__gnuplot_set__などは
あくまでも,別のルーチンでgnuplotのコマンドをダイレクトに使用する描画
にのみ影響する。

が正しいです。

といいのは,octaveの次のバージョンから独自のgraphicsエンジンを
使うという構想があり,このようのgnuplotの直接命令は,plotなどの
関数に影響を与えないように変更されています。


738:名無しさん@お腹いっぱい。
09/02/04 17:27:26
今プログラムを作ってるんですが下のようなエラーがどうしても消えません
どこがおかしいのでしょうか?

error: invalid column index = 0
error: evaluating binary operator `*' near line 35, column 14
error: evaluating binary operator `+' near line 35, column 12
error: evaluating assignment expression near line 35, column 4
error: evaluating for command near line 33, column 2
error: evaluating for command near line 29, column 1
error: near line 42 of file `/home/tse550u/soturon/ndynamicsg.m'


ソース:URLリンク(www1.axfc.net)


739:名無しさん@お腹いっぱい。
09/02/04 17:29:18
すいません、>>738のやつパスはdwです

740:名無しさん@お腹いっぱい。
09/02/04 17:35:28
新しいOctave入ってるPCで見てみたらマジだ
昔gset sizeでやってた頃に「これは使えなくなるから__gnuplot_set__ でやれ」
ってOctaveに怒られた時からいつかこうなるとは思ってたけど

741:octave for windowsメモの筆者
09/02/04 18:00:14
>>738
error: invalid column index = 0
が怪しい。行列やベクトルは最初に現れたsizeで初期化されますから,
sizeを指定したいときは,
A=zeros(N,M);
などであらかじめ指定してください。



742:octave for windowsメモの筆者
09/02/04 18:06:08
>>740
今は,JhandleというMATLABそっくりな図を描くグラフィックバックエンドも
ありますしね。MATLAB互換路線になっていますから,まあ仕方ないでしょう。
私は,データ吐き出して,
gnuplotで直接図描きますから関係あまりないのですが^^;。

ところで,jhandleは,epsはファイル形式は,postscriptのみだったと
思います。
emfなどはpstoeditをつかって変換するしかないでしょう。

743:octave for windowsメモの筆者
09/02/05 09:44:33
>>741 error: invalid column index = 0
おっと octaveはindexが1から始まるからでたエラーですねm(__)m。

744:名無しさん@お腹いっぱい。
09/02/05 18:07:53
>>734-737 ありがとうございました。

自前のグラフィックスですかあ。私はgnuplotが結構好きなんで、微妙だなあ。
なんかOctave全体が重くなるのもいやだし。

745:名無しさん@お腹いっぱい。
09/02/06 10:43:06
筆者さん、Octaveの授業もやってるんですね。わたしも筆者さんと同じ分野の人
間です。授業でOctave使おうとしたことがあるんですが、他の教員から「そんな
ブラックボックス使わせても教育にならん」と反対されました。かといって、現
行の授業でやってるようにC言語だと、病的な文法の瑣末なところで引っ掛る学生
がいっぱいいて、シミュレーションそのものを体感させるところまで行かないん
ですよね。

"プログラミング演習"の例題をOctaveで解かせるのは、研究室の学生にさせたこ
とがあります。"プログラミング演習"は過去におそらく3種類出版されているかと
思いますが、わたしは80 年代末に出たBasic版が一番のお気に入りでした。基本
算法の解説が一番詳しかったように記憶しています。現在はFORTRAN版もBasic版
も入手困難なようですね。FORTRAN版は手元にあるんですが、BASIC版はどっか行っ
ちゃいましたorz。今出まわってる改訂版は、うーん、解説は適当だし、Cと
FORTRAN両方のコード載せるのも場所の無駄だし、おまけに今時FORTRAN77だし。





746:名無しさん@お腹いっぱい。
09/02/06 11:12:37
いきなりOctaveやらせると感動がないじゃん
「スゲーこの言語スゲー!!俺こんなに手抜いちゃって良いの?」
っていう感じで

747:名無しさん@お腹いっぱい。
09/02/06 13:12:13
FORTRANでもいいんじゃね

748:名無しさん@お腹いっぱい。
09/02/06 13:26:18
Matlab/Octaveの醍醐味は初級プログラミングのレベルではなくて
普通にループを回すと何時間も何日もかかるループ処理が
行列演算で1発で出るという所なので
Excelで済む程度のデータなら必要無いでしょうね

逆に例えばモンテカルロ計算なんかだと、
一般的なプログラムではループ10万回ぐらい回して
そのループの中で乱数を発生させて、関数に入れて結果を見る事になりますが

Matlab/Octaveでは最初に、10万個の乱数配列を作り
行列演算化した関数に入れて1発で結果が出るみたいな感じなので
発想を根本的に変えないといけません

749:octave for windowsメモの筆者
09/02/06 18:05:40
>>748
そうですね。いかに,行列で問題を記述するかにかかってて,
偏微分の差分法の陰解法では良くガウスザイデル法とかつかいますが,
Octaveなら行列で方程式書いて左除算で済ませる。

係数行列は疎行列だからsparseを使って高速化するとか
発想が違いますよね。

まあ,ブラックボックスっいう方いますが,硬い微分方程式なんぞ
ルンゲクッタで解こうとすると大変で,lsode使うとあっという間に
解けますよね。

適応的自動積分でも同じだとおもいます。

シンプソン公式を自分でCで書いて使うような時代ではないと思ってます。

ブラップボックスでもいいから,数値計算ができることの意味を分からせる
のが大事だとおもいます。



750:octave for windowsメモの筆者
09/02/10 09:42:13
開発版octave 3.1.52がでました。
URLリンク(www.nabble.com)

Octaveの次のMajor Version Upはver 3.2であり,octave-3.1.xxは開発版です。
その3.1.52がでました。

gnuplotは一応defaultのgraphic backendでopenglによるgraphic backend
を機能させるためにはいろいろライブラリィが必要なようです。

詳しくは以下を
URLリンク(www.nabble.com)



751:名無しさん@お腹いっぱい。
09/02/10 11:39:01
そういえば新パソにFreeBSD7.1を入れて、
pkg_add -vr octave-devel
とインストールしたら
GNU Octave, version 3.1.51
でした。leasqrが入って無いのでoctave-forge-optimを入れてないような気がする。
バージョンごとに何が良くなったのか、見えにくいのが何とも…

そういえば、何語なのかわからないけど(チェコ語?)
Octave/Matlabのグラフィックスの例題があります
URLリンク(enacit1.epfl.ch)
gnuplotは置いておいて、jhandleならかなりMatlabに近い事が出来ました

752:octave for windowsメモの筆者
09/02/10 14:57:02
>>751 3.1.xx はdevelopment branchなので,octave-forgeは多分
自分でpkg installで行う必要があると思います。
しかも,octave-forgeは3.0.x用に作られているので結構苦労する可能性は
あると思います。

一般的なものは3.0.xxです。現在3.0.3が,最新版で3.0.4はもうすぐ出るのだと
思います。

(独り言)3.0.4RC3が出てからだいぶたつけど,いつになったら3.0.4の
正式リリース出るんだろう。



753:名無しさん@お腹いっぱい。
09/02/10 15:52:50
>>752
その後に、octave-forge-optimを入れたらOctave 3.0.2に上書きされました

754:octave for windowsメモの筆者
09/02/12 07:59:06
>>753 3.0.2でいいと思いますよ。

755:名無しさん@お腹いっぱい。
09/02/14 23:15:47
ここを見て気になったので試してみました
URLリンク(hiyokoz.blogspot.com)
ベンチの内容は
n=2000; A=randn(n); B=randn(n);tic; C=A*B; t=toc, MFLOPS=2*n^3/t*1e-6
だけ
内容は2000の大きさの乱数配列を2個用意してベクトル積するだけです

手持ちの機種で比べると
Intel Core2Duo 2.1GHz, WinXP
 MSVC, Octave 3.0.1  2.05 GFLOPS 
 Cygwin, Octave 3.0.3  0.99 GFLOPS
Intel Pentium M 1.6GHz, WinXP
 MSVC, Octave 3.0.0  0.81 GFLOPS 
 Cygwin, Octave 3.0.3  0.18 GFLOPS
Intel Atom N270 1.6GHz, FreeBSD 7.1
 FreeBSD Octave 3.0.2 0.17 GFLOPS

PenMとAtomマシンに対してCで書かれた一般的なベンチ(Flops-2.0)で試すと
どちらも0.18GFlopsなので、同じクロックのPenMとAtomは同じ程度の
浮動小数点演算能力を持っていると考えられます。

問題はそのページに載ってる
MacBook (Core Duo 1.83 GHz): 約 3 Gflops
iMac (Core 2 Duo 2.4 GHz): 約 12.5 Gflops
Mac Pro (Xeon 3 GHz クアッドコア×2): 約 50 Gflops

という結果です。私の結果では Core2Duo 2.1GHz はMSVC版でも2GFLOPSでしたが
iMacの結果は2.4GHzとほぼクロックが同じにもかかわらず12.5GFLOPという
圧倒的なパフォーマンスです。Octaveを使うのならMacで決まりでしょうか

756:octave for windowsの筆者
09/02/15 07:06:09
>>755

そうですか。ところでMSVC版はsse2でしょうか。Genericでしょうか?。

GenericだとATLAS使わないので。

MacOSはunixというのもあるかもしれません。


757:名無しさん@お腹いっぱい。
09/02/15 09:48:41
>>756
それはもちろん、PenMはSSE2、Core2DuoはSSE3でインストールしてます
ATLASを使っても、この程度という事はロハで出来る範囲はこの程度なのでしょう

その元のブログには
>g95はOpenMPに対応していないが,アクティビティモニタを見るとCPUは二つとも動いているので,
>スレッド化されているようだ.おそらく,Mac OS XのAccelerate.frameworkに含まれている
>BLAS/LAPACKが呼ばれていて,Fortranコンパイラは無関係だと思われる.

と書いてありますから、ATLASとAccelerate.frameworkの差だと思われます
Windowsで同様の事は出来ないのか?というと一応MKLがあります
URLリンク(sourceforge.jp)
>今回使用したテストプログラムは500×500の行列同士の乗算を100回繰り返すというもの
>MKL    1.903秒
>ATLAS  3.895秒
>BLAS  16.120秒

マルチスレッドが効き2コア演算が有効になるためATLASに比べて約半分の時間で計算出来ますが
恐らく「GNU」Octaveで使うのは無理でしょう。
なので、値段もさして変わらないのならMacを選んじゃった方がいい可能性もあります。

758:octave for windowsの筆者
09/02/15 17:12:20
>>757
Accelator.frameworkのページみました。

なるほど、こりゃMacのほうがいいですね。
今度、買うならMacにしよう。

ありがとうございますm(__)m


759:octave for windowsの筆者
09/02/15 20:12:45
良く見るとCore2Duo用にのATLASも最適化出来るようですね。

MSVC版やMinGW版は、これは使っていないでしょうね。

でも、これを使ってもMacには叶わないでしょうね。

でも、差がどれくらいになるかは興味はありますね。

しかし、使おうにもかなりビルド大変ですしね。

私はCore2Duoマシン持ってないからなんともできないですが^^;


760:名無しさん@お腹いっぱい。
09/02/15 21:20:04
>>540
を見ると、
MATLABはMSVC版の3.5倍ぐらい速いようなので(MATLABはマルチスレッドに対応してる)
MSVCで2GFLOPSなら、MATLABで7GFLOPSぐらい出そうですが
Macはその倍近い12GFLOPSですし
MATLABの維持費を考えると、35万円ぐらいの8コアのMacPro買って
実効50GFLOPSもいいかもしれません

761:名無しさん@お腹いっぱい。
09/02/16 00:38:19
質問です。

やりたいことは、x=1:50; y=1:50; として、
その各々の格子点からcを作成して、 c = [ 1 ; x0; y0; ];
(x0, y0は格子点によって値が各々1~50に変わります。)
ある行列Aとの積の値 val = A * c; を求めて、
valをある関数fの引数にすることでzを求めます。 z=f(val);

すると、x軸、y軸、z軸で等高線がひけると思いますが、
この過程を効率よく(スマートに)計算するにはどのようにすれば
よさそうですか??for文でcを作ってやるしかないですか??

50x50x3の3次元行列なんかが作れてスパッと計算できたら
よさそうなのですが、どうもよくわかりませんでした。。

762:名無しさん@お腹いっぱい。
09/02/16 09:59:37
というわけでMatlabを含めてテスト

テスト対象のCPUはiMacの人と同じくIntel Core2Duo 2.4GHz
テストスクリプトは
n=2000; A=randn(n); B=randn(n);tic; C=A*B; t=toc, MFLOPS=2*n^3/t*1e-6
のまま

Octave Cygwin版3.0.3   GFLOPS = 1.1429
Octave MSVC版3.0.3    GFLOPS = 2.3239
MatlabR2008a(MT OFF)   GFLOPS = 6.1464
MatlabR2008a(MT ON)   GFLOPS = 10.326
(MT:マルチスレッド)
そして
Octave MacOSX版     GFLOPS = 12.5

Matlabをもってしても勝てません。もちろんループはOctaveの方が速いので
実際のプログラムの速度ではOctave-MacOSよりMatlabの方が速いでしょう
えーとちなみにMatlabは「安すぎる」と日本の関係者に言われている
アメリカの1ユーザーパッケージでも$1900で、日本国内で個人が買うと…
とても信じられない価格です ^_^;。

じゃあどうするか
・マルチスレッド対応のテキサス州立大学のGotoBLASを使う(無料、自由配布不可)
・マルチスレッド対応のインテルMKLを使う(有料、自由配布不可)
・Macを買う
・Matlabにお布施

ちなみにGotoBLASとMKLは同程度のパフォーマンスのようです。

763:名無しさん@お腹いっぱい。
09/02/16 11:07:25
>>762
C:\Program Files\MATLAB\R2008a\bin\win32

blas.spec
には
GenuineIntel Family * Model * mkl.dll mklcompat.dll # Intel processors
AuthenticAMD Family * Model * mkl.dll mklcompat.dll # AMD
とありますからMATLABはMKLを使ってます
逆に言うとMKLを導入してもMATLAB程度です

764:名無しさん@お腹いっぱい。
09/02/16 13:20:48
Cygwin介す場合が遅すぎるだけな気がする

765:octave for windowsメモの筆者
09/02/16 15:38:46
>>764 cygwin のblasってATLASじゃないとおもいまね。
かなり昔,mingwでliboctaveだけビルドできた時,行列計算にATLASをつかうと
(もちろんコードはliboctaveを使ったstandalone C++ですが。)
mingwとcygwinで差は,出ませんでした。
まあ,cygwinならoctaveビルド簡単だし,
マルチスレッド対応のテキサス州立大学の
GotoBLASを使う(無料、自由配布不可)

もcygwin上ならできるのでそこでどうなるかでしょうね。

Core2Duoのマシンのない私には無縁ですが^^;

HT Pentium(3.4GHz)だからそれでどれくらい,sse2なATLASとどこまで
向上するか比較できます。

766:octave for windowsメモの筆者
09/02/16 16:04:11
>>762
>・マルチスレッド対応のテキサス州立大学のGotoBLASを使う(無料、自由配布不可)

この場合,
octaveを自分でビルドする必要があるわけですね。

gcc-4.3.2-dw2-TDMのmingwでoctaveを構築(3.0.4RC3)したら,左除算がハングって
なぜ????

mingw-gcc-3.4.5なら何とかビルドできますが,いまさらgcc-3ってのもねと
おもっています。

Linuxを入れてgotoBlasてのもいいんかなとおもいますね。

職場から出るときにATLAS仕込んで帰ってやってみます。



767:octave for windowsメモの筆者
09/02/16 16:18:05
>>761
Octaveで行列型のデータつくってはきだして
gnuplotのcontourにお任せするのはどうですか。
3Dのグラフの等高線図はgnuplotで書きますから。
たしかMATRIX型のデータも扱えるはずですよ。
どうやって等高線を引くのかアルゴリズムはしりませんが,
gnuplotはソースコード公開しているからその気になれば
読めばわかると思います。

768:octave for windowsメモの筆者
09/02/16 18:44:26
>>766 自己レスです。意味不明な文章になっているので。<m(__)m>
帰りにコンピュータを走らせcygwinで自分のCPUにあわせたatlasを構築して,
そのATLASを使ってcygwin上でoctaveをビルドして,
MSVCのSSE2のCPUのATLASとの比較をして見ます。

という意味です。すみません。<m(__)m>




769:761
09/02/16 22:48:04
>>767 返信ありがとうございます!
わたしの質問の仕方がまずかったようです。出力したデータの等高線を描くのは問題ないのですが、
そのデータを出力する際に、

for xi = (1:5) * 25.0 / 5.0 - 10.0
for yi = (1:5) * 25.0 / 5.0 - 10.0
c = [1; xi; yi];
a = A * c;
b = 1.0 ./ (1+exp(-a));
z = sum(b);
printf("%f %f %f\n", xi, yi, z);
endfor
endfor

としているのですが、これより速く動作する(octaveらしい)書き方がありますか?
という意味でした。分かりにくくてすみませんでした。

特にfor文で回すのではなく、他の言語(SciPy, RubyのNArray)で使えるような
3次元行列を使う方法があれば嬉しいと思っています。

770:octave for windowsメモの筆者
09/02/17 19:16:55
>>762

MSVC
MFLOPS = 1845.9

mingw (Benjamin さんのもの)
MFLOPS = 1973.0

ATLA3.8.2を自分のコンピュータ用にcygwinでビルドしてこれをつかって,
mingw-4.3.2-dw2-TDMでoctave-3.0.4RC3をビルドしたもの
MFLOPS = 4830.2

(mingw 4.3.2でのビルドがReference Blasだとうまく動かなかったのが
Atlas使ったらあっさり動いた。なぜ!!)

私のコンピュータはHT-PentiumなのでCore2Duoまでは行かないでも,
マルチスレッドですから,やはり専用にATLASかけるとかなり違いますね。
Core2Duoならどうでしょうか?

ATLASの威力をフルに発揮させるにはやはりoctaveを自分でビルドしないと
だめですね。

octave for windowsメモにmingwで自分でビルドする方法でも書いたほうが
いいのかな。

goto blasもためしてみたいですね。

771:octave for windowsメモの筆者
09/02/17 19:30:43
>>769 すいません。思いつきません。
<m(__)m>
Octaveは現在3次元とは言わず,
多次元行列サポートしてますんで,頑張ればできるんではないかと^^;

772:名無しさん@お腹いっぱい。
09/02/17 20:00:29
>>770
おおすごいですね
MSVCで2GFLOPSだとCore2duo 2.1GHz並ですか
ATLASで5GFLOPS近くもすごい
MSVC版は作者の使ってるマシンのCPUで最適化してるから
キャッシュ容量とかの差で、セルフビルドしたATLASと差が出るのかもしれません

こちらでもAtom 1.6GHzのネットブックに
FreeBSD7.1RのPackagesで入れたOctave 3.0.2で、0.17GFLOPSだったのが
Portsでatlas-3.8.2をmakeした後に、Portsでoctave-3.0.3をmakeして測ったら0.81GFLOPSでした
3万円ぐらいのネットブックでこんだけ出れば十分です

773:octave for windowsメモの筆者
09/02/18 09:13:35
>>770 >>772
家のパソコン1.2GHzのCeleron Mでやってみました。
MSVC 3.0.3 367 MFLOPS (sse2,Michael)
mingw 3.0.2 830 MFLOPS (see2,Benjamin) 
mingw 3.0.4RC3 1110 MFLOPS (sse2, ATLAS3.8.2を自分のパソコンで作成)

やはり,自分の使っているCPUでATLASかけたほうがいいですね。
Celeron Mは,意外に速いのですが,MSVC版とmingw版ではHT-pentiumでは
差が少ない飼ったのですが, Celeron Mではかなり差がありますね。
実際に ATLASをかけられたCPUとCeleron Mとのコードの最適化の
相性でしょうね。

P行列計算が関係のない,硬い微分方程式の解析でもmingw
Octave版の方msvc版よりかなり速いです。
mingw版はサポートしているforgeが少ないですが,私はforgeを
つかっていないのでデメリットにはなりません。
GCCも入っているのでmkoctfileのために,Msvc 2008 Expressを
入れる手間を考えると私は,Benjamin版を使っていました。

しかし,これからは自分でビルドしたものを使います。


774:名無しさん@お腹いっぱい。
09/02/18 13:03:57
>>769

こんな感じでいいのかな?

x = (1:5) * 25.0 /5.0 - 10.0;
[X,Y] = meshgrid(x, x);
c = [ones(length(x).^2, 1), X(:), Y(:)];
a = A * c';
b = 1.0 ./ (1+exp(-a));
z = sum(b);

result = [X(:), Y(:), z'];

for i = 1:length(x).^2
printf("%f %f %f\n", result(i,:));
end

775:octave for windowsメモの筆者
09/02/18 13:05:10
>>770 >>772 >>773
大学のパソコンでcygwinでやりました。ATLAS演算は,予想通りほぼ一緒でした。
MFLOPS = 4749.2
とにかく,windows上でお金をかけずに行列計算をそこそこ高速でやりたい人は
自分でATLASからビルドするということがとりあえずのまとめですね。

goto BLASでどうでるかですね。これは,再配布禁止なので,
自分でビルドするしかないですよね。



776:octave for windowsメモの筆者
09/02/18 17:31:53
octave-3.0.4RC4がでました。

URLリンク(www.nabble.com)

これで最後のRelease Candidate (RC) だと思いますが^^;

777:名無しさん@お腹いっぱい。
09/02/18 20:43:39
>>774 ありがとうございます!XとYの長さが同じ時はこれで完璧ですね。
なるほど、X(:), Y(:)で列ベクトルにして値をもっちゃえばできたんですね、
勉強になりましたm(_ _)m

778:名無しさん@お腹いっぱい。
09/02/19 09:40:55
Octave 3.0.3をcygwinでmakeすると
libcxsparse.a
でこけますね
3.0.2でやればいいのかな

779:octave for windowsメモの筆者
09/02/19 14:25:20
>>778 SuiteSparse3.2.0になってますか。
なんか,g77とgfortranが互換性がないため,
gcc-4を使うためには,SuiteSparseを最新版にする必要があります。

ちなみに私は,SuiteSparseは自分でビルドして使っています。
自分のコンピュータ用にオプション入れていますので
-O3 -fomit-frame-pointer -march=1686 -mmmx -msse3

自分でcygwinでビルドする場合にはcs.hにパッチをあてる必要があります。

--- cs.h.org/cs.h 2007-05-18 21:12:04.000000000 +0900
+++ cs.h 2007-08-15 04:10:12.078125000 +0900
@@ -17,7 +17,11 @@
extern "C" {
#else
#ifndef NCOMPLEX
+#ifdef __CYGWIN__
+#define I 1.0I
+#else
#include <complex.h>
+#endif
#define cs_complex_t double _Complex
#endif
#endif




780:octave for windowsメモの筆者
09/02/23 13:04:07
ATLAS(3.8.2)の組み込み(Windows版cygwin,mingw)の簡易メモ
そのうち自分のページに書くつもりですが,その前に
ATLASのビルドは,cygwin上で行う。(mingwでは無理)。
ATLAS(3.8.2)はgcc-3とgcc-4では違うコードを吐く。octaveでgcc-4でのビルドが
よいので,gcc-4でのビルドがいい。cygwinのgcc-4は,gcc-4.exeとgfortran-4.exe
を使うが,ATLASはgccとgfortranでないと動かない。gcc-3のgcc.exeをgcc-3.exe
のようにリネームして,構築する。
外部ライブラリではcygwinでは,setup.exeでインストールし,mingwではBenjamin
さんのライブラリを拝借するのがはやい。
まずは,ここまで。




781:octave for windowsメモの筆者
09/02/23 13:15:46
>>781
すでにあるLapackは使えないので,
適宜,CC,F77,CXX,CFLAGS,FFLAGS,CXXFLAGS,CPPFLAGS,LDFLAGSを定義して
(これが結構面倒なんだが^^;)
./configure --with-blas='-L/usr/local/atlas/lib -lf77blas -lcblas
-latlas' --without-lapack
で構築する。外部のLapackをつかうと使っているblasが違うのでうまくいかない
,octaveのソースにあるLapackを使うのが簡単。それで--without-lapackを
つかって./configureをする。
分かる人にはこれでわかるはず。わからない人には,暇になったら丁寧に書くの
でお待ちを。

782:octave for windowsメモの筆者
09/02/23 13:30:14
>>780 推敲がいい加減だな。<m(__)m>

途中の文章を以下に訂正。

cygwinのgcc-4は,gcc-4.exeとgfortran-4.exe という名前だが,
ATLASはgcc.exeとgfortran.exeでないと動かない。gcc-3のgcc.exeをgcc-3.exe
のように退避して,gcc-4.exeとgfortran-4.exeをそれぞれ
gcc.exeとgfortran.exeにしてATLASを構築する。

>>781
mingw-gcc-4.3.0-dw2-TDMでは,C++のdllライブラリlibstdc++_tdm_dw2_1.dll
を使えるので.octファイルのサイズを抑えることができる。
CXXFLAGSの先頭にに-D_DLLをLDFLAGSの先頭に,-shared -shared-libgccを
加える。

今日はここまで。

783:名無しさん@お腹いっぱい。
09/02/24 18:30:30
Octave-3.0.4 RC5がでました。予想外に3.0.4のリリース苦戦している模様。
これが最後のRC版になればいいのですが,

URLリンク(www.nabble.com)


784:octave for windowsメモの筆者
09/02/25 08:05:40
>>783 Plot周りのバグの指摘にJaroslav Hajekさんがきづいていなかったようで
Jwe氏より待ったがかかりました。3.0.4のリリースは遅れそうです。

私としては通常の使用では3.0.3で十分なので,無理して急ぐことはない
と意見をかきこんでいます。

しばらくは,3.0.2または3.0.3を使いましょう^^;。



785:名無しさん@お腹いっぱい。
09/02/28 01:18:02
matlabと完全互換でなくなったのは
何か理由があるのでしょうか?

786:名無しさん@お腹いっぱい。
09/02/28 01:48:42
>>785
互換性はあると思いますよ
 MATLAB→Octave
は比較的
Octaveの変な方言を使うのをやめれば
 Octave→MATLAB
もスムーズになると思われます

変な方言とは具体的には

if A<=B,
endif ← end; にする

function F=func(x)
endfunction ←不要

#    ←コメントは %

if A<>B,
if A!=B, ← A ~= B だけ

787:octave for windowsの筆者
09/02/28 13:22:51
>>785
元々からして完全互換を歌ったことははないですよ。

MATLABが変わっていったのに追いついていなかったというのが正しい認識だと思います。
Octave ver.3は、MATLABの仕様変更に対応して変わったという面があります。

私自身はMATLABを使ったことはなく、Octaveを使った講義でMATLAB互換を歌っていますのでMATLABの書籍は持っています。

最近のOctaveは、本格的なMex対応やplot周りなどは、最近のMATLABに仕様を変えつつありますし、互換性のあるコードが以前より書きやすくなっていると思います。


788:名無しさん@お腹いっぱい。
09/02/28 16:19:08
>>787

「歌う」って「MATLAB互換ですよ~♪」みたいなw

「謳う」じゃね?

789:octave for windowsの筆者
09/03/01 06:21:24
>>788
うーん。そうっすね(^_^;)


790:名無しさん@お腹いっぱい。
09/03/04 22:19:08
gnuplotへの直接命令(__gnuplot_hogehoge)がobsoleteになった、ということが
今一わかっていないのですが、とりあえず3.0系列ではplotするとgnuplotが起動
しますよね。んでterminalはx11になっているようなんですが、これを例えばwxt
にするにはどうすればいいんですか?

791:octave for windowsメモの筆者
09/03/05 08:10:20
>>790
octaveで最初のplotをする前ににgnupotの環境変数GNUTERMを
変更しておけばいいです。
bashなら
$ export GNUTERM=wxt; octave
または,
share/octave/3.?.?/m/startup/octaverc
share/octave/site/m/startup/octaverc
~/.octaverc
のいずれかににputenv(GNUTURM,'wxt'); を書き込みます
要はgnuplotの起動時に環境変数で決まるターミナルの名前に変更します。
後から__gnuplot__set term wxt命令はハイレベルな関数plot()には
なにも影響を与えません。
砂悪
__gnuplot__plot__ 'hoge.dat'
などのような_gnuplot_hogehoge__で使うプロットにしか
影響を与えないということです

ハイレベルというのは,アセンブラとCとの関係でC
がアセンブラと比べて高い汎用性で動いているとです。
UNIXのOctaveでも環境さえ準備すればJhandleは使用可能です。
plotなどの関数はgnuplotでもjhandleでも動くので汎用性をもった関数で
なくてはならないので,ローレベルのgnuplot直接命令が汎用命令のplotに
影響を与えることはできません。

792:octave for windowsメモの筆者
09/03/05 08:12:30
>>791
砂悪 は消し忘れです。すいません<m(__)m>。

793:octave for windowsメモの筆者
09/03/05 12:32:03
>>791
書き忘れましたが,print関数でplotのファイル出力には
複数のファイル形式に対応してます。
詳しくは,help plotを参照してください。
上はgraphic backendにgnuplotを使った場合です。
Jhandleだとepsしか出力できません。


794:790
09/03/05 13:50:03
"筆者"様、ありがとうございました。

795:名無しさん@お腹いっぱい。
09/03/05 19:28:38
>>755
の続きで
Intel Core2Duo 2.1GHz, WinXP
マシンのcygwinでatlasをmakeして、octaveを再makeしてみました

現在までの結果は
MSVC, Octave 3.0.1  2.05 GFLOPS 
Cygwin, Octave 3.0.3  0.99 GFLOPS
で、
cygwinでAtlasをmakeしてみた結果は
Cygwin, Octave 3.0.3+Atlas 4.35 GFLOPS

これはすごい!。
>>762
のMSVC版の結果も合わせると
Intel Core2Duo 2.4GHz WinXPなら
Cygwin, Octave 3.0.3+Atlas 4.92 GFLOPS

ぐらいでしょうか。Matlabのシングスレッドの6GFlopsに匹敵します。
これでAtlasがマルチコアに対応すれば…

ちなみにcygwin上でのoctaveのmakeは簡単です
URLリンク(ftp.yz.yamagata-u.ac.jp)
このcygwinで配布してるsrcを取ってきて、解凍して、同梱のpatchをあてて、configureしてmakeするだけです。
その前にAltasをmakeしてインストールして、/usr/local/atlas/lib の中にある*.a のシンボリックリンクを
/usr/local/lib に置くかどうかすれば、configureした時に見つけてくれます。

796:octave for windowsメモの筆者
09/03/06 09:25:17
>>795 cygwinでoctaveつかうならaltas入れてgcc-4をつかって
自分でビルドするのがいいと私もおもいますね。
forgeはpkg installで必要なやつだけいれればいいので。

797:名無しさん@お腹いっぱい。
09/03/07 20:06:18
というわけで、Intel Core2Duo 2.4GHzのCygwinにGotoBLASを入れてみました
入れたのは最新のバージョン1.26です。CBLASも必要。
そのあとにOctaveをmakeしなおしました(Makeconfを修正してGotoBlasを有効にする)
その結果は…

octave:2> n=2000; A=randn(n); B=randn(n);tic; C=A*B; t=toc, MFLOPS=2*n^3/t*1e-6
t = 1.0160
MFLOPS = 1.5748e+04

なんと15.75GFLOPSです。
>>762 >>795
の結果も合わせると、
Intel Core2Duo 2.4GHz, WindowsXP Proでは
Octave Cygwin版3.0.3   GFLOPS = 1.14
Octave MSVC版3.0.3    GFLOPS = 2.32
Octave Cygwin+Atlas   GFLOPS = 4.92
MatlabR2008a(MT OFF)   GFLOPS = 6.15 (MT: Multi Thread)
MatlabR2008a(MT ON)   GFLOPS = 10.33
Octave Cygwin+GotoBlas GFLOPS = 15.75
Cygwin版ノーマルと比べると15倍!この差は大きい

798:octave for windowsメモの筆者
09/03/09 10:06:54
>>797

GotoBLAS恐るべしですね。これだとMACと同等以上でしょうか。
MacでもGotoBLASを使えってことでしょうね。
再配布が禁止なので,自分でビルドしないといけないのが難点かな。
mingwでも今度やってみます。

Makeconfを書き直されたそうですが。

私がatlasを使うとき行っている
./configure --with-blas='-L/hoge/atlas -lf77blas -lcblas -latlas'

という感じで行きませんかね。

799:名無しさん@お腹いっぱい。
09/03/09 10:58:25
>>798
lapackはバイナリーのoctaveを入れた時に入ってるので

./configure --with-blas='-L/usr/local/lib -lgoto'

だけで拾ってくれました

それとMacで速かったのはAppleのBLASであるアクセラレーション・フレームワークが入っていたからで
GotoBlasを使うのなら、Cygwinで十分だと思います。

ちなみにGotoBlasは環境変数で
GOTO_NUM_THREADS=1
とすると、1coreだけで演算してくれますが、その場合は8GFlopsでした。
2coreで約15.5GFlopsですからスケーラビリティーはあると思います。
例えば、DELLのStudio Desktop Core2Quad(2.33GHz)・4GBメモリ搭載ハイエンドミニタワーが
販売価格 69,980円
こんななので、これで4core有効にすれば30GFlopsぐらい出るでしょう。

1GFlopsと30GFlopsの差はたぶんけっこうあって、体感的には30分かかる計算が1分で終わる感じでしょうか。
もしくは1GFlopsで1回に1分かかるベクトル演算を1万個のパラメータで計算すると1万分=1週間かかりますが
30GFlopsなら5時間半で終わります。まあとにかく差が大きいです。
Atlasで使う限りはその1/4以下の能力しか出せないと考えるとGotoBlasはなかなかいいです。

800:octave for windowsメモの筆者
09/03/10 15:08:02
>>799
/configure --with-blas='-L/usr/local/lib -lgoto'

だけで拾ってくれました
ありがとうございます

>>770
HT-pentium4
mingw-4.3.2-dw2-TDMでoctave-3.0.4RC3をビルドしたもの
MFLOPS = 4830.2

GotoBLAS
MFLOPS = 5227.0
私のやつはHT-Pentiumだからかな。でもATLASより少しは速い。
ATLASはビルドに時間食うし自分でビルドするならGotoBLASに決まりですね!!。



801:octave for windowsメモの筆者
09/03/10 19:37:56
>>800
キリ番ゲットしてたんですね<m(__)m>。
mingw(GCC-4.3.2-dw2-TDM)でもcygwinでビルドしたリブラリ使えます。
(できたlibgoto_(cpu name).a をlibgoto.aにコピーして,
適当な場所にいれ,--with-blas='-L/usr/local/lib -lgoto' でビルドする。)
MFLOPS = 5535.1
すこしですが速くなります。こりゃビルド方法をメモにかかんとあかんなあ。
しばしお待ちを<m(__)m>。

802:名無しさん@お腹いっぱい。
09/03/10 19:59:18
>>801
MSVC版で使えると最高なんですがねぇ
GotoBlasのexports/というディレクトリーで

make dll

とやると、dllファイルが出来るんですけど
MSVCのbin/のlibblas.dllとリネームして置き換えても
cblasの関数が無いみたいなエラーが出てダメでしたね

GotoBlasとcblasをくっつけてdllをつくればあるいは…
という感じがしないでもありませんが

803:octave for windowsメモの筆者
09/03/11 08:19:59
>>802
おそらくoctaveは将来,MSVC版はなくなりそうです。
というのはLapack 3.2はfortran90でかかれており,fortran90に対応した
f2cがないからです。
URLリンク(www.nabble.com)
Michael(MSVC版の開発者)さんとBenjamin(Mingw版の開発者)のやり取り
を参照ください。また,行列計算以外octaveの計算速度はgcc-4.3以上を
使えばmingwの方が速いです。

clear;
function dx = oregonator_m (x, t)
dx = zeros (3, 1);
dx(1) = 77.27*(x(2) - x(1)*x(2) + x(1) - 8.375e-06*x(1)^2);
dx(2) = (x(3) - x(1)*x(2) - x(2)) / 77.27;
dx(3) = 0.161*(x(1) - x(3));
end
x0 = [ 4; 1.1; 4 ];
%t = [0, logspace (-1, log10(303), 150), logspace (log10(304), log10(500), 150)];
%t=linspace(0,500,1000);
t=0:0.5:500;
ts=cputime();
y = lsode ('oregonator_m', x0, t);
cputime()-ts
plot (t',y(:,1),"",t',y(:,2),"",t',y(:,3));

をやるとMsvc 3.0.3 1.6563s, Mingw 3.0.2 1.2188s, 4割程度mingw版の方が
速いです。私はjhandleを使わないのでmingw派です。



804:octave for windowsメモの筆者
09/03/11 09:41:58
>>773 >>800
>1.2GHzのCeleron M
>mingw 3.0.4RC3 1110 MFLOPS (sse2, ATLAS3.8.2を自分のパソコンで作成)
でしたが GotoBLASでは900弱でした。
古いCPUの場合はATLASの方が速いですね。

805:名無しさん@お腹いっぱい。
09/03/11 10:01:18
>>803
GotoBlasを入れて15GFlopsにしても、一部のプログラムでGotoBlas+Cygwin版が
2GFlopsのMSVC版よりも極端に遅い事があったのです。それで調べてみました

行列のベクトル積
MSVC
octave:1> A=randn(100);tic;for jj=0:1000;C=A*A;end;toc
Elapsed time is 0.938295 seconds.

Cygwin
octave:1> A=randn(100);tic;for jj=0:1000;C=A*A;end;toc
Elapsed time is 0.25 seconds.

Cygwinの方が4倍ぐらい速いしループのオーバーヘッドはほとんど無い

比較処理
MSVC
octave:2> A=randn(100);tic;for jj=0:10000;B=(A>0)*1;end;toc
Elapsed time is 1.797 seconds.

Cygwin
octave:2> A=randn(100);tic;for jj=0:10000;B=(A>0)*1;end;toc
Elapsed time is 40.28 seconds.

Cygwin版は比較処理が致命的に遅い!

一部の関数計算に比較処理を使うのですが、これが遅いと非常に困るんですよね
そういう意味でMSVC版のリリースは続けて欲しいのでう感じなのです。
それと自前でBuildしたlibgoto.dllを使えるようにして欲しいですね。
ちなみにMatlabだと1.68秒なのでMSVCとほぼ同じなんですが。

806:octave for windowsメモの筆者
09/03/11 11:43:53
>>805
cygwinのgccはなにをお使いですか?
gcc-4を使わないと極めて遅いですよ。これはgcc-3の
有名なslowness issue of sjlj exception handling in cygwin gccに
よるものです。現在のoctave 3.0.3はgcc-4でビルドされています。
gcc-4はdwarf2 exception handlingですから,MSVCより遅いですがそれ穂ほどでも

gcc-4はcygwin set upから簡単に手に入ります。gcc-4でのoctaveのビルドは

URLリンク(www.tatsuromatsuoka.com)

をご覧ください。またこの場合,g77とgfortranがbinary互換
でないので,またGotoBLASもgcc-4でビルドしたください。
Makefile.ruleをのgccをgcc-4にgfortranをgfortran-4に
書き直してくださいね。

ちなみに私のPCで比べると
A=randn(100);tic;for jj=0:10000;B=(A>0)*1;end;tocは
2.464 seconds.(cygwin 3.0.3)
2.88553 seconds. (msvc 3.0.3)
2.32813 seconds (mingw 3.0.2)
msvcが一番遅いです
やはりmingw版が最速です。開発版ではoctave独自のMATLAB like
なgraphic backendを持つため(gnuplotも使えますよ)Jhandleが使えない
ことは開発版では問題ありません。スピードでいうならmsvcよりmingwが
速いです。ごれはgcc-4がmsvcより最適化性能に優れていることによります。


807:名無しさん@お腹いっぱい。
09/03/11 13:34:46
>>806
gcc 3.4.4でした
そのうち4.xに入れ換えて試してみます

>開発版ではoctave独自のMATLAB likeなgraphic backendを持つ

3.1.xではそんな機能が入るんですか

808:octave for windowsメモの筆者
09/03/11 13:58:51
>>801 Benjaminさんのexternal libraries ではうまくいきませんね^^;
アプリケーションエラーがでてしまいます。
あれ使えると楽なのになあ。
もう少しあがいてだめなら,私がビルドしたexternal librariesと
GnuWin32にexternal librariesでビルドする方法を書くとしますかね.

まだ,external librariesはgcc-3でビルド多くて多くがスタティックライブラリ
だから,この際新しいソースを手に入れてやってみます。

809:octave for windowsメモの筆者
09/03/11 15:16:25
>>807
gcc-4は一応まだαリリースですので,gcc-4.exe,g++-4.exe…となっており,
gcc-3.4.4と共存が可能です。

>>開発版ではoctave独自のMATLAB likeなgraphic backendを持つ
>3.1.xではそんな機能が入るんですか
まだ,開発途中ですけどね。今見てみるとあまりMATLAB likeではないですね。
OpenGL/FLTK graphics backend. This backend
can be enabled with the following commands:

input_event_hook ("__fltk_redraw__");
__init_fltk__ ();
set (0, "defaultfigure__backend__", "fltk");

OpenGLつかっているので3Dでご利益があるのかな。
いまのところは使い物にはなりませんね。
jhandleは生き残るのかな。gnuplot派なのであまり興味ないですが^^;



810:Octave + GotoBLAS (Cygwin上)
09/03/12 02:57:54
Cygwin 上での Octave バージョン 3.0.3 + GotoBLAS のインストール手順を
書いてみました 

URLリンク(133.5.18.167)

※ 今は gcc バージョン 3 にしています.そのうち gcc バージョン 4 にしたいと思っています.

お役に立ちたい,とは恐れ多いですが,フィードバックが欲しいので
(なかなか,ご返事できないかも知れないのはご容赦ください).

811:octave for windowsメモの筆者
09/03/12 08:10:41
>>810
大変丁寧に書かれていていいと思います。
gcc-4を使うと現在のSuiteSparse(3.2.0)はgcc-4でビルドしてあるので
バイナリがそのままが使えます。

また,SuiteSparseのoctave用ライブラリを作成するだけならビルドに
GotoBLASは不要です。checkができませんが。octaveでチェックすればいいので)

octave-3.0.4RC5では,liboctave/CSparse.ccなどへのパッチは不要でした。
ただし,プロットに致命的なバグがあり,別のパッチが必要ですが^^;
octave-3.0.4RC5はホームページにはなく,octave-maitainersのMLの
スレッドを探せば見つかります。(パッチも)

なお,MetisとGotoBLASは再配布不可なのでビルドしたバイナリを人にあげる
ことはできないことを明記してくださいね。
ここら辺は,欧米人は当然ですがうるさいので。

812:octave for windowsメモの筆者
09/03/12 12:00:07
>>810

cd /usr/local/bin
cp *.dll /usr/lib
は不要です。Unixの.soと違いwindowsの場合dllは,
そのdllを使うexeファイルと同じディレクトリかpathのとおったディレクトリ
に入れます。したがって/usr/local/binにあればよろしいので,libにコピー
しても意味はありません。/usr/libにおくのはlib??????.dll.aです。


813:octave for windowsメモの筆者
09/03/13 07:51:33
>>811 すいません。 SuiteSparseはblasにあわせてビルドしなおす
必要ありかもしれません。



814:octave for windowsメモの筆者
09/03/13 14:50:26
GotoBLASだと
make checkで引っかかりますね。ウーム。

test_sparse.m ..........................................panic: Segmentation violation
-- stopping myself...
ATLASは家では成功したんですがね。
すこしかかりそうですね<m(__)m>


815:octave for windowsメモの筆者
09/03/13 17:00:59
なんかコンピュータがおかしいと思っていたらメインのファンが回って
いなかった(T_T)
良く壊れなかったもの。ふた開けてUSB扇風機で冷やしています。
まあこれでいいかな。
>>800 は
>mingw-4.3.2-dw2-TDMでoctave-3.0.4RC3をビルドしたもの(ATLAS)
>MFLOPS = 4830.2
はMFLOPS = 4923.1になりちょっとあがりました。
Lapackのパッケージを使うと左除算がうまくいかず今は--without-lapack
でoctaveにはいっているサブセットのLapackでやると左除算がうまくいく。
GotoBLASにlapack-3.1.1へのパッチが入っているので
これを使わないといけなのいかも

また,GotoBLASの説明をよく読むとHyper ThreadingではPerformanceは出せないの
で物理コアの数で利くみたいですね。たしかにSMP=1として,並列Threadで
GotoBLASでやってみたけどほとんど変わらないですね。それだったらシングル
ジョブを2個立ち上げたほうが効率いいかなですね。

816:octave for windowsメモの筆者
09/03/13 17:05:02
>>810
Octave + GotoBLAS (Cygwin上)に私のページからリンク張ってもいいですか?




817:Octave + GotoBLAS (Cygwin上)
09/03/14 15:33:08
810 の投稿者です.
「octave for windows メモの著者」様,コメント,ご意見,ご示唆ありがとうございます.

個別にご返事せず,済みません.Web ページの改訂を行いつつあります.お陰様で,よい Web ページができそうです.

私が,掲示板の新参者で,「ずいぶん,厚かましいお願いをしてしまった」と恥じています.Web ページずいぶん細かく見ていただいてありがとうございます.

「私のページからリンク」は,もちろんOKです.名誉です.
事後報告で申し訳ないのですが,私の方からも,リンクを張り,相互リンクをお許しいただけますでしょうか? 

Web ページは,もう少し見直しを続けます.
GotoBLAS を見つけ,Octave に組み込んだとき,「こんなに速くなるのか」と感動しました.私は初心者なのですが,少しでもお役に立てればと思っています.

818:octave for windowsメモの筆者
09/03/16 07:57:46
>>817
相互リンクの件了解しました。よろしくお願いします。

819:octave for windowsメモの筆者
09/03/16 13:42:41
>>817
ATLASについて

URLリンク(math-atlas.sourceforge.net)
を見てください。cygwin上ではThreadの数のauto detectができないと
かかれています。

(eg., I add -t 4 to my Core2Quad configure command).

他にも直す点がありそうです。しかし,GotoBLASに勝てるかは
わかりませんが,ATLASのマックスの性能をだすにはこの点を指定する
必要がありそうです。


820:octave for windowsメモの筆者
09/03/16 18:21:48
>>819 うーむ。やって見たのですが。-lpthread以外になんかオプションが必要なのかな!

octave.exe:1> n=2000; A=randn(n); B=randn(n);tic; C=A*B; t=toc, MFLOPS=2*n^3/t*1e-6
assertion !pthread_mutex_lock ( &(ROOT->mutex) ) failed, line 74 of file /home/atlas/atlas3.8.2-gcc4.3.3-2/../ATLAS3.8.2
//src/pthreads/misc/ATL_signal_tree.c

export LIBS='-lstdc++ -lg2c -lpthread'
../../octave-3.0.3/configure --prefix=/usr/local/octave-3.0.3a --with-blas='-lptf77blas -lptcblas -latlas'


821:Octave + GotoBLAS (Cygwin上)
09/03/17 01:38:34
817 の投稿者です.
Atlas + Octave 3.0.3 (Cygwin 上) やってみました.
・インストールの手順を書いてみました
  URLリンク(133.5.18.167)
・「-t 2」有りと無しで,性能の差が出ないので,力尽きました.残念.
 (私が素人なのでいけないのですが)(うまくいくと面白いんだけどなあ)

822:Octave + GotoBLAS (Cygwin上)
09/03/17 02:56:37
821 の投稿者です.ミスがありました.次のように訂正します.
(済みません).

私が書いた「Atlas + Octave 3.0.3 (Cygwin 上) インストール手順」
URLリンク(133.5.18.167)
では:
■ Octave の make check が通らない 
  (src/syscalls.cc のエラー.力尽きて,原因が分かっていません).
■ 「-t」無しは 1.57 秒.「-t 2」は 0.87秒
CPU: Intel Core2 Duo E8500.
   x=rand(2000,2000); y=rand(2000,2000); tic(); z=x*y; toc()
ATLAS のことを分かっている人が,4コア以上の CPU を使うと,最高速
を叩き出せそう,と感じています.(私の力及ばず).


823:Octave + GotoBLAS (Cygwin上)
09/03/17 03:41:07
821 の投稿者です.
(再び,自己フォローです.済みません.確かめもせず,投稿している私がオッチョコチョイです.最新情報です)

■ ATLAS の configure の引数
../configure -t 2 -b 32 -D c -DWALL --prefix=/usr/lib/atlas --with-netlib-lapack=/tmp/lapack-3.2/lapack_LINUX.a
-t 2 は,「コア数が2個」というような意味
■ Octave の configure の引数
CC=gcc-4 CXX=g++-4 F77=gfortran-4 ./configure --prefix=/usr/local --with-blas="-L/usr/lib/atlas/lib -lptff77blas -latlas -lpthreads" --with-lapack="-L/usr/lib -llapack_LINUX -ltmglib_LINUX"

これで,Octave の make check は通過.

CPU: Intel Core2 Duo E8500 の場合
・「-t」無しは,およそ 1.57~1.60秒
・「-t」の場合,およそ 0.85~0.87秒
   「n=2000; A=randn(n); B=randn(n);tic; C=A*B; t=toc, MFLOPS=2*n^3/t*1e-6」の結果,
MFLOPS=1.8868e+04
と出てきます.
※ 819 番のご投稿に「>> 817」とありましたので,少しがんばってみました.






824:octave for windowsメモの筆者
09/03/17 10:03:35
>>823 すばらしい
Octave Cygwin+GotoBlas GFLOPS = 15.75

MFLOPS=1.8868e+04

おお!,ATLASは手間がかかりますが勝ってますね。
ATLASもいつのまにか3.8.3になってますね。
HPを参考に再チャレンジします。

あと,GotoBLASはcygwinで構築したliblapack.a
(lapack_LINUX.aをリネームしたもの)を使うとmingwで正常に動きました。

mingwのライブラリキットのリリースを手がけます。一部はまだ,gcc-3.4.5
でビルドしていますが,動作するのでとりあえずあげるのを優先します。
(ぼちぼち再構築します。)



825:octave for windowsメモの筆者
09/03/17 16:27:41
>>822

GNU FORTRAN コンパイラ・バージョン 3 を使うと,LAPACK バージョン 3.2 がうまくビルドできないことがあります(例えば,下記の通りです.状況によってエラーメッセージが変わります). 原因は不明です.

URLリンク(www.netlib.org)
の7. Install Procedureに
LAPACK-3.2 now requires a FORTRAN 90 compiler. (Do not try to compile with g77 or other 77 compilers.)

となっており,GCC-3のfortranはFortran 77ですから使えないのです。
いまやGCC-3はObsoleteです。Octave もDevelopment branch (3.1.x)ではGCC-3では
ビルドできません。というわけで,cygwinでもgcc-4に移行の最中なのです。

gcc-4 cygwinはついこないだ4.3.2-1のalphaバージョンから4.3.2-2の
betaバージョンになりました。

正式版がでたらgcc-4がgccになると思います。



826:Octave + GotoBLAS (Cygwin上)
09/03/18 12:44:31
>> 824, 825
ご親切に,ご教示ありがとうございます.確かに,gcc-4 が今後の主流だと思います.
 (Web ページは,別の面からみても,表現が不適切でしたので,見直しつつあります).

Windows は MinGW + Octave の方が,CYGWIN よりも需要が多い,と思いますので,
MinGW 版のリリースに期待している人は多いと思っています.

さて,もう1度実験してみました.
ソフト: Octave 3.0.3 + ATLAS (Cygwin)
ハード: Intel Core2 Quad Q9550 のマシン
x=rand(2000,2000); y=rand(2000,2000); tic(); z=x*y; toc()
⇒ 0.566~0.578秒
 ※ 詳細は URLリンク(133.5.18.167)
※ インストールに慣れている人でしたら,もっと速くなるような気がします.

827:名無しさん@お腹いっぱい。
09/03/18 19:06:51
>>797>>805 の者です
gcc-4, g++-4, gfortran-4で、Gtoblas, Cblas, Lapack3.1.1, SuiteSparse3.2をmakeしなおした上で
octave-3.0.3をやっとmakeしました。
つまづいたのは libstdc++.dll.a で、エラーの理由はよくわからないのでリネームして隠し
それでもSuiteSparseでエラーが出るので色々やった結果
(octave-3.0.3-1.src.patchをあてたのが効いたか、SuiteSparseのincludeファイルもインストールしたのどちらか)
どうにかmakeに成功したました。

マシンは自宅の Intel Core2Duo 2.1GHzです(2.4GHzマシンの12%落ちぐらいの性能のはず)。

octave:1> n=2000; A=randn(n); B=randn(n);tic; C=A*B; t=toc, MFLOPS=2*n^3/t*1e-6
t = 1.32200
MFLOPS = 12102.9

約12GFlopsでした。まあまあですね。
それで問題の比較演算なんですが、

octave:1> A=randn(100);tic;for jj=0:10000;B=(A>0)*1;end;toc
Elapsed time is 2.245 seconds.

一方、MSVCだと

octave:1> A=randn(100);tic;for jj=0:10000;B=(A>0)*1;end;toc
Elapsed time is 2.42354 seconds.

で、ほぼ同じ。これでやっと使えるようになりました。ありがとうございました。

828:名無しさん@お腹いっぱい。
09/03/18 19:26:05
>>824
その15.75GFlopsのは、Core2Duo 2.4GHzなのですが
Atlasの1.8868e+04MFlopsのは、Core2Duo E8500=3.16GHzなのです

なので、おそらくgcc-3を使ってGotoBlasで測定すると
2.4:3.2=15.75:X
でX=3.2*15.75/2.4=21GFlops
ぐらいになるはずです

それでAtlasの約19GFlopsというのはそれよりも若干低いわけですが、
このレベルになるとそれはもう細かい話で、再配布可能な点を考えれば
Atlasは十分実用的だと思われます。

829:名無しさん@お腹いっぱい。
09/03/18 19:55:27
長い行列などをless表示ではなくコンソールに残したまま表示することってできますか?
長めの出力を交互に見比べたいときにqで消えてしまうので不便です

830:名無しさん@お腹いっぱい。
09/03/18 19:57:15
829です。環境はwindows版です。
ここしかOctave関連が見つからなかったので質問しました。
よろしくお願いします。

831:名無しさん@お腹いっぱい。
09/03/18 20:25:38
>>829
more off
としてください

832:octave for windowsメモの筆者
09/03/19 08:51:45
>>829 >>830 >>831

この場合コンソールのバッファを増やしておくとよいでしょう。
スクリーンのoctaveのアイコン右クリック→プロパティ→レイアウト
→画面バッファのサイズ→高さ

変更すると確認の画面で
このウインドウを起動したショートカットを変更する
で設定を保存してください。

この高さの値をたとえば9999とかにしておくとlessなしでも結構いけます。

833:octave for windowsメモの筆者
09/03/19 08:59:11
>>828 ありがとうございます。GotoBLASの方がいい場合が多いが
配布に関するライセンスの問題があり,その点ではATLASがいいという
ことでしょうね

GotoBLASのライセンスはテキサス大学の Texas Advanced Computing Center
ものなので仕方ないのでしょうね。



834:octave for windowsメモの筆者
09/03/19 09:38:49
ここも800番超えたしそろそろ次スレたてを考えないととはおもうのですが。
>>439 次スレからはプログラム板に立てるか。
>様々なプラットフォームに対応しているプログラマブルな
>ソフトがUNIX板にあるというのがおかしい。

というような意見があるので,
ソフトウェア板
あたりなのかな。
タイトルは
「データ解析ツールoctaveを語ろう2」

octaveはデータ解析ツールだけでないので
シンプルに
「octaveを語ろう2」なのかな。


835:名無しさん@お腹いっぱい。
09/03/19 10:03:21
>>834
UNIX板でいいと思います
そもそもインストールネタしか無いぐらいの過疎スレですから
あっちこっち動き回るのは得策とは思えません

言語の内容的な論議はシミュレーション板やプログラム板のMatlabスレにまかせて
導入方法や、高速化などに特化した方がいいと思います

836:octave for windowsメモの筆者
09/03/19 11:02:28
>>835
なるほど。まあ,ビルドねたになるとwindows上でもMSYS+mingwやcygwin
などのUnixyなツールでやるわけで,Visual Studio云々にはなりませんよね。
最近やり取りしたGOTOBlasやATLASネタもUnix上の方がすこし便利というくらい
の話で基本は同じですからね。

データ解析ツールoctaveを語ろう2
でもいいですかね。名前よりもないようですからね。名前変えると
検索とかで大変ですからね。



837:名無しさん@お腹いっぱい。
09/03/19 15:48:25
行列演算を高めたOctaveで何が律速になってるのかのテスト
マシンはIntel Core2Duo 2.4GHz

MATLAB 7.6.0 (R2008a)
>> tic;for jj=0:10000;end;toc
経過時間は0.000066秒です
>> A=randn(200);tic;for jj=0:10000;B=(A>0);end;toc
経過時間は3.358699秒です
>> A=randn(4000000,1);tic;for ii=1:4000000,if A(ii,1)>0,end;end;toc
経過時間は0.118251秒です

Octave 3.0.3 (MSVC) ← BLASの関係しない演算なので
octave:1> tic;for jj=0:10000;end;toc
Elapsed time is 0.0079 seconds.
octave:2> A=randn(200);tic;for jj=0:10000;B=(A>0);end;toc
Elapsed time is 5.9 seconds.
octave:3> A=randn(4000000,1);tic;for ii=1:4000000,if A(ii,1)>0,end;end;toc
Elapsed time is 52.8131 seconds.

一番目はループテスト。tic,tocの誤差程度の差。
二番目は比較演算。Matlabより1.6倍遅い。けどそんなにひどくも無い。
三番目はif文。Matlabより50倍遅い。ここが明らかに律速。

Cygwin番のifはさらに1.5倍程度遅いもよう。
なので、if文は使わないようにして、比較演算に置き換えるべき。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch