MATLABプログラミング 質問箱 その3

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2デフォルトの名無しさん:2009/10/03(土) 10:34:00
>>1
乙!
3デフォルトの名無しさん:2009/10/03(土) 11:40:00
Figureのエクスポートの設定で「図の端まで軸を拡張」というのがありますが、
これのオンオフをプログラムから変更するにはどの関数を使えばよいのでしょうか?
4デフォルトの名無しさん:2009/10/05(月) 10:24:52
DirectXはサポートしていますか?
5デフォルトの名無しさん:2009/10/06(火) 00:44:22
最近仕事で使う事になりそうなんですけど
これが何の役にたつのかわかりません。。普段Cプログラマなんですけど。
フリーの類似ソフトで自宅で勉強しようと思うのですが
オススメ教えてください
6デフォルトの名無しさん:2009/10/06(火) 04:02:14
octave
7デフォルトの名無しさん:2009/10/06(火) 12:01:47
Matlab超初心者です。
データのインポートについて教えてください。
355x165の行列データ(csv形式)をインポートウィザードを使って取り込もうとしているのですが、
なぜか353x165のデータしか取り込むことができません(最後の2行が取り除かれる)。

どうやったら全データを取り込めるでしょうか。
よろしくお願いします。
8デフォルトの名無しさん:2009/10/07(水) 04:34:50
load('filename')
9デフォルトの名無しさん:2009/10/08(木) 19:30:31
リアルタイムでビデオカメラから入力している映像を
90°,180°など指定した角度だけ変化させて映像を表示させるプログラミングを
教えてください。
よろしくお願いします。
10デフォルトの名無しさん:2009/10/09(金) 07:02:24
入力部分はできてるの?
それならあとは簡単だけど
11デフォルトの名無しさん:2009/10/09(金) 09:53:13
9です。
ただ表示させるだけ(0°)ならできています。

あとImage Processing ToolboxやImage Processing Toolboxなどを
積んでいますが使うのでしょうか?
12デフォルトの名無しさん:2009/10/09(金) 16:31:48
2次元の情報を3次元的に使える?
13:2009/10/09(金) 16:42:17
matlabに触れたことがないので何もわからない状態です・・・
上記の入力部分とありましたが、使い方もわからずただpreview()とか書いてパソコンに表示
させただけです・・・
1からプログラミング内容を書いてもらえないでしょうか?
14デフォルトの名無しさん:2009/10/10(土) 02:45:13
>>9
a <-これにイメージ情報が入っているとして、
a=a'
これで90度回転するよ
15デフォルトの名無しさん:2009/10/13(火) 07:13:58
棒状のものを表示したいのですが、どのプロットが最適でしょうか?
16デフォルトの名無しさん:2009/10/13(火) 19:45:50
wavファイル保存についてなんですが
ファイル名を(ファイル名)001〜ってどうやるんですか?
録音したものを連番で次々保存していきたいんですが
17デフォルトの名無しさん:2009/10/15(木) 00:58:29
>>16
初心者だけど、numに連番入れるとして

wavname = [ '(ファイル名)' num2str( num, '%03d' ) '.wav'];

こんなとか、

wavname = sprintf( '(ファイル名)%03d.wav', num);


こんな感じかな?
18デフォルトの名無しさん:2009/10/15(木) 12:53:05
Fortran-MEXプログラムについて質問。

サンプルプログラムのtimestwo.f
(参照)http://dl.cybernet.co.jp/matlab/support/manual/r14/toolbox/matlab/matlab_external/?/matlab/support/manual/r14/toolbox/matlab/matlab_external/ch_mex_i.shtml

   〜省略〜
if(nrhs .ne. 1) then
call mexErrMsgTxt('One input required.')
elseif(nlhs .ne. 1) then ←ここが変。(nlhs .gt. 1)ならスルーされる。
call mexErrMsgTxt('One output required.')
endif

   〜省略〜
call timestwo(y, x, nlhs)    ←nlhsの値を確認するため引数で渡す。
   〜省略〜

subroutine timestwo(y, x, nlhs)
integer nlhs
real*8 x, y
y = nlhs    ←nlhsを出力するようにする。
return
end

例の通りx=2として(意味はないけど)コマンドウィンドウでtimestwo(x)を実行すると
ans= -7.2877e+17 と出ます。原因が分かる方がいらっしゃれば、ご教示願います。
19デフォルトの名無しさん:2009/10/23(金) 07:01:02
do-whileってmatlabに無いの?
20デフォルトの名無しさん:2009/10/25(日) 10:23:20
マッチョラボだと入るのに勇気がいるよね( ・ω・)y─┛〜〜
21デフォルトの名無しさん:2009/10/27(火) 00:26:12
22デフォルトの名無しさん:2009/10/28(水) 05:48:08
>>21
kwsk
23デフォルトの名無しさん:2009/10/28(水) 23:09:44
>>22

hi
one of the solutions:


t = true;
while t

t = some_condition;
end
24デフォルトの名無しさん:2009/11/03(火) 19:36:47
MATLAB R2009aを使っているのですが、たとえば

A=[1 3.5 5]; B=[-3 5.7 -5]; C=[4 4 8];

のようなプログラムを入力したとき、空白をタブキーで区切ると、空白の幅が一定にならないのが気持ち悪くって悩んでいます。
空白の幅を一定にするにはどうすればいいのでしょうか?
25デフォルトの名無しさん:2009/11/05(木) 07:58:07
タブとはそういうものだと思うが
26デフォルトの名無しさん:2009/11/06(金) 00:52:16
>>24
空白をスペースで入力すれば?
27デフォルトの名無しさん:2009/11/06(金) 12:05:08
初歩的な質問で申し訳ないんですが、
A=imread('test01.jpg');
で画像を取り込んで
image(A)
で表示するのはできたんですが、
表示された画像の任意の場所をクリックして、そのクリックされた座標を調べるにはどうしたらいいでしょうか?

やりたいことは、2点の点をクリックして座標を出し、その2点間の距離を求める ということです。
28デフォルトの名無しさん:2009/11/06(金) 16:12:25
>>27
ginput
29デフォルトの名無しさん:2009/11/09(月) 02:04:44
ランダムな行列から
○列目の値が△である行を全て抽出して
新たな行列を作るはどうしたらいいでしょうか?

誰か教えてください
30デフォルトの名無しさん:2009/11/09(月) 03:18:13
なんかR2009bにしてからしょっちゅう固まる…何故だろう
31デフォルトの名無しさん:2009/11/09(月) 09:50:47
> 29
ind = hogehoge(:,○)==△;
hogehoge2 = hogehoge(ind,:)
32デフォルトの名無しさん:2009/11/09(月) 10:25:12
>>31
findが必要なんじゃないの?

ind = find( hogehoge(:,○)==△);
3329:2009/11/09(月) 21:02:54
>>31-32
ありがとうございました
成功しました
34デフォルトの名無しさん:2009/11/11(水) 01:21:27
関数ではない波形、例えば地震波形などを積分したい場合は自前で台形公式
などを作って積分するしかありませんか?
trapez やquadは対象が関数の形になっているものしか無理っぽいのですが。
よろしくお願いします。
35デフォルトの名無しさん:2009/11/11(水) 05:45:03
そういう時系列データなら、
sum(data)*dt
じゃだめなの?
36デフォルトの名無しさん:2009/11/15(日) 13:06:49
xlswriteを使ったプログラムを作ってます。
動作自体は問題ないのですが、xlswriteを呼び出した回数だけプロセスにEXCEL.EXEが残ってしまいます。
正しくプロセスを終了させる工夫はあるのでしょうか??
37デフォルトの名無しさん:2009/11/15(日) 16:18:29
>>34
trapzでいけるはずだ。台形近似で定積分できる。
tはサンプリング時間、wはその時点での値。tは等間隔じゃなくってもいける。

 s = trapz( t,w );
38デフォルトの名無しさん:2009/11/15(日) 20:07:30
>>32
findいらないよ
39デフォルトの名無しさん:2009/11/16(月) 02:04:16
個人的覚え書き
秀丸で、matlabの' 'を文字定数にしたい場合
'.*'では
アポストロフィー演算子の扱いに困るので前方不一致を使って
(?<!\))'
だと(1 2)'とかを避けてうまくいくようだ。
40デフォルトの名無しさん:2009/11/17(火) 04:26:59
inputdlgから取得した文字列がanswerに格納されていると思うんですが
str2num(answer(1));
といった感じで文字列から数値に変換しようとすると
『文字列を入力してください』
といった類のエラーが出ます。
色々と試してみましたが解決できませんでした。
よろしければこの解決方、あるいは
この文字列を数値に変換する他のすべを教えて頂ければと思います。
41デフォルトの名無しさん:2009/11/17(火) 14:52:16
40ですが自己解決しました
inputdlgの戻り値がキャラ型じゃないというだけでした
こんな簡単なことにも気付かなかったなんて……
ググレカスな質問をしてしまい、申し訳ありませんでした
42デフォルトの名無しさん:2009/11/19(木) 15:03:19
(x,y)のような位置情報データをfigureにマップのように表示したいのですが、そのような方法はありますか?
43デフォルトの名無しさん:2009/11/19(木) 23:56:12
ありますよ
44デフォルトの名無しさん:2009/12/01(火) 23:22:40
マットラブ エックスポ 20009 行ってくるぜ
45デフォルトの名無しさん:2009/12/04(金) 10:37:50
mexファイルを使おうとしてコマンドプロンプトでmex -setupと打つと、
1にはlcc
2にはNone
となってしまってVC++が選択できません。
VC++はインストール済みです。何が問題なのでしょうか?
46デフォルトの名無しさん:2009/12/04(金) 11:30:31
>>45
そもそも普通にVCは使えているのですか?環境変数が設定されていないのでは?MSVCDirとかさ。

直接、VCをつかうようにするには

C:\Documents and Settings\(ログイン名)\Application Data\MathWorks\MATLAB\(リリースバージョン)

のフォルダーにmexopts.batがあるから、そこにVCの設定にすればよいはず。
最適化のオプションも設定後、自分でこのパラメータを変更すればよい。
47デフォルトの名無しさん:2009/12/04(金) 11:57:45
>>46
VC(2008)は普通に使えています。
matlabも普通に使えています。

MSVCDIRは設定されていませんでしたが、VS90COMNTOOLSが設定されていました。
MSVCDIRをユーザー/システム環境変数にC:\Program Files\Microsoft Visual Studio 9.0\VC\binと設定し、
setupを試しましたが現れませんでした。(再起動が必要?)

mexopts.batに関してはCompiler parametersの辺りを変更するということでしょうか?

ただ、環境変数のパスのあたりをどう設定してよいか・・・
48デフォルトの名無しさん:2009/12/04(金) 12:21:27
>>47
MATLABをインストールしたフォルダーにbin\win32\mexoptsがあって、そこに様々なコンパイラー用のバッチが用意されている訳で
それが、
C:\Documents and Settings\(ログイン名)\Application Data\MathWorks\MATLAB\(リリースバージョン)にコピーされているのだと思う。
だから、mexoptsフォルダーの中をみて、Microsoft Visual Studio 9.0用の物をマニュアルでコピーすればよいはず。

うちはMATLAB R7.1で止まっているので、ファイル名は不明だけど、過去のバージョンから類推するとmsvc90opts.batなのかな?
まあ何で表示されないのかわからんけど、Microsoft Visual Studio 9.0をサポートしていないのかな?
49デフォルトの名無しさん:2009/12/04(金) 12:42:37
>>48
こちらもmatlabは7.1でしたので、デフォルトではmsvc90opts.batはありませんでした。
ネットで探してみたところ本物かはわかりませんが見つけたので、
試したところコンパイルできるようになりました!

色々とありがとうございました。
50デフォルトの名無しさん:2009/12/05(土) 00:42:50
上の質問と少しカブるかもしれませんが、
Visual Studio9.0のVisual Studio2008で作ったC++ファイルを
MatlabR2006aでmexしようとしたら
「Could not find the compiler "cl" on the DOS path.
Use mex -setup to configure your environment properly.
C:\Program Files\MATLAB\R2006a\BIN\WIN32\MEX.PL: Error: Unable to locate compiler. 」
となるのですが、これはなぜでしょうか?
解決法を教えていただけませんか?
51デフォルトの名無しさん:2009/12/05(土) 09:25:10
>>50には来週から営業をやってもらおう
52デフォルトの名無しさん:2009/12/05(土) 11:27:22
>>50
お前の頭、機械以下じゃね?
53デフォルトの名無しさん:2009/12/08(火) 17:56:07
matファイルの中身(変数名やその値など)が全くわからないとき、
何かしらの方法で出力できませんか?
専用の閲覧エディタや出力するスクリプトなど・・・
54デフォルトの名無しさん:2009/12/08(火) 18:11:48
MATLAB 変数名でググった4つ目
55デフォルトの名無しさん:2009/12/10(木) 17:27:45
VC2008で作ったものをMatoabでMexしようとしたら、「windows.hが見つかりません」と出たので、パスを設定したつもりなのですができませんでした。
パスの設定方法は「ファイル→パスの設定」でやったのですが、やり方が違うのですか?
56デフォルトの名無しさん:2009/12/10(木) 17:59:06
windows.hなんて必要ないんじゃないの?
57デフォルトの名無しさん:2009/12/10(木) 18:22:00
説明少なくてすみません。
C++でDirectSoundで再生するものを作り、それをMexしようとしました。
そこでwindows.hをincludeしました
58デフォルトの名無しさん:2009/12/11(金) 12:37:03
maxで最大値を出すことはわかるんですが
最大値の位置を求めるにはどういうコマンドを使えばいいのでしょうか?

例えば
A=[2 52 5 9 20 32];
B=max(A)
B=52
ここで位置を求めるコマンドを使って
A(1,2)が最大値だということが知りたいわけです。
59デフォルトの名無しさん:2009/12/11(金) 13:17:00
maxのリファレンスを見ましょうね。
60デフォルトの名無しさん:2009/12/11(金) 16:55:24
[B,pos] = max(A)
でいいんじゃないの?
61デフォルトの名無しさん:2009/12/15(火) 01:11:52
mファイル内で音楽を再生させてから表示させる時、
a=100;
sound(S,fs);
a
とすると再生と同時に表示が行われてしまいます。
これを再生が終わった時に表示するようにしたいのですが、どうすればいいですか??
62デフォルトの名無しさん:2009/12/18(金) 00:59:11
matlab初心者です。初歩的なことかもしれませんが質問させてください。

カレントフォルダ内に100個のフォルダ(Folder_1〜Folder_100)があり、その中に1つずつファイルが入っています。
(Folder_1にはFile1、Folder_2にはFile2、.......)

これをfor文を使って、
Folder_1 で File1 を読み込んで描画して Folder_1 内に Picture2 という名前で保存、
Folder_2 で File2 を読み込んで描画して Folder_2 内に・・・・

というように Folder_1〜Folder_100について繰り返したいのですが、どうしたら良いのか分かりません。
6362:2009/12/18(金) 01:00:23
続きです

for i=1:100
 FolderName=sprintf('Folder_%d',i)・・・FolderName=Folder_i
 FileName=sprintf('File%d',i)
 PictureName=sprintf('Picture%d',i)
 cd FolderName・・・Folder_iフォルダに入る
 surf(FileName)・・・FileNameを描画する
 print -dbmp PictureName・・・PictureName.bmpで保存
 cd ..・・・元のフォルダに戻る
end

とすれば良いのかと思ったのですが、 
FolderName=sprintf('Folder%d',i)
cd FolderName 
の部分で、 ??? Name is nonexistent or not a directoryとなり、

PictureName=sprintf('Picture%d',i)
print -dbmp PictureName
では、PictureName.bmpという名前で保存されてしまいました。

やり方ご存じないでしょうか?
64デフォルトの名無しさん:2009/12/18(金) 02:01:00
>63
cd FolderName
だとFolderNameが変数じゃなくてリテラルとみなされるようで
cd(FolderName)
だと変数として扱われるようです。
65デフォルトの名無しさん:2009/12/18(金) 17:35:48
関数f(t)と時間反転した関数f(-t)の畳み込みって自己相関に等しいですよね?
matlab上で、
  conv(f(t),f(-t))  と xcorr(f(t))
が等しくならないのはなぜでしょうか?
また、この方法が間違ってる場合、f(t),f(-t)を用いて自己相関を表現する方法があれば教えていただけないでしょうか
6662:2009/12/19(土) 00:15:50
>>64
できました。
ありがとうございます!
67デフォルトの名無しさん:2009/12/19(土) 12:30:35
>>65
携帯からだから説明面倒だからしないけど、

とりあえずyahooで「MATLAB conv」で検索すれば法政の小林研究室の講義資料がトップに出てくるはずだから、それを読めば幸せになれるよ。
68デフォルトの名無しさん:2009/12/21(月) 15:50:35
>>67
自分の頭では同じと書いてあるようにしか読めませんでした……
自己相関の場合conv(f(t),f(-t))でいいと書いてるようですが……
69デフォルトの名無しさん:2009/12/21(月) 15:59:11
連投すいません
整数で試してみたら出来ました
今やってるのはデータが複素数なので、そのあたりに原因がありそうな気がします
70デフォルトの名無しさん:2009/12/26(土) 18:40:21
MATLABについて質問なんですが、
私が今回作ったプログラムにかなり大きいfor文がありまして、いざデバッグしてみると、エラーも吐かずちゃんと動いてるのですが明らかにおかしい結果が出てしまうのです:

そこで、MATLABにはブレークポイントという便利な機能があるって聞いて、使ってみたらとてもすばらしい機能でした^^;
しかし、行が多くなるにつれてクリックするのがめんどい…w だれかこれを一気に全行に設定できる機能orコマンド知りませんか?

私の環境はWindows XP Pro MATLABR2006aです;
どうかご教授くださいー!;
71デフォルトの名無しさん:2009/12/26(土) 18:54:51
>>70
教授ではないので教授できません。
72デフォルトの名無しさん:2009/12/27(日) 23:47:38
全行にブレークポイント入れたら今度はデバッグ時に
更なるクリック連打になって余計面倒な気が…
73デフォルトの名無しさん:2010/01/04(月) 13:44:31
ループごとにtest1、test2、test3...と変数の最後の数字を変更して変数を作りたいのですがどのようにすればいいのでしょうか?
74デフォルトの名無しさん:2010/01/04(月) 23:34:50
>>73
ループでカウントアップする変数と
'test'って文字列をくっつけてevalすれば良いと思うよ
75デフォルトの名無しさん:2010/01/05(火) 13:55:20
>>74
変数の中身をtest1...としたいのではなく、変数として宣言したいのですがそれもevalで可能ですか?
76デフォルトの名無しさん:2010/01/05(火) 14:36:47
>>75
やじうまです。変数をプログラム実行中につくるわけですよね。で
それは、何に使うのでしょうか?配列とかでは代用できないのでしょうか?
77デフォルトの名無しさん:2010/01/05(火) 18:58:59
>>76
配列でも代用は出来るのですが、すでに2次元配列になっていて3次元にするとややこしくなるかなと思いまして
使えれば便利だなと思ってる程度で、絶対に必要というわけではないですね、すいません

使い方としてはループごとに新しい変数に2次元配列を格納するといった感じでしょうか
1ループ目はtest1に、2ループ目はtest2に...といったイメージです
78デフォルトの名無しさん:2010/01/05(火) 19:44:23
>>77
「matlab eval」でぐぐって最初のところ(これ、マニュアルかな)にある例をみると
代入文のevalもできるみたいですね。
79デフォルトの名無しさん:2010/01/05(火) 22:07:44
>>77
それを文字列+ループナンバーで合成した新しい変数に
ぶっこむと、あとあとの処理を書くのが面倒くさくなる気がする。
変数名リストを作っておいて、まいどまいどeval、とか。
やたらと変数がとっ散らかって美しくないし。
3次元配列とか構造体でいいじゃない。
80デフォルトの名無しさん:2010/01/07(木) 16:58:05
randを使って乱数を発生させているのですが、プログラムを実行するたびに同じ乱数を発生させてしまいます
実行するたびに違う乱数を発生させたいのですがどうすればいいでしょうか?知恵をお借りしたいです
81デフォルトの名無しさん:2010/01/07(木) 22:43:38
>>80
会社じゃないとMATLABがないので確認できませんが
適当に検索したR13のマニュアルによると
「randは、実行するたびに異なる値を出力します。」
だそうです。
自分の記憶でも、そうなっていたような。

手元にあるFreeMat V3.6だと毎回違う出力になりますが、
なんの参考にもならないですね…
82デフォルトの名無しさん:2010/01/07(木) 22:47:13
83デフォルトの名無しさん:2010/01/07(木) 22:49:10
>>80

rand('state',0)で最初の状態にリセット
rand('state',j)でj番目の状態になる。
jを固定すれば、毎回、同じ一様乱数を発生する、だと思う。
乱数と言っても疑似乱数ですから、ある周期のどこかを取ってきているだけですので、こんな感じになるんだと思います。
84デフォルトの名無しさん:2010/01/08(金) 02:35:26
randのアルゴリズムってどうなってんの?
8580:2010/01/08(金) 16:40:07
rand('state',sum(100*clock));

と書くと毎回ランダムになると聞いたのでプログラムに追加してみたのですが、何も変わりませんでした
置く場所はrandを使う直前じゃないとダメとかそういう決まりがあるんですかね?
プログラムの内容が変わると違う乱数になるみたいですが、結局またその乱数で固定されてしまいます
86デフォルトの名無しさん:2010/01/08(金) 17:43:55
>>85

> rand('state',sum(100*clock));
これを最初に1回だけ実行すれば、時刻で初期化されて違う系列の乱数に
なりそうですけどね。
やっぱり、ことばで説明するよりソースをあげた方が解決が早いかも。
8780:2010/01/08(金) 18:01:12
rand('state',sum(100*clock)); の場所を変更したら毎回違う乱数を発生させてくれるようになりました
回答してくださった皆さんありがとうございました
88デフォルトの名無しさん:2010/01/20(水) 18:36:04
初歩的なことで申し訳ないですが、方法が上手く検索できなかったので質問させてもらいます

たとえば20個あるデータをAとして、その平均を取るときは
 mean(A)
でいいと思うのですが、
間の10番だけ飛ばして平均を取る、といったような事は出来るのでしょうか?
1〜9、11〜20を足して19で割り、平均したいのですが
89デフォルトの名無しさん:2010/01/22(金) 02:04:41
mean(A([1:9 11:20]))

こんな感じかもしれない
90デフォルトの名無しさん:2010/01/22(金) 17:08:15
>>89
やってみたら出来ました!
そんなところに括弧つければよかったんですね、知りませんでした
91デフォルトの名無しさん:2010/01/23(土) 12:22:26
質問です
Genetic Algorithm and Direct Search Toolboxで組合せ最適化問題を解きたいのですが、
整数であるという制約はどのようにしたらいいですか??
c<=0 ceq=0でしかできないのでどうしたらいいか困っています
よろしくお願いします
92デフォルトの名無しさん:2010/01/24(日) 23:46:23
最適レギュレータで質問です。
A=[1 0;2 -1]
b=[1;0]
c=[1 -1]
Q=[1 0;0 1]
r=1
設計したいのですが「lqr」を使ってプログラムを組んでみたのですがエラーが出てしまいます。
教えてください。お願いします。
93デフォルトの名無しさん:2010/01/30(土) 08:40:59
デフォルト値はどのファイルに書けばいいのか?
94デフォルトの名無しさん:2010/02/02(火) 13:00:33
配列の中の最大値はmaxで求まるのですが、
配列の中の最大値の場所を調べる関数と言うものはあるのでしょうか?
今はfor使って探していますが、関数としてありそうな気がしたので質問させてもらいました
95デフォルトの名無しさん:2010/02/02(火) 15:16:06
>>94
maxでできる
help maxで確認してください
96デフォルトの名無しさん:2010/02/02(火) 15:18:40
質問です
(x,y,R,G,B)のimageで扱えるようなデータがあり、
そのデータを(x,y)がある多角形の中に入るものだけプロットさせたい
と考えています
これって可能でしょうか
97デフォルトの名無しさん:2010/02/03(水) 15:26:27
98デフォルトの名無しさん:2010/02/04(木) 02:32:50
>>96
可能ですけど。
99デフォルトの名無しさん:2010/02/04(木) 16:12:52
>>97
一度されていた質問をしてしまって申し訳ない……
しかし助かりました、ありがとう
100デフォルトの名無しさん:2010/02/05(金) 19:06:49
>>98
そうですかー
101デフォルトの名無しさん:2010/02/07(日) 21:31:10
質問です.
行列を返す関数の要素にそのままアクセスする方法を誰かご存知でしょうか?
たとえば, size(A)の第2要素をアクセスするのに
S = size(A)
elem_2 = S(2)
といった書き方をもっと短い書き方(イメージで言うと (size(A))(2)のような表記 )
でやる方法ってありませんか?
102デフォルトの名無しさん:2010/02/08(月) 00:43:15
できません
103デフォルトの名無しさん:2010/02/08(月) 19:47:26
一部の関数では
elem_2 = size(A, 2)
のように書ける
104デフォルトの名無しさん:2010/02/08(月) 23:25:44
>>102, 103
ありがとうございます。基本無理だけど一部引数にとるものもあるんですね。
105デフォルトの名無しさん:2010/02/10(水) 01:31:23
matlab超初心者です。
1*1*512の変数を1*512の変数に置き換えるには
どうしたらいいんでしょうか?
ほんと初歩的な質問で申し訳ないです。
106デフォルトの名無しさん:2010/02/10(水) 03:12:26
reshape使えば出来るけど、次元変更はできたっけ?
1*512*1に変換できれば良いんじゃないの?
107デフォルトの名無しさん:2010/02/10(水) 18:52:14
>>106
ありがとうございます。
おかげでできました!
108デフォルトの名無しさん:2010/02/13(土) 12:16:06
フォントの大きさなどの標準の値って変更することができますか?
もしやり方があれば、教えてください。
109デフォルトの名無しさん:2010/02/16(火) 15:43:05
110デフォルトの名無しさん:2010/02/27(土) 22:03:30
離散系のBode線図を描くと-180[deg]で折り返してくれない(-300degとかになる)です、何か解決法はありますか?
111デフォルトの名無しさん:2010/03/04(木) 15:22:42
入力信号をフィルタに通し出力するとき
出力波形の周波数振幅特性の図を出力したいのですが

y=filter(係数,入力信号)
X=fft(x);Y= fft(y)
LY=20*log10(abs(Y)/max(abs(X)));
plot(F,LY);

とするのですが、plotの所のFがなんなのかよくわからないのですが
わかる方がいらっしゃったら、ぜひご教授ください。
112デフォルトの名無しさん:2010/03/04(木) 15:37:48
周波数特性を描くのなら、X軸は周波数ではないかと
113デフォルトの名無しさん:2010/03/04(木) 15:39:14
>>110
-180より小さいものは360を足す、っていう1工夫をすればよいのでは
114デフォルトの名無しさん:2010/03/04(木) 15:55:52
>>112
アナログで0〜8000[Hz]までをプロットするというものなんですが
Fは周波数をそのまま入れればよいのか、それとも

F=0:8000;

と範囲を指定した方がいいのかどっちなのでしょう?
115デフォルトの名無しさん:2010/03/07(日) 12:26:23
FFTの結果に対応するFになりますよ
116デフォルトの名無しさん:2010/03/08(月) 14:15:58
MATLABで作った図をWordで読み込みたいんですが
どうセーブするのがいいのでしょう?
117デフォルトの名無しさん:2010/03/08(月) 19:52:02
emf
118デフォルトの名無しさん:2010/03/08(月) 21:28:32
epsも対応してるだろ
バージョンにもよるけど概ねeps最強
119デフォルトの名無しさん:2010/03/09(火) 17:33:37
emfのほうがキレイに印刷できるような気がするんだけど
それって俺だけ?
120デフォルトの名無しさん:2010/03/09(火) 22:51:57
線は太めのほうがきれいにみえるかも
121デフォルトの名無しさん:2010/03/15(月) 17:58:21
ある時系列の移動平均をとりたいのですが
どうやればいいのでしょうか?
122デフォルトの名無しさん:2010/03/15(月) 18:58:23
係数を定義してコンボルーションconvでおk
123デフォルトの名無しさん:2010/03/17(水) 00:56:05
質問です。
mfilt.cicinterpでノーマライズ(0dB)する方法が分かりません。

ちなみにmfilt.cicdecimではノーマライズができるのですが、
mfilt.cicinterpでは0dBにノーマライズすることができませんでした。
分かる方がおりましたらご教授お願い致します。
124デフォルトの名無しさん:2010/03/17(水) 16:30:18
>>122
端の処理が面倒じゃない?
125デフォルトの名無しさん:2010/03/17(水) 16:39:55
>>121
filterでもいいかも
126デフォルトの名無しさん:2010/03/17(水) 17:34:25
>>124
移動平均なんだからどんな場合でも端の処理は面倒
127デフォルトの名無しさん:2010/03/23(火) 11:44:02
行列のある要素の周囲から最小値を見つけそのインデックスを知りたいのですが、どうしたらいいでしょうか?
例えば、a22を中心としたらa11,a12,a13,a21,a23,a31,a32,a33の中から見つけるということです。

とりあえずfindやminを使えばよさそうだと思ったんですが分かりません
128デフォルトの名無しさん:2010/03/25(木) 17:24:43
端のことを考えないとすると

a22のまわりの9個の要素をreshapeして1行に入れる
[C,I] = min(A) で何番目が最小か分かる
indexに直す

でどう?
129デフォルトの名無しさん:2010/03/26(金) 10:00:10
minでいいんじゃないの?
130デフォルトの名無しさん:2010/03/27(土) 10:09:12
ちょっとかっこ悪いけど、これでできた
[x,y]=find(A=min(min(A)))
131デフォルトの名無しさん:2010/03/27(土) 10:28:56
>>130
min(min(A))は min(A( : ))でいいだろう。(:)でマトリックスを縦ベクトルにするからね。
132127:2010/03/27(土) 11:15:25
皆さんどうもです。
残念ながら>>127の考え方自体があまり有効な方法じゃなかったことが発覚してしまったのですが、
今後使うかもしれないので参考にさせていただきます。
133デフォルトの名無しさん:2010/04/04(日) 15:11:00
>>131
indexがいるのです
134デフォルトの名無しさん:2010/04/07(水) 23:52:02
四分値を調べるコマンドはありませんか?
135デフォルトの名無しさん:2010/04/10(土) 09:46:56
quartile.mっていうのでぐぐれ
136デフォルトの名無しさん:2010/04/21(水) 13:40:42
MATLAB2008をインストールしたら、無線LANでネット接続ができなくなっちゃった。
原因わかる方いますか?
137デフォルトの名無しさん:2010/04/21(水) 19:15:40
どういう設定なのかもわかんないのに、答えようがない
138デフォルトの名無しさん:2010/04/23(金) 00:30:40
2008なんて、どうして今頃インストールするんだよw
139デフォルトの名無しさん:2010/04/25(日) 01:31:30
GUIDEで、uigetfileを使って、csvデータを読み込むGUIを作ろうとしたのだが、
データをワークスペースに渡せず、消えてしまうのだが、なにかいい方法ないかな?
140139:2010/04/29(木) 01:27:38
すみません。
自己解決しました。
globalで宣言しておけばおkでした

141デフォルトの名無しさん:2010/04/30(金) 18:18:39
globalにしなくっても、引数で渡す手もあるよ
142デフォルトの名無しさん:2010/05/01(土) 03:05:20
function FileOpen_pushbutton_Callback(hObject, eventdata, handles)

[filename, pathname] = uigetfile( ...
{'*.m;*.fig;*.mat;*.mdl;*.csv','MATLAB Files (*.m,*.fig,*.mat,*.mdl)';
'*.m', 'M-files (*.m)'; ...
'*.fig','Figures (*.fig)'; ...
'*.mat','MAT-files (*.mat)'; ...
'*.mdl','Models (*.mdl)'; ...
'*.*', 'All Files (*.*)'}, ...
'Pick a file');

global data1;
data1=importdata(filename);

こんな感じなのだが・・・
引数だとどうすればよい?
143デフォルトの名無しさん:2010/05/02(日) 15:30:19
普通の返り値がある関数と同じじゃないの?
144デフォルトの名無しさん:2010/05/05(水) 11:48:20
すみません、初心者です
質問させてください

for文(例えば x = 1:8)のなかで
末尾にその時のループの数字を付加した変数を使いたいのですが

x = 1 のとき y1
x = 2 のとき y2
...
x = 8 のとき y8
(↑のようにです)

xとyを使ってどのように記述すれば、思っているように
動作させられるでしょうか
145デフォルトの名無しさん:2010/05/11(火) 00:48:27
>>144
eval使えば出来るけど、
それよりもYを1つの構造体にして、

for x = 1:8
  [ y{x} を使った処理 ]
end

とすればやりたいこと実現できると思うよ。
146145:2010/05/11(火) 00:49:12
構造体じゃなくてセル配列だった。
147デフォルトの名無しさん:2010/05/11(火) 16:06:46
セル配列って、使ってて分かりにくくありません?
なんでも放り込めてしまうので、視認性の悪いスクリプトになるような気がします

自分はeval派ですね
148デフォルトの名無しさん:2010/05/11(火) 17:14:22
evalよりまし
149デフォルトの名無しさん:2010/05/12(水) 18:46:22
evalは慣れたら分かりやすいよ
150デフォルトの名無しさん:2010/05/13(木) 21:25:20
C/C++言語MEXファイルについての質問です。
スレ違いでしたらすみません。

MEXファルの作り方の解説は様々なサイトで見つけることができますが、
ほとんど全てMEXファイルの中で処理が閉じていて、
既存のC/C++ライブラリを呼ぶための方法がよくわかりません。
(もちろんmathworks社のドキュメントは探しました)

例えば
MATLAB Compiler チュートリアル(※pdfファイルです)
http://www.mathworks.jp/mason/tag/proxy.html?dataid=11817&fileid=56811
の「3.4 コンパイル」に説明が載っているのですが、これでは全然ダメで、
mathworks社のサイトも同様の説明でした。

Linux の場合は
http://www.edu.cs.kobe-u.ac.jp/~mori/Matlab/mexmemo.html
にありますが、windowsの場合、特にVC++についての情報を
知りたいと考えています。

すなわち、既にC/C++のライブラリがあり、それには手を加えることなく
呼び出すための方法ということになります。

どなたか解説しているサイトやサンプルソースなどご存知でしたら
教えていただけないでしょうか。

よろしくお願いします。
151デフォルトの名無しさん:2010/05/14(金) 20:03:27
アク禁なのでケータイから
mex foo.c bar.lib
こんな感じで答えになってる?
ヘルプのwritting s-functionsとかにwrapper s-functionsなんてのがあったと思うけど
152デフォルトの名無しさん:2010/05/16(日) 18:11:52
本家で解説あるじゃん
153デフォルトの名無しさん:2010/05/20(木) 20:25:22
音声の信号処理をしたいのですが、変なことでつまずいています
例えばなのですが、下を実行したときに結果のyは
1から-1の範囲に正規化されているかと思いますが
同じyをwavwriteしたファイルを、2ビットずつfreadした時のように
16ビットの量子化をした整数値として、直接yを得たいのです(正規化せずにshort型で)

f=400;
Fs=16000;
T=0.5;
t=0:1/Fs:T;
y=sin(2*pi*f*t)

色々検索してみましたが、それらしいものとして
int16(y)などとやってみても何故か全て0になっていたりで
解決できませんでした
分かる方いらっしゃいましたら助力いただけると幸いです
154デフォルトの名無しさん:2010/05/20(木) 20:26:11
>2ビット
2バイトの間違いでした、すみません
155デフォルトの名無しさん:2010/05/21(金) 21:11:52
>>153
int16(((2^(16-1))-1).*y)でよくない?
細かいとこはwavwriteしたもんと比べて確認してくれ。

ところで、今のmatぁbは
ouble以外の型でも普通に演算できるの?
Ver6 R12の頃なんだけど、
intのままだとエラーになったんだよね。
int8->doubleに変換->計算->int8に変換
とかやった記憶があるよ。
メモリの節約の意味しかなかった。
156デフォルトの名無しさん:2010/05/22(土) 22:45:46
mファイル用を秀丸で使いたいのですが、強調表示の設定ファイルありませんか?
157デフォルトの名無しさん:2010/05/28(金) 07:38:52
電子雲のようなものを表現する方法を教えてください。
158デフォルトの名無しさん:2010/05/28(金) 11:05:23
>>157
plot3
でもOpenDXとかの方がいいとおもうよ
159デフォルトの名無しさん:2010/05/28(金) 12:55:07
>>158
ありがとうございます
ちょっと試してみます
160デフォルトの名無しさん:2010/05/28(金) 17:07:15
>>158
plat3で'.'で表示してみましたが、どうも今市です。
具体的なコードを教えていただけませんか?
161デフォルトの名無しさん:2010/05/28(金) 17:21:57
自己解決しました。
ありがとうございました。
162デフォルトの名無しさん:2010/05/28(金) 18:58:14
plot3じゃ、雲のような表現は無理なんじゃない?
163デフォルトの名無しさん:2010/05/30(日) 14:03:27
ふぅ、やっとr2010aダウソ終わったぜ
164デフォルトの名無しさん:2010/06/02(水) 16:26:44
またアップグレードするのか、と思うと気が重いな
165デフォルトの名無しさん:2010/06/03(木) 17:36:49
地図って書かせることできますか?
166デフォルトの名無しさん:2010/06/03(木) 19:25:10
C言語におけるconst修飾子のように
変数の値の変更を禁止するような方法はありませんか?
167デフォルトの名無しさん:2010/06/03(木) 20:37:46
>>165
出来るよ

>>166
あるよ
168デフォルトの名無しさん:2010/06/05(土) 12:28:27
このプログラムが作れません!><;


二重ループを用いて、アスタリスク「*」でn段のピラミッドを作成・表示するプログラムを作成せよ.
(例) n=4 の場合
///*///
//***//
/*****/
*******

※二重ループはfor文を使って下さい。
スラッシュの部分は空白(スペース)です。
#include<stdio.h>

int main ( void )
{
....
169デフォルトの名無しさん:2010/06/05(土) 12:37:28
int n=4, i, j;
printf("n=");
scanf("%d%*c", &n);
for(i=0;i<n;i++){
  for(j=n-1-i;j>0;j--) printf("/");
  for(j=i*2+1;j>0;j--) printf("*");
  for(j=n-1-i;j>0;j--) printf("/");
  printf("\n");
}
170デフォルトの名無しさん:2010/06/05(土) 21:40:50
文字を含むcsvデータを読み込もうとしているのですが、うまく行列に格納する方法が分かりません。
色々と調べてみて、textscanを使うと言うことまでは分かったのですがそれ以上は分かりません・・・
とても基本的な質問で申し訳ありませんが、教えてもらえますでしょうか?
171デフォルトの名無しさん:2010/06/05(土) 22:51:10
すいません。
アスタリスクの問題の質問をしたものです。
書きこんで頂いたプログラムはnをいきなり4と定めていますよね。
そうではなくて…
nの値を実行画面で打ち込んでn段のピラミッドをつくるというプログラムにしたいんです。
あと("/")ではなくて(" ")にしてもう一回教えてもらえませんか?
172デフォルトの名無しさん:2010/06/06(日) 02:40:01
>>171
おまえバカだろ
基本からやり直せ
173デフォルトの名無しさん:2010/06/06(日) 03:13:04
fid = fopen('hoge.csv');
ss = textscan(fid,'%s%s','delimiter',',');
fclose(fid);
てして,ss{i}{j}でアクセス
174173:2010/06/06(日) 03:19:53
>>170
カンマ含む文字列があるなら,Excelみたく""でくくって
%qを使うといいぞ
175169:2010/06/06(日) 09:01:31
そうだな、スレ違い。
176デフォルトの名無しさん:2010/06/09(水) 21:09:03
MATABのSimukinkuを使ってOFDMのシミュレーションモデルを構築
したいのですが、何をすればいいのかさっぱりです。
基礎知識ってナニが必要ですか?フーリエやら微分方程式って習得
してなきゃまずいですか?
177デフォルトの名無しさん:2010/06/09(水) 22:24:00
豚に真珠、猫に小判という言葉が思い浮かんだ。
178デフォルトの名無しさん:2010/06/10(木) 03:07:49
>> 177
MATLABは人をバカにするきらいがある・・・
かく言う私はMATLABでバカになった.
バカな私でも使えるMATLABは素晴らしい.

>> 176
Simukinku(w
OFDM勉強すればフーリエ変換も勉強できるのでは.
常識だし,勉強するためのちょうどいいチャンスじゃないか.
179デフォルトの名無しさん:2010/06/16(水) 11:29:48
3Dのグラフ描写について教えてください。
真円度計の測定結果のような極座標系の三次元グラフを描きたいと思い、悪戦苦闘しています。
持っている情報としては45゜毎thetaの半径rと高さzがあります。
rを使ってカラーマップを作りたいのでmeshやsurfですと上手くいきませんでした。
海外にはpolar3dやpolarplot3dといった.mファイルがあったのですが
使い方がいけないのか上手く使いこなせなかったです。
極座標系の三次元グラフは不可能ですか?
何かやり方があれば教えてください。
180デフォルトの名無しさん:2010/06/16(水) 16:52:38
デカルト座標から極座標に変換すればいいだけのことでは?
181デフォルトの名無しさん:2010/06/17(木) 00:41:32
すでに極座標系なのですが。。。理解不足ですかね。
極座標系でz軸を使えるものはないですかね。
182デフォルトの名無しさん:2010/06/20(日) 22:26:47
初歩的な質問かもしれませんが、教えてもらえれば幸いです。
二値画像をモルフォロジーに基づくスケルトン化しました。
そのスケルトン化した画像を元の二値画像に戻すにはどのようにプログラムを組めばよいのでしょうか。
また、2次元での画像を極座標変換するにはどうすればよいでしょうか。
よろしくお願いします
183デフォルトの名無しさん:2010/06/24(木) 12:24:33
自分もよく理解できてないからだろうけど、このところ質問の意味が分からん。
184デフォルトの名無しさん:2010/06/26(土) 01:20:57
MATLABのコマンドのode45で運動方程式(微分方程式)Ax''+Bx'+Cx=Fを
解いています(xを求めている)。
運動方程式の入力(Fです)は1-cos(b)でbは時間の関数でb=20*tと
しています。tは時間です。

xはx1とx2からなるベクトルで、Fとx1とx2を同時に出力して
グラフを見比べたいのですが、横軸を時間tではなくbとします。
行列であるAやBやCにtは含まれていないのですが、時間tについて
何も変更せずにグラフを出力すると、Fとx1,x2の波形(振幅値など)が
ずれていました(モデル的に、x1やx2は変位なので入力Fが
大きいときは、x1とx2も大きくなる、つまり振幅の位置が
一致するはずです)。
この原因は横軸がb、つまり20*tなのに、時間tについて何も
変更しなかったからだと思うのですが、どの部分をどのように
変更すれば時間について変更(tではなく20*tにすれば
うまくいくと思います)でき、うまくいくでしょうか?

長くなりましたが、よろしくお願い致します。
185デフォルトの名無しさん:2010/06/27(日) 08:18:02
いえいえこちらこそ宜しく御願いします。
186デフォルトの名無しさん:2010/07/09(金) 02:45:15
あとは、お若い二人でごゆっくりと( ・ω・)y─┛〜〜
187184:2010/07/10(土) 12:31:13
自己解決できましたので失礼します。
188名無しさん@そうだ選挙に行こう:2010/07/10(土) 13:04:48
うむ
189デフォルトの名無しさん:2010/07/20(火) 00:04:48
MATLABのプログラミングを使って、音を出すことをしています。
緊急で「小惑星探査機はやぶさ」のカプセルに使われたビーコン音を
作ることになったのですが
作り方が分かりません…。
1024Hzと2048Hzの矩形波が1秒ごとに繰り返していることは
ネットで分かったのですが…

MATLABのプログラミングで作成することは難しいかもしれないですが
よろしくお願いいたします。
190デフォルトの名無しさん:2010/09/19(日) 20:37:28
[x,y]=meshgrid(-10:10:10);
z=exp(x.^2 + y.^2)*(x.^2 + y.^2)
とすると、
z =
1.0e+089 *
2.8904 1.4452 2.8904
0.0000 0.0000 0.0000
2.8904 1.4452 2.8904
となり、x=10,y=0の時と、x=0,y=10の時で計算結果が変わってしまいます。
しかし、
exp(10^2+0^2)*(10^2 + 0^2)と
exp(0^2+10^2)*(0^2 + 10^2)の答えは共に
2.6881e+045
となります。これは計算誤差の問題ですか?
191デフォルトの名無しさん:2010/09/21(火) 02:40:32
192デフォルトの名無しさん:2010/09/21(火) 02:59:21
>>190
z=exp(x.^2 + y.^2).*(x.^2 + y.^2)
でOK?
193デフォルトの名無しさん:2010/09/21(火) 03:16:27
>>192
ありがとうございます。うまくいきました。
.*で要素単位の乗算を意味するということで、
もっと勉強します。
194デフォルトの名無しさん:2010/10/04(月) 18:28:45
d = eig(A)
が、どのようなアルゴリズムで
固有値を出しているのかを知りたいのですが
公式にいっても載ってませんでした;

ttp://www.mathworks.com/help/ja_JP/techdoc/ref/eig.html
によると、
[V,D] = eig(A, B, flag)
の場合は、
flagでコレスキー分解かQZ アルゴリズムかのどちらかを選べるようです。
指定しない場合はコレスキー分解で固有値を求めると書いてあるので、
d = eig(A)
でもコレスキー分解で固有値を求めていると考えるのが妥当でしょうか。
もし、公式でこのことについて載っているところがあれば教えて下さい。
195デフォルトの名無しさん:2010/10/04(月) 21:14:13
コレスキー分解が使える条件すら理解できてないみたいだけど、
そんな状態でアルゴリズム調べてどうすんの?
196デフォルトの名無しさん:2010/10/04(月) 21:34:48
>>195
コレスキー分解が使える条件は
正定値対称だと思います

ただ単純に知りたいだけです。

英語でもいいのでどこか載っているところを
知っている方がいれば教えていただければと思います
197デフォルトの名無しさん:2010/10/05(火) 00:31:25
>d = eig(A)
>でもコレスキー分解で固有値を求めていると考えるのが妥当でしょうか。

Aが実対称正定値:コレスキー分解
それ以外:QZ分解
って書いてあんじゃん
フラグが明示されない場合は実対称正定値かどうかを内部で判定してるんでしょ
198デフォルトの名無しさん:2010/10/05(火) 00:34:11
199デフォルトの名無しさん:2010/10/08(金) 15:29:55
学生でmatlab初心者です。自分は64bitのPCを使用しているのですが、
mex-setupコマンドを打ったときコンパイラの選択肢が出てきません。
ネットで多少調べてみたところ、32bit版での方法しか見つかりませんでした。
64bit版でも使用可能なコンパイラはないでしょうか?
基本的な質問なのでしょうが、どなたかご教授お願い致します。
200デフォルトの名無しさん:2010/10/08(金) 15:45:22
199です。OSを書き忘れてました。
windows7を使用してます。
201デフォルトの名無しさん:2010/10/08(金) 20:44:44
正規ユーザならサポートに訊け
202デフォルトの名無しさん:2010/10/10(日) 17:20:29
現在学士4年で修士に進学予定です.
StudentEditionを購入したのですが,インストール時に設定する卒業年は2011年でいいのでしょうか?
修士の二年を考えて2013年でしょうか?
203デフォルトの名無しさん:2010/10/10(日) 19:11:53
だからサポートに聞けって
204デフォルトの名無しさん:2010/10/11(月) 00:45:24
clear all
s=[1 9 1 1 1 ;
2 2 2 2 2 ;
3 2 1 3 8 ;
4 4 2 4 4 ;
5 1 5 5 5 ];
xdiv=2;
ydiv=2;
a1=1;
c1=1;
for j=1:2
for i=1:2
s(a1+(j-1)*ydiv:a1+j*ydiv,c1+(i-1)*xdiv:c1+i*xdiv)
end
end

初歩的ですみません,
上記のようにある行列を分割した後,
それぞれ出た行列を別々の変数にforループを使って格納したいのですが,
どのようにすればよろしいでしょうか?
上は5×5を3×3の4分割にしていますが,
今後は1600×1200に対して同様のプログラムを作成したいと思っています.
205デフォルトの名無しさん:2010/10/12(火) 22:33:13
>>204

セル配列を使って、下から3行目を

t{i, j} = s(a1+(j-1)*ydiv:a1+j*ydiv,c1+(i-1)*xdiv:c1+i*xdiv);

とするか、あるいはevalを使って

eval(sprintf('t%02d%02d = s(a1+(j-1)*ydiv:a1+j*ydiv,c1+(i-1)*xdiv:c1+i*xdiv)', i, j));

とするとか。
206デフォルトの名無しさん:2010/10/13(水) 13:59:38
>>205

ありがとうございますm○mできました!
なるほど,{}を使うとできるんですね
207デフォルトの名無しさん:2010/10/23(土) 12:20:41
画像のサイズを端末上に表示する方法ってありますか?
サイズを変数として使いたいのでimfinfoではダメです
208デフォルトの名無しさん:2010/10/23(土) 17:11:11
size関数しらないって本当にMatlab使いか?
209デフォルトの名無しさん:2010/10/23(土) 22:20:42
行列のサイズではなくて画像の容量を表示させたいのです
210デフォルトの名無しさん:2010/10/25(月) 04:09:33
画像のサイズってファイルサイズのこと?
それだったらdir関数で分かるけど。

a = dir('foo.jpg');
siz = a.bytes;

これでfoo.jpgっていうファイルのファイルサイズが
バイト単位でsizに保存される。
211デフォルトの名無しさん:2010/10/25(月) 17:59:50
>>210
出来ました!
ありがとうございました
212デフォルトの名無しさん:2010/10/28(木) 15:38:09
MATLAB-Simulinkについて質問させてください.
運動方程式をベースに現在モデルを作成しております.

ある入力変位に対する値を出力させるためにLook-up-tableを用いています.
添付画像のようなデータを読み込ませようとしています.
しかし,そのデータの中に不連続な値をとる部分があり(下図の5.5や-5.5と記してある箇所),
ここの値より大きな変異になると,出力する値が無限大になって出てしまいます.

どうしたら正しい値をとるようになるのでしょうか.
些細な情報でも結構ですので,手助け願います.
分かりづらい説明で大変恐縮ですが,ご存知の方おられましたらお願い致します.

http://2sen.dip.jp/cgi-bin/upgun/up1/source/up49199.png
213デフォルトの名無しさん:2010/11/04(木) 23:21:07
すごい単純な質問なんだけど、
5x5の行列AのA(1,2)とA(3,5)を表示したいときに
A([1,3], [2,5])ってやると(1,2),(1,5),(3,2),(3,5)が
表示されちゃうのってどうしたらいい?

5x5くらいじゃ手打ちでいいんだけど、もっと大きくなるとメンド臭くて
214デフォルトの名無しさん:2010/11/05(金) 12:11:40
matlab初心者です、データの補間方法についてお尋ねしたいのですが
http://hccweb5.bai.ne.jp/~hee54201/source/up0521.xls
↑このような配列をこのように処理したいのですがどう書けばよいのでしょうか
宜しくお願いします
215デフォルトの名無しさん:2010/11/06(土) 07:30:32
>>214

for文で各行に繰り返しinterp1を適用していくくらいしか思いつかない。

ttp://infoshako.sk.tsukuba.ac.jp/ShakoDoc/MATLAB5/help/techdoc/ref/interp1.html
216デフォルトの名無しさん:2010/11/07(日) 14:07:37
>>213
k = [
1 3
2 5
3 4];
for n=1:size(k,2)
disp( A(k(n,1), k(n,2)) );
end

かなぁ。
217デフォルトの名無しさん:2010/11/10(水) 18:56:40
一服してくる( ・ω・)y─┛〜〜
218デフォルトの名無しさん:2010/11/15(月) 21:11:21
画像処理が終わった後にお知らせメールが携帯に届く様にしたいんですけど

Could not connect to SMTP host: smtp.live.com, port: 25;

このエラーが出ちゃいます(´・ω・`)
hotmailでもsmtpサーバあるみたいだから出来ると思ったんですけど
ダメなんですかね?
hotmailのsmtpサーバはsmtp.live.comで間違いないと思うのですが…。
2007b使ってます。

% mail settings
setpref( 'Internet', 'SMTP_Server', 'smtp.live.com');
setpref( 'Internet', 'SMTP_Username', 'hotmailのアドレス');
setpref( 'Internet', 'SMTP_Password', 'hotmailのパスワード');
setpref('Internet', 'E_mail', 'hotmailのアドレス');

%メールの送信
mail_to = '携帯のアドレス(ezweb)';
title = '件名';
mail_text = ['本文'];

sendmail(mail_to, title,mail_text)
219デフォルトの名無しさん:2010/11/18(木) 18:42:06
ベクトル(1行の行列)

A=[ 3 5 2 4 7 6 ]

の成分をランダムに並べ替えるような関数ってありますか?
いろいろ調べてみたけど見つからない……
220デフォルトの名無しさん:2010/11/18(木) 19:04:04
各要素は固定でってこと?
221デフォルトの名無しさん:2010/11/18(木) 20:47:10
A=A(:,randperm(length(A)))
222デフォルトの名無しさん:2010/11/21(日) 16:42:51
randpermなんてあったのか
いっつもn=ceil(N*rand(1,1))にしてた
223デフォルトの名無しさん:2010/11/24(水) 20:32:18
あさってはマットラブエックスポ2010だぜ
224デフォルトの名無しさん:2010/11/26(金) 19:44:15
ギロッポン行って来た
みんな高そうな服着てた(´・ω・`)

225デフォルトの名無しさん:2010/11/26(金) 20:12:12
226デフォルトの名無しさん:2010/11/26(金) 21:19:20
去年は弁当だったのに今年はパンでがっかりんこ

227デフォルトの名無しさん:2010/11/28(日) 10:06:20
EXPOなんて行ってたのしいのか?
228デフォルトの名無しさん:2010/12/03(金) 13:19:16
質問です。
C#でデータをDOS画面に出力します。
このデータをMATLABで取得することは可能でしょうか?
データはダダ流し状態なのですべて拾いたいです。
 
 
またはC#のデータをリアルタイムにMATLABで取得することは可能でしょうか?
パイプを使用し同じファイルにアクセスする方法は試したのですが値が取得できませんでした。
 
よろしくお願いします
229デフォルトの名無しさん:2010/12/07(火) 14:05:09
MATLABである行列を作りたいんだけどプログラムが上手くいかない
誰か教えてください
行列Fを作りたいM*(M-1)/2行M列の行列

でm=1~M-1、r=m+1~M、p=1~M それぞれ正の整数
M=5でやってる
Fの要素の指定の仕方が
F((r-m)+(m-1)*(M-m/2)、p)

要素の値なんだけど
-1 if p=m-1
1 if p=r-1
pi*(m-r) if p=M
0 otherwise

230229:2010/12/07(火) 14:09:29
スパース行列になるはずなんですけど

今のやり方はones()で同じサイズの行列作って条件に合うように要素を書き換えようとしてます。
for文でm,r,pを書いて、if文を条件に使ってるけど上手くいきません。
いいやり方などあったら教えてください
もしプログラム載せた方がいいなら載せます。
231デフォルトの名無しさん:2010/12/07(火) 20:37:58
MATLABはパイプに対応していますか?
232デフォルトの名無しさん:2010/12/07(火) 21:25:27
>>229
日本語でおk
233デフォルトの名無しさん:2010/12/08(水) 01:14:58
>>229
こういうこと?

M = 5;
row = [];
col = [];
val = [];
for p = 1:M
  for m = 1:(M-1)
    for r = (m+1):M
      i = (r-m)+(m-1)*(M-m/2);
      j = p;
      if p == m-1
    row = [row i]; col = [col j]; val = [val -1];
      elseif p == r-1
    row = [row i]; col = [col j]; val = [val 1];
      elseif p == M
    row = [row i]; col = [col j]; val = [val pi*(m-r)];
      end
    end
  end
end
A = sparse(row, col, val, M*(M-1)/2, M);
spy(A);
234デフォルトの名無しさん:2010/12/09(木) 22:48:20
失礼します。
初歩的な質問で申し訳ないのですが、
GUIのボタングループについてです

GUIDEを用いて、ボタングループ( Tag : uipanel6 )を作成し
その中にラジオボタン( Tag : radiobotton1, radiobutton2, radiobutton3 )を三つ配置しました

ラジオボタンでは、どのボタンを選んでいるかによって
ある変数の値を変えたいと考えているのですが
次のような関数を作っても上手く動いてくれません
----------------------------
function uipael6_SelectionChangeFcn(hObject, eventdata, handles)

test = 1

switch get(eventdata.NewValue, 'Tag')
case 'radiobutton1'
handles.shift = 10
case 'radiobutton2'
handles.shift = 30
otherwise
handles.shift = 50
end

guidata(hObject, handles);
--------------------------------
そもそも、ラジオボタンをどれか選択した時にも
test = 1 の部分がコマンドラインに出てないので
SelectionChangeFcn自体が反応してないようです
なにか他に必要なものがあるのでしょうか
分かる方がいらっしゃったら教えていただけると助かります
よろしくお願いします
235デフォルトの名無しさん:2010/12/09(木) 22:49:54
失礼します
初歩的な質問で申し訳ないのですが、
GUIのボタングループについてです

GUIDEを用いて、ボタングループ( Tag : uipanel6 )を作成し
その中にラジオボタン( Tag : radiobotton1, radiobutton2, radiobutton3 )を三つ配置しました

ラジオボタンでは、どのボタンを選んでいるかによって
ある変数の値を変えたいと考えているのですが
次のような関数を作っても上手く動いてくれません
----------------------------
function uipael6_SelectionChangeFcn(hObject, eventdata, handles)

test = 1

switch get(eventdata.NewValue, 'Tag')
case 'radiobutton1'
handles.shift = 10
case 'radiobutton2'
handles.shift = 30
otherwise
handles.shift = 50
end

guidata(hObject, handles);
--------------------------------
そもそも、ラジオボタンをどれか選択した時にも
test = 1 の部分がコマンドラインに出てないので
SelectionChangeFcn自体が反応してないようです
なにか他に必要なものがあるのでしょうか
分かる方がいらっしゃったら教えていただけると助かります
よろしくお願いします
236デフォルトの名無しさん:2010/12/09(木) 22:52:10
すみません、書き込み失敗とでて連投になってしまいました
お目汚し申し訳ないです
237デフォルトの名無しさん:2010/12/10(金) 22:44:36
なんとか自己解決できました
やはり英語の解説でも
嫌がらずにちゃんと読まないといけないと思わされました
では失礼しました
238デフォルトの名無しさん:2010/12/19(日) 17:59:16
M-ファイルを編集するときのショートカットで、
emacsでいうところの"Ctrl-l" (カーソルを中央に持ってくる) に
相当するようなショートカットは存在しますか?
239デフォルトの名無しさん:2010/12/20(月) 10:47:32
octaveでもmexが動くんでしょうか
240デフォルトの名無しさん:2010/12/20(月) 11:38:56
ggrks
241デフォルトの名無しさん:2010/12/21(火) 11:50:59
昔Cのプログラムをmatlabから利用するにはmexしかなかったのですが
最近は、もっと便利なものがあったりするんでしょうか?
どこかのサイトでclassをそのまま読み込む方法見た気がするんですが
242デフォルトの名無しさん:2010/12/21(火) 17:28:20
ggrks
243デフォルトの名無しさん:2010/12/30(木) 11:04:50
はじめまして。matlab初心者です。

下のプログラムは、要素数の異なる2次元配列a,bのすべての要素同志の距離を計算して、
もっとも小さい距離をmindistに入れて、その配列番号をi,jに保存するプログラムです。

mindist = 1;

for i=1:length(a)
for j=1:length(b)

if mindist > sqrt((a(1,i)-b(1,j)).^2 + (a(2,i)-b(2,j)).^2)
mindist = sqrt((a(1,i)-b(1,j)).^2 + (a(2,i)-b(2,j)).^2);
ind_i = i;
ind_j = j;
end

end
end

これをfor文を使わない形にした方が、高速化できると聞いたのですが、
変形の方法が分かりません。どうか、ご教授下さい。何卒よろしくお願い致します。
244デフォルトの名無しさん:2010/12/30(木) 11:35:10
min(sqrt(a.^2+b.^2))
.^2ってのは要素の2乗のこと。
245デフォルトの名無しさん:2010/12/30(木) 11:36:21
sqrtは外に出したほうがさらに計算量減るね
mindist = sqrt( min(a.^2+b.^2) )
246デフォルトの名無しさん:2010/12/30(木) 11:41:09
和をとるのを忘れてた
sqrt(min(sum( a.^2+b.^2 )))
247243:2010/12/30(木) 11:48:39
>>246
aとbの要素数が異なるのですが、大丈夫なのでしょうか?
あと、a.^2、b.^2だとそれぞれのスカラを求めることになるので、
aとbの距離の計算にはなっていないと思うのですが。。。
248デフォルトの名無しさん:2010/12/30(木) 12:17:30
全然勘違いしてたね。申し訳。
全ての組み合わせから最小距離を探すには2重ループしかないと思う
for使わなくて出来るって言った人に訊いてみたらいいんじゃね?
249243:2010/12/30(木) 13:09:05
>>248
遅くなりましたが、ご回答ありがとうございました。
http://www.mag.keio.ac.jp/~naoe/inas/pukiwiki/index.php?MATLAB%20Tips
に、forループを使わない方法が書いてあります。
しかし、理解できません。。。
250デフォルトの名無しさん:2010/12/30(木) 15:51:22
>>249のリンク先の話は
数百個のスカラデータの中から最小を探す話だから
2つの行列のすべての組み合わせに対する演算の話ではないな
251243:2010/12/30(木) 19:01:30
>>250
やはりforループを使わないとダメなんですね。
ありがとうございました。
252デフォルトの名無しさん:2010/12/30(木) 19:20:28
>>243
こういう風に変形してループを1段に減らしてみるのはどうだろう。

mindist = 2;
for i=1:length(a)
[val, j] = min((a(1,i)-b(1,:)).^2 + (a(2,i)-b(2,:)).^2);
if mindist > val
mindist = val;
ind_i = i;
ind_j = j;
end
end
mindist = sqrt(mindist);

a を2行4000列、b を2行400列として比較すると変形前は56.8秒、変形後は0.218秒だった。
ループ回数は少ないほうがいいので、a と b のサイズを入れ替えて
a を2行400列、b を2行4000列として比較すると変形前は56.4秒、変形後は0.0312秒だった。

変形のポイントは、スカラ変数とベクトル変数の減算を行っていることと min の使い方。
x をスカラ変数、y を n 次元の行ベクトル変数とすると、x-y は [x-y(1), x-y(2), ..., x-y(n)] に等しい。
min は引数にベクトルを与えると最小値に加えて最小値の位置(インデックス)も返してくれる。

ループよりも行列演算として書くほうが速いというのはMATLABで一般的に言えることで、
常にこの点を意識してプログラムを書くとよいと思う。
253243:2010/12/31(金) 09:06:20
>>252
この方法は全く想像できなかったです。
コードまで組んでいただき、大変丁寧なご解説ありがとうございました!
かなり処理時間が短縮できたので、できることの幅が広がりました。
感謝しております。
254デフォルトの名無しさん:2010/12/31(金) 22:19:47
>>252さんの例のように、なんでも行列演算にもっていくテクニック
について特にかれたサイトや本はありますでしょうか?
本家にあるTips等は読みました。
255デフォルトの名無しさん:2011/01/01(土) 12:45:29
流れぶったぎってすみません。
自分のPCにインストールしているMATLABの、使用可能なツールボックスが何か
分からなくなりました。
確認する方法ご存じないでしょうか?
256デフォルトの名無しさん:2011/01/01(土) 14:37:12
ver って打ってみろ
257デフォルトの名無しさん:2011/01/01(土) 17:47:17
そもそもmatlabってCとかで組む前にさくっと動作確認をするための物じゃないの?
matlabで高速化頑張っても誰も褒めてくれないでしょ
258デフォルトの名無しさん:2011/01/01(土) 19:29:11
お前がそう思うんならそうなんだろう、お前ん中ではな
259デフォルトの名無しさん:2011/01/04(火) 12:55:48
質問です

matlabで理論値を出そうとしているのですが、そこで畳み込み符号を使用します
何度かやってみてはいるのですが、どうもうまくいきません
理論値を出す際に使用する畳み込み符号は、どのように書けばいいのでしょうか?
260デフォルトの名無しさん:2011/01/04(火) 21:10:58
>>259
何の理論値なのかもっと説明しないと、自分の同業者にしか話が通じないよ。
261デフォルトの名無しさん:2011/01/04(火) 21:14:12
>>260

dBの値を変化させて、そのBERを出すプログラムに組み込みたいのですが、
よく組み込み式と場所がわからず苦戦しています
262デフォルトの名無しさん:2011/01/04(火) 21:43:57
ここはscilabの質問もおkでしょうか?
ちょっとforループと3次元プロットで詰まってるんですが、
MATLABとscilabはそこらへん同じなのかなあ…
263デフォルトの名無しさん:2011/01/04(火) 22:53:24
>>261
もう君は知らん。
264デフォルトの名無しさん:2011/01/04(火) 23:15:22
プロット関連は実装が全然違うからアテにならないと思うよ
MATLABとOctaveですら同じコマンドでも同じ描画出来ないから
265デフォルトの名無しさん:2011/01/04(火) 23:24:41
>>264
そうですか…
一応コードとか載せたりしてもいいですか?
266デフォルトの名無しさん:2011/01/05(水) 01:23:23
コード載せてから聞いた方が早いだろ。

>>264
FreeMatだと描画関係でもそこそこ互換性あるぞ。
267デフォルトの名無しさん:2011/01/05(水) 01:27:40
コード載せます
//サンプル点データ読み込む
Sheets = readxls〜
s1=Sheets(1);
w=s1(5,:);
x1=s1(1,:);
x2=s1(2,:);
r=s1(4,:);
//サンプル点の最大値・最小値
x1max=max(x1)+1;
x1min=min(x1)-1;
x2max=max(x2)+1;
x2min=min(x2)-1;

//サンプル点の数
xa=length(x1);

xx1= x1min:0.1:x1max; //サンプル点の上限下限、間隔
xx2= x2min:0.1:x2max;
//ガウス関数の重ね合わせ
f=0;
for k=1:xa
for i =1:length(xx1)
for j =1:length(xx2)
f(k,i,j)=f+w(k)*exp(-(((i-x1(k))^2)+((j-x2(k))^2))/r(k)^2);
end
end
end
//グラフ作成
plot3d(xx1,xx2,f);

これでやると部分行列は正しくない定義ですって言われます
268デフォルトの名無しさん:2011/01/05(水) 01:32:37
改行ひっかかった
エラー出るのはf(k,i,j)のところです
ガウス関数をサンプル点ごとに作っていってそれの重ねあわせで曲線を作る、という作業をしたいです

読み込みミスなどはいろいろ検証しましたが大丈夫でした
w(k)やx1(k)なんかに実際の数値をそのまま代入して3次元プロットしてもみたんですが
点が出たりするだけで思ったグラフを描いてくれないので、
多分fのところの記述の仕方が悪いと思ってるんですが…どう直せばいいか分からないです
269デフォルトの名無しさん:2011/01/05(水) 02:11:55
scilabしらないけど、xx1とxx2がベクトルなのにfがテンソルだからエラーなんじゃない?
270デフォルトの名無しさん:2011/01/05(水) 09:42:09
>>269
テンソルって何?と思って調べたら線形的とかそういうことか
ベクトルや配列で描くxとyの範囲を決めるのはscilabとoctaveだけなんですかね
MATLABは範囲さえ決めたら自動的になめらかに描いてくれるんですか?
これ以外にもxx1とxx2を行列にして計算する方法もあるんだけど
それだと不正な型:正方行列を想定しますって出てしまうんです…
fを足し合わせとかじゃなくxx1*cos(xx2)とかにしたらちゃんと描くので
読み込んだ点を使う事か、forで足し合わせる事が原因なのかなと思ってるんですが…
271デフォルトの名無しさん:2011/01/06(木) 01:35:59
f(k,i,j)はスカラーだけど、その後のfってなにを指してんの?
このfor文をそのまま解釈すると、テンソルの1要素f(k,i,j)にテンソルfそのものを足してるからそらエラーになるなって思うが。
fの宣言はf=0ではなく、f=zeros(xa, length(xx1), length(xx2))であるような気もするし。
その後のplot3dでもxx1とxx2はベクトル、fは3階のテンソルだからエラーになるのは当たり前に思えるけど、scilabではそういう入力が可能なの?
272デフォルトの名無しさん:2011/01/06(木) 12:12:29
>>271
forで繰り返しているのでfっていうのは前の段階のf(k,i,j)を想定しているんですけどこれじゃダメみたいですね
もうひとつ試した方法のコード書きます
xx1とxx2の宣言まで同じで、
//長さを合わせる
xx1mat=xx1'*ones(1,length(xx2));
xx2mat=ones(length(xx1),1)*xx2;
//ガウス関数の重ね合わせ
f=0;
for i=1:xa
f=f+w(i)*exp(-(((xx1mat-x1(i))^2)+((xx2mat-x2(i))^2))/r(i)^2);
end

これだと不正な型:正方行列を想定しますとエラーが出ます
273デフォルトの名無しさん:2011/01/06(木) 12:24:46
自分がやりたい事は
1.エクセルから各点の座標データと重み・半径を読み込む
2.点の最大値と最小値からグラフを書く範囲を決める
3.f=0から始めて各点ごとにグラフの範囲にガウス関数を描く
4.全部の点のガウス関数を足すことで一つの多峰性関数が描ける

scilabだとxとyの範囲はベクトルや配列で決めるような感じなんですが
MATLABだとどういう感じに決めるんですか?

f=0;
for i=1:xa
f=f+w(i)*exp(-(((X-x1(i))^2)+((Y-x2(i))^2))/r(i)^2);
end

plot3d(X[Xの範囲],Y[Yの範囲],f)みたいな感じにすれば描いてくれるんでしょうか
先輩が使ってるmathematicaだとそんな感じなんですけど
274デフォルトの名無しさん:2011/01/06(木) 19:51:04
2次元のカーネル密度推定がやりたいのでいいんかね
なら↓を使ってみたらどう
ttp://www.mathworks.com/matlabcentral/fileexchange/17204-kernel-density-estimation
275デフォルトの名無しさん:2011/01/07(金) 00:27:02
http://user.numazu-ct.ac.jp/~mochizuki-k/matlab/index.html
ここの「変数を 2 つ持つ 3 次元グラフ」の項に MATLAB と Scilab の3次元プロットの違いが書かれている。
3次元プロット関数の第3引数は MATLAB でも Scilab でも2次元配列(行列)でないといけないとのこと。
よって、

//ガウス関数の重ね合わせ
f=zeros(length(xx1), length(xx2));
for k=1:xa
for i =1:length(xx1)
for j =1:length(xx2)
f(i,j)=f(i,j)+w(k)*exp(-(((i-x1(k))^2)+((j-x2(k))^2))/r(k)^2);
end
end
end
//グラフ作成
plot3d(xx1,xx2,f);

こうすべきなのではないか。
276デフォルトの名無しさん:2011/01/07(金) 17:24:53
>>275
ありがとうございます
何とかエラー無しで動いたんですが何か真っ黒で見えないのは仕様ですかね?
277デフォルトの名無しさん:2011/01/13(木) 00:25:17
FFTの返り値がよく分かんない
278デフォルトの名無しさん:2011/01/14(金) 20:24:09
matlabで求めたグラフ上の点から接線を引く方法を教えていただきたいです.
279デフォルトの名無しさん:2011/01/17(月) 18:45:23
微分すりゃ良いんじゃね?
280デフォルトの名無しさん:2011/01/17(月) 20:30:57
>>276ですが
f(i,j)=f(i,j)+w(k)*exp(-(((i-x1(k))^2)+((j-x2(k))^2))/r(k)^2);を
f(i,j)=f(i,j)+w(k)*exp(-(((xx1(i)-x1(k))^2)+((xx2(j)-x2(k))^2))/r(k)^2);にしたら動きました
みなさんありがとうございます
281デフォルトの名無しさん:2011/01/18(火) 13:24:21
箱の中央から3個のボールをそれぞれ異なる初速度および角度で同時に投射した。
それぞれのボールの起動を計算し、それをMatlabを使って描画せよ。
なお、3個のボールの反発係数、直径はすべて異なるものとし、ボールの運動は重力下の質点運動と考える。
といった問題なんですがどなたかやっていただけませんか?
282デフォルトの名無しさん:2011/01/18(火) 19:06:13
またscilabの質問なのですが、
3次元のグラフにz=0の等高線を引きたい時はどうすればいいのでしょうか
http://doc.test.scilab.org/docs/5.3.0-beta-5/ja_JP/contour.html
このページを読んでもわかりません。
flagとzlev=0を使えば良さそうなんですがどういう風にnzやflagを設定すればいいかわからないです
283デフォルトの名無しさん:2011/01/19(水) 23:00:00
284デフォルトの名無しさん:2011/01/19(水) 23:00:37
>>281
いいよ
285デフォルトの名無しさん:2011/01/20(木) 00:37:47
>>282ですが出来ました!
すいません
286デフォルトの名無しさん:2011/01/20(木) 11:59:47
>>281
以前別の言語で書いたプログラムが似たような内容だったのでテキトーに移植してみた。
ttp://codepad.org/ryuJFkdK
大きさと質量の異なる3個のボールが箱の中で重力の影響下で動く様子をアニメーションで描画している。
反発係数は考慮していない(完全弾性衝突)。
MATLAB は持っていないので GNU Octave でテストした。動かなかったらごめんね。
287デフォルトの名無しさん:2011/01/23(日) 09:49:29
初心者です

test.bmpというファイルをモノクロ化したい時のプログラムは

image_c=imread('test.bmp');

I=unit8(0.2989*double(image_c(:,:,1))
+0.5870*double(image_c(:,:,2))
+0.1140*double(image_c(:,:,3)));
image(I)

で可能でしょうか?
手元にMATLABがないので判断できず

間違っている場合、改善していただけると幸いです
288デフォルトの名無しさん:2011/01/25(火) 13:36:46
>>283 >>286
質問しておきながら書き込み遅れてすいません。
どうもありがとうございました。
りかいできました。
289デフォルトの名無しさん:2011/01/27(木) 00:59:17
C++に書き直すにはどうすりゃいいの?
290デフォルトの名無しさん:2011/01/29(土) 04:39:48
C++を習得する
291デフォルトの名無しさん:2011/01/29(土) 08:00:05
疑いようがない
292デフォルトの名無しさん:2011/01/30(日) 22:25:02
A=[1,3,5];
みたいな行列があって、

BはAの最小値の要素のインデックスを受け取って、
[MinVal,MinInd] = min(A);
B=A(MinVal);

と表現するのを、
1行で書けるような気がするんだけど、パッと思いつかずモヤモヤしてます。

どなたかスカッとさせてくれませんか?
293デフォルトの名無しさん:2011/01/31(月) 18:56:56
B = A(min(A)) じゃダメなん?
294デフォルトの名無しさん:2011/02/02(水) 11:49:56
>>292
B=A(MinInd);
の間違い?
そうだとしたら、知らない。
でも、MinValはすでにBと同じじゃないの?
295デフォルトの名無しさん:2011/02/02(水) 20:37:43
min じゃなく比較演算子で、たとえば

dat = dat(dat > 0);

みたいに書けることを「パッと思いつかずモヤモヤして」いるのだと想像。
296デフォルトの名無しさん:2011/02/06(日) 16:03:05
プログラミングではなくエラーの質問です

突然あるfigファイルが開けなくなってしまいました
再起動しても治らず、原因不明で困っています

「開く」でそのfigファイルを指定すると、

error using --> open
Invalid argument. Type "help legend" more information.

と表示され、開くことができません
他のfigファイルは普通に開くことができます

解決法を教えてください
よろしくお願いします
297デフォルトの名無しさん:2011/02/06(日) 23:31:00
>>296
そのfigうp
298デフォルトの名無しさん:2011/02/07(月) 17:25:17
ファイルのパス名のどこかに日本語が入ってるとかは?
299デフォルトの名無しさん:2011/02/12(土) 17:02:10
subplotを使って縦32個,横32個で計1024個のグラフをfor文回しながらplotしています.

for y=0:31
for x=1:32
 subplot(32,32,32*y+x)
 plot
end
end

こんな感じでplotしているのですが,yの値が大きくなるに従って指数関数的に
plot時間が長くなります.y=0の時は0.6秒で終わるのに,y=29では9300秒もかかってしまいます.

plotするときに,すでにplotし終わった部分まで再描画しているのでしょうか?

環境は以下の通りです.
Windows 7 Enterprise 64bit
MATLAB 2009a 64bit
Core i7 930
RAM 6GB
300デフォルトの名無しさん:2011/02/13(日) 03:01:19
ベクター画像だから重い。
何個かのfigureに分割して保存していって、
最後にビットマップ等にしてから張り合わせるのはだめ?
301デフォルトの名無しさん:2011/02/24(木) 00:52:27.62
MATLABのほとんど
302デフォルトの名無しさん:2011/02/24(木) 00:55:38.12
MATLABのほとんどの関数がマルチスレッド非対応で、せっかくのマルチコアが生かせない。
シングルスレッドで速いCPUに変えたいのだけど、何がお勧め?

行列のインデックス指定による書換をfor文でぐるぐる行う演算を多用していて、
C++化以外の方法でスピードアップしたい。
コードの最適化とかはもう限界・・・
303デフォルトの名無しさん:2011/02/24(木) 01:03:12.00
あなたにmatlabは向いていない
mex化しかないだろ
304デフォルトの名無しさん:2011/02/24(木) 07:55:40.78
>>302
CPU の動作クロックの向上は限界に来ている→コア数を増やす、という流れなので
ハードウェア投資で逐次コードの速度向上を目指すのは無理でしょう。

まだ試していないなら for 文を極力減らす方向でコードを見直すことを進めます。
>>252のように、うまくいけば大幅に効率が上がります。

Paralell computing toolbox (PCT) を使って自前でコードを並列化するのも手だと思います。
私の同僚はモンテカルロ法のコードを PCT で並列化して「全コア100%!」と自慢していました。
305デフォルトの名無しさん:2011/03/07(月) 19:52:37.44
Mapleとの連携についてお聞きしたいです。

Mapleで例えば、

A:=Matrix(N*M,3,[seq(seq([i,j,f[i,j]],i=1..N),j=1..M)]):

のように行列を作り、このデータをMATLABに渡して3次元プロットをしたい場合にはどうすればよいですか
306305:2011/03/09(水) 23:23:44.86
無理矢理自己解決しました。
307デフォルトの名無しさん:2011/04/09(土) 08:28:03.59
検索もしているけど、少し聞きたいのだが?

MATLABの便利な所が分からない。
何故使っているの?
普通にCとかでプログラムすれば良いじゃない?
Matlabじゃなくては出来ない事って何?
308デフォルトの名無しさん:2011/04/09(土) 09:52:04.58
>>307
メモリ確保とかいらんし楽
309デフォルトの名無しさん:2011/04/09(土) 12:22:49.47
>>307
ライブラリが豊富。というか、ライブラリ集の様なもの。外部とのIFも整ってるしね
インタプリタだからコンパイルしなくていいし、簡単なGUIなら1行ですむ。
310デフォルトの名無しさん:2011/04/09(土) 17:13:42.34
>>307
比較ならCよりもFORTRANとの方が妥当だと思う
311デフォルトの名無しさん:2011/04/10(日) 01:15:25.93
>>307
グラフィックまで持っていくのが楽。
3D表示がきれい。
画像処理、サウンド処理も楽。
アニメーションも可。
for文使わずに数式準拠でベクトル計算、行列計算ができる。
312デフォルトの名無しさん:2011/04/19(火) 22:18:14.61
MATLABを仕事で使ってる社会人って多いんですか?
Adobeのソフトを使う人くらい理工系では常識的なツールなんですか?
313デフォルトの名無しさん:2011/04/22(金) 17:48:50.64
3次元プロットのbar3関数についての質問なんですが
xticklabelを回転させるのってどうするんですか?
314 忍法帖【Lv=14,xxxPT】 :2011/04/25(月) 02:26:27.81
>>313
マウスをドラッグ
315MATLAB放浪者:2011/04/27(水) 23:31:16.90
MATLABについてお尋ねします。
量子化された心電図データ
(16進の数で、1秒間に50個の数値が、20〜30心拍分ほど)を読み込み
各々のR-R間隔(sec)を、他の場所に格納したいです。
↓R-R間隔について
ttp://www.sea-star.jp/img/item_content/hcg801_img03.gif
316MATLAB放浪者:2011/04/27(水) 23:33:21.28
続きA

実際の心電図データを簡易化した例として
下のような 16進の数字の羅列があるとき

[26 1B 2A 25 5B 23 43 12 40 15 76 2C 53 12 3B 6D 3C 2E 41]
※横軸が時間で、1個のデータにつき0.2sec経過するとします。
上の数値のうち 5B 76 6D が心電図における各R点とします。
5B〜76 76〜6D のようなR-R間隔の時間をデータとして取得したいです。
317MATLAB放浪者:2011/04/27(水) 23:40:23.77
続きB
*********
自分で考えてみたのは
長い16進数字羅列のうち
事前に心電図波形を見てR点がいくつ含まれているかを数え
数羅列を、そのR点の個数で分割し
|***R***|**R****|*****R*|
のような各区間でmaxの値を取れば可能かなと考えました。
R-Rの間隔については、比較した*の数×secでそうだなと。
318MATLAB放浪者:2011/04/27(水) 23:43:03.39
続きC
******
ですが、常にR点は時間軸的に均等な幅で
計測されているわけでもないので
設定した区間にR点が含まれない場合、違った値(P波やT波やノイズ)を
検出してしまう恐れがあります。

また、波形データを入れるたびにR点の個数を入力しないとならないため
汎用性がないかなと思いました。(逐一中身を書き換えなければならないので)
319MATLAB放浪者:2011/04/28(木) 00:04:22.93
続きD
****
どのようにしたらよいでしょう。
他の良い方法はあるでしょうか?
また上のような考えを実行するにはどのようにしたらよいでしょう?
当方MATLAB初心者ゆえ
具体的な関数や、より良いプログラム内容を教えていただけたらありがたいです。
よろしくお願い致します。
320デフォルトの名無しさん:2011/04/29(金) 14:58:29.79
その図のとおりRだけが上に鋭いなら微分して符号が+から−に入れ替わる点の前後が急なところを探す
処理的には1つ前との差分を取って+からーに変わる点を抽出
さらにその前後の差分の絶対値が一定の値より大きいかどうかを確認
321デフォルトの名無しさん:2011/04/29(金) 17:50:36.30
>>312
割と使う。でも必須でも無い(業界や職種や規模にもよるが)
使いこなせるのなら就職とかで有利な事は有利かも

ついでにAdobeのソフトもそれ程使わない気も
322デフォルトの名無しさん:2011/05/03(火) 18:36:15.42
お尋ねします。
動画ファイルをaviファイルではなくmpegファイルで出力するmpgwriteという関数なのですが、
mpgwrite(M,map,'filename')と指示通り記述しても
「関数としてスクリプトmpgwriteを実行しようとしています」
とだけ出力されて、エンコードが実行されません。解説サイトなどに行ってもやはり
mpgwrite(M,map,'filename')
これで動くとだけ書いてあり、上のようなエラーは発生しないようです。原因としてはなにが考えられるでしょうか。

すみませんがよろしくお願いします。
323322:2011/05/03(火) 19:35:14.49
すみません解決しました。
大変失礼しました。
324デフォルトの名無しさん:2011/05/04(水) 08:39:32.05
Matlab/Simulinkについてお尋ねします。

今度Simulinkを使ってモデルべ-ス開発を行うことになりそうなりそうなんですが
お勧めのサイトや書籍ってありますか?

いままでCやJAVAなどはやってきているのですが、Matlabはほとんど触ったことがありません。
amazon等で探した本をちら見してもいまいちピンときませんでした。

ご教授願います。
325デフォルトの名無しさん:2011/05/08(日) 04:27:21.61
処理が終了したらMSNメッセンジャーで
メッセージを飛ばすということはできないでしょうか?
326デフォルトの名無しさん:2011/05/08(日) 04:53:51.94
MATLABからtwitterへ投稿できるmファイルがあったので
こちらを代用しようと思います

ttp://www.mathworks.com/matlabcentral/fileexchange/20290
327デフォルトの名無しさん:2011/05/08(日) 22:24:29.96
>>324
オレもC軽くやってMatlabいったけど
関数を適宜ぐぐりながらやったらすぐ身に付いたよ
328デフォルトの名無しさん:2011/05/11(水) 07:44:01.20
Cで書いて、引数を渡して実行し、結果をMatlabに返す方法を教えてください
329デフォルトの名無しさん:2011/05/15(日) 21:23:58.75
M=3個の正規白色雑音時系列データを作成し、加算平均処理を行うスクリプトを
作成したいのですがだれか教えてください。
330デフォルトの名無しさん:2011/05/16(月) 00:12:17.45
>>328
MEXのチュートリアル
331デフォルトの名無しさん:2011/05/16(月) 00:15:24.73
C言語と比べてMATLABの利点と欠点を教えてください!
332デフォルトの名無しさん:2011/05/16(月) 02:57:58.82
利点:簡単
欠点:高い
333デフォルトの名無しさん:2011/05/20(金) 11:53:33.34
画像に対して二次元フーリエ変換を行なって、
振幅スペクトルのグラフを描きたいんですが、
どのようにすればいいんでしょうか。
334デフォルトの名無しさん:2011/05/22(日) 10:31:05.73
>>333
MATLAB 2次元FFT
でググる。
335デフォルトの名無しさん:2011/06/02(木) 16:51:56.55
MATLABってoctaveと同じことができますか?
たとえば画像をモノクロに変えたり、その画像を上下さかさまに出力したりなど
336デフォルトの名無しさん:2011/06/02(木) 20:50:33.30
>>331
利点:
変数ウォッチ付きの対話的環境
行列演算ライブラリが最初から組み込まれてる
行列演算子が組み込まれている
適度にライトウェイトな言語仕様

欠点:
クラスの使い方が俺にはよくわからない(わかる人いたら教えてほしい)
関数ポインタが使えない・・・と思う
コードを書き直す度に可読性が落ちて行く
1ファイル1関数(関数内でしか使わない関数は、同じファイルに定義可能)
337デフォルトの名無しさん:2011/06/03(金) 08:50:15.17
>>335
MatlabはOctave以上に細かいことができると思う。
338デフォルトの名無しさん:2011/06/03(金) 09:30:54.92
>>337
MatlabとOctaveはほぼ同じ

ライブラリやGUIやチャート描画関係が違うだけ
無料のOctaveの方がチープ

>>335
そんな頭悪い書き込みするなよ・・・
339デフォルトの名無しさん:2011/06/04(土) 02:06:49.02
描画系はコマンド同じでもいくつかのグラフを重ね描きすると結果は全然違う
Matlabはちゃんと順番に描画されるがOctaveは軸やプロットそのものが消えたり不安定
340336:2011/06/07(火) 09:34:37.27
関数ポインタ使えました。@を使ってできるみたいです。

クラスの使い方が未だにわからんwww
341デフォルトの名無しさん:2011/06/18(土) 17:45:26.09
知恵袋でも聞いたのですが解決できませんでした。
このシステムをmatlabでシミュレーションする手順をを教えてください。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1164712661
342デフォルトの名無しさん:2011/06/18(土) 18:07:49.13
まず服を脱ぎます
343デフォルトの名無しさん:2011/06/18(土) 19:42:15.66
画像のシステム、というわりに画像を拡大させければ教えてもらえるわけ無いじゃん
344デフォルトの名無しさん:2011/06/18(土) 20:51:42.68
異常に小さい画像や文字でプレゼンテーションするタイプだな

見ている人全員に心の中で「読めねぇよ」と突っ込まれているという
345デフォルトの名無しさん:2011/06/19(日) 05:17:55.27
346345:2011/06/19(日) 07:33:03.27
やってみた。
ttp://codepad.org/La8W0EC5
347341:2011/06/19(日) 19:32:35.15
クリックで拡大できると思ってました。
確かにこれじゃ小さくて見えないですね。

>>345
大変わかりやすいです。
本当にありがとうございます。
348デフォルトの名無しさん:2011/06/23(木) 13:03:57.97
スレチかも知れないけど知ってる人いたら教えて下さい

Scilabで複数行にわたるコメントアウトの方法が知りたいです
ググってみたけどそれらしい情報が見当たりませんでした
349デフォルトの名無しさん:2011/06/26(日) 20:33:48.74
MATLAB自体は良いのだが、
あの販売会社の殿様商売というか、
あからさまに”売ってやっている”というような態度は
いかがなものかと思っている。
350デフォルトの名無しさん:2011/07/04(月) 22:50:34.03
アマゾンで売っているペーパーバック版は日本語でインストールできますか?
こちらの方が安く手に入るので気になっています
351デフォルトの名無しさん:2011/07/05(火) 00:16:15.28
MATLAB日本語版?という意味なのか、日本語OSにインストール出来る?という意味なのか
352デフォルトの名無しさん:2011/07/05(火) 07:26:29.38
日本語OSにインストールする際ということです
言語選択できるインストールパッケージなのでしょうか
353デフォルトの名無しさん:2011/07/07(木) 11:45:07.93
mex内でマルチスレッドは出来たんだけど,別スレから,lapack呼び出すとなぜか落ちる.
別スレッドからmatlab関数は呼べないと書いてあったけど,lapackルーチンもダメなの??
だれかやってみた人いる?
354デフォルトの名無しさん:2011/07/07(木) 23:54:51.19
>>352
インストーラーが日本語という意味か?文章が下手すぎて意味が分からない
355デフォルトの名無しさん:2011/07/09(土) 15:40:32.90
for文使って数列の値をかえて、その度にk1,k2,k3と言った感じで数列の値を保存していきたいんだけど、その保存先の名前を買えていくプログラムわかる?
つまり
for(n=1,2,3,4,)
k=[n+1,n+2]
k1=[2,3]
k2=[3,4]
k3=[4,5]
↑kに付随した数字をfor文を回すたびにかえたい

ほんとに困ってるんで、誰かお助けお願いします。><
356デフォルトの名無しさん:2011/07/09(土) 16:52:18.40
>>355
k を配列にする、つまり、k[n] でガンバッテやってみる。
357デフォルトの名無しさん:2011/07/09(土) 17:03:00.95
>>356
返答ありがとう!!
でもよくわからない;;;

本物のプログラムはこちら
x=rand(1,4096)
for k=1:64
A{k}=[ x(64*(k-1)+1 : 64*k) zeros(1,64)]
end

ここで、A{k}がエラー起こす><
358デフォルトの名無しさん:2011/07/09(土) 20:15:55.02
>>354
そうです
海外で販売されているものでも日本語化または言語選択が可能なのでしょうか?
359デフォルトの名無しさん:2011/07/10(日) 01:07:55.17
インストーラーの英語なんて超簡単なのに何をびびってるのやら
360デフォルトの名無しさん:2011/07/10(日) 09:38:03.82
USBからの入力でリアルタイム処理をしたいのですが
これって可能でしょうか?
どこかにサンプルコードはないでしょうか?
361デフォルトの名無しさん:2011/07/10(日) 10:15:50.30
USBから何のデータを入力すんだよ
文章を書けないバカ多すぎ
362デフォルトの名無しさん:2011/07/10(日) 10:25:57.22
インストーラが英語でもいいんですが、matlab本体を日本語表示できるかということです
363デフォルトの名無しさん:2011/07/10(日) 10:30:15.49
>>362
できる
364デフォルトの名無しさん:2011/07/10(日) 13:43:50.18
でもヘルプの最新版は英語。バージョンアップやらコミュニティサイト利用しようと思ったら全部英語。ライセンス管理も英語。
お前には無理だ。諦めろ。
365デフォルトの名無しさん:2011/07/14(木) 01:33:50.12
マウスカーソルの軌跡の距離ってマトラボを使って出せますか?
366デフォルトの名無しさん:2011/07/14(木) 14:54:52.64
>>365
とりあえず、できる。
難しさは、どの部分をどのように実装したいのかによる。
367デフォルトの名無しさん:2011/07/16(土) 02:07:09.93
研究でマトラボ使うことになりそうなんですが、何から勉強すればいいかわかりません…
皆さんどうやって学び始めましたか?
368デフォルトの名無しさん:2011/07/16(土) 05:51:11.03
>>367
自分の研究分野の公開されてるコードを探して読んで改造する
369デフォルトの名無しさん:2011/07/16(土) 12:45:21.10
本当に初歩の初歩だったら何をみて勉強しても良いけど、そこから先は研究分野によって勉強しないといけないことがだいぶ違うから、先輩に聞いたり、その分野のコードを読んだりするのがいいと思う。
370筑馬鹿生:2011/07/19(火) 22:41:08.46
初心者です。
研究で使うデータの整理として、
matlabを使ってexcelのファイルを開かずに操作したいです。
こんなものを書きました。↓
具体的には別々のexcelファイルにある行データを
列データにして一つのファイルにシートごとに変数WとTa書き出すだけです。
%10月1日

W=xlsread('土浦1001',1,'E2:AB2') %日射量
Ta=xlsread('土浦1001',1,'E6:AB6') %外気温

W=W'
Ta=Ta'*0.1
xlswrite('日射量',W,'1001','B2:B25')
xlswrite('日射量',Ta,'1001','C2:C25')


%10月2日
W=xlsread('土浦1002',1,'E2:AB2') %日射量
Ta=xlsread('土浦1002',1,'E6:AB6') %外気温
W=W'
Ta=Ta'*0.1
xlswrite('日射量',W,'1002','B2:B25')
xlswrite('日射量',Ta,'1002','C2:C25')

371デフォルトの名無しさん:2011/07/19(火) 22:42:46.54
しかしこれを1年分するとなると365回繰り返さなければなりません。
なんとかファイル名等もfor分を使って回したいのですが、
どうも上手くいきません。
1か月分だけでもfor分で回すとかなり楽になると思いますが何か方法はあるのでしょうか?
理想的にはこんなイメージです↓

for i=1:31

W=xlsread('土浦100i',1,'E2:AB2') %日射量
Ta=xlsread('土浦100i',1,'E6:AB6') %外気温

W=W'
Ta=Ta'*0.1
xlswrite('日射量',W,'100i','B2:B25')  %('ファイル名',変数,'シート名','書き出すセル番号')
xlswrite('日射量',Ta,'100i','C2:C25')

end

ファイル名やシート名にも変数iを用いてまわしたいです。
どなたかお願いします。
372デフォルトの名無しさん:2011/07/19(火) 23:02:55.39
m=10
d=1
sprintf('土浦%02d%02d',m,d)
って感じで
373デフォルトの名無しさん:2011/07/19(火) 23:30:38.19
>>372
なるほど・・・
%を入れて変数にすれば良いわけですね。
明日学校でやってみます。

ありがとうございます。
374デフォルトの名無しさん:2011/07/20(水) 11:47:31.94
お尋ねします.
mファイルを実行することでコマンドプロンプトを起動し,
さらに命令を与えることは可能でしょうか?
コマンドプロプトを起動することはできたのですが,
命令を与えることができません.
よろしくお願いいたします.
375デフォルトの名無しさん:2011/07/20(水) 14:33:09.30
>>374
外部アプリ呼び出すだけなら system ファンクション一発で
何でもできると思うんだけど、具体的に何したいの?
376デフォルトの名無しさん:2011/07/22(金) 05:00:37.82
障害物回避軌道の生成と運動シュミレーションの準備として、
MATLABにより任意形状の障害物を対話的に配置できるようなプログラムを
つくりたいのですがどのようにプログラムを書けばいいのか
わかりませんどなたか教えていただけにでしょうか。

よろしくお願い致します。
377デフォルトの名無しさん:2011/07/22(金) 12:19:17.85
>>375
ありがとうございます.
外部アプリで計算を行わせたくて,そのために
外部アプリのコマンドプロンプト上で何回かコマンドを
与えたいのです.
378デフォルトの名無しさん:2011/07/22(金) 15:54:46.30
>>377
具体的にその外部アプリの名前おしえて。
もし僕が持ってる奴なら検証してあげられるから。

引数の与え方やバッチ的な処理の流し込み方はアプリによって千差万別なので、
「外部アプリのコマンドプロンプト」だけだと明確な答えは得られないと思うよ。
379デフォルトの名無しさん:2011/07/22(金) 16:35:30.61
>>378
ご親切にありがとうございます.
外部アプリは私的なものでして,具体的には
matlabで外部アプリのコマンドラインを呼び出し,
(!cmd.exeの状態とほぼ同じです)
さらに下記の命令を入力できるでしょうか?

load "ファイル名"
run
print <ファイル名>
exit

たびたびすみません.
380デフォルトの名無しさん:2011/07/24(日) 16:58:22.77
>>379
それは Matlab 云々の話ではなくて、その外部アプリの仕様次第です。
たとえばその外部アプリが、引数として指定したファイルを読み込んで
バッチ的に処理してくれるような仕様なら、Matlab からでも実行可能。
381デフォルトの名無しさん:2011/07/25(月) 13:21:11.04
>>380
なるほど,有難うございました.
382Matlab でもクラス記述できるでしょうか:2011/07/25(月) 22:14:19.58 BE:1096023528-2BP(0)
Matlab でもクラスを扱えるように拡張されていることは知っています。でもクラス
を使った Matlab コードを見たことがありません。Matlab クラスで どの程度のこと
ができるのか、よく分りません。

例えば BL:Bool 体クラス、PL:Bool 体係数多項式クラスを作って、下のような Bool
 体係数多項式の加減乗除べき乗算・剰余算をさせられるでしょうか。

b1=BL(1); b0 = BL(0)
P = PL(b1, b0)

(P^5 + P^3+1)%(P^2+P+1)
===============================
P+1
383デフォルトの名無しさん:2011/07/26(火) 12:37:55.92
>>382
Mathworks のサイトにある Object-Oriented Programming のドキュメントは読んだ?
もちろん boolean のクラスを作って加減乗除させるくらいはできます。

しかし、積極的にクラスを使った Matlab コードは、確かにあまり見ないね。
個人的には、自分のプログラミングスタイルだと、クラスを使ったところで
Backward compatibility とコードの可読性が落ちる「だけ」というのが、
クラスを使わない主な理由だったりします。
384デフォルトの名無しさん:2011/07/26(火) 21:33:06.23
>>382
matlabからmacaulay2呼び出せば良い
385Matlab でもクラス記述できるでしょうか:2011/07/27(水) 07:04:51.75 BE:3082563195-2BP(0)
>>383 ご意見ありがとうございます。382 です。

>>  Mathworks のサイトにある Object-Oriented Programming のドキュメントは読んだ?
飛ばし読みしました。それらの文書を本腰を入れて読むべきか判断したくて先の投稿
になりました。何日も潰して理解して、その結果が「Matlab のクラスは使い物にな
らない糞だ」では悲しすぎるからです。

>>  もちろん boolean のクラスを作って加減乗除させるくらいはできます。
そう思ったので「多項式環が扱えるのか?」とハードルを上げて質問しています。

>>  Backward compatibility とコードの可読性が落ちる「だけ」というのが、
「クラスを使うと可読性が落ちる」なんて「クラスの使い方を誤っている」か、もし
くは「Matlab のクラスが使い物にならない糞だ」ということになると思います。

確かに糞だとすれば、Matlab でクラスを使わないことの説明になります。

Porogramming style の点でみると Matlab は古臭いと思います。それとの
 compatibility を保証しながら OOP 記述を可能にするのは簡単ではないだろうと思っ
ています。結果として Matlab のクラスは使い物にならないしろものになっていると
思ってよさそうです。Object Oriented Cobol みたいな物にならざるをえないのでしょ
う。

386Matlab でもクラス記述できるでしょうか:2011/07/27(水) 07:05:57.71 BE:822017726-2BP(0)
>>384 ご意見ありがとうございます。382 です。

私の目的は Matlab でブール体係数多項式の加減乗除べき乗算+剰余体演算を実装で
きるかを知ることです。Matlab でブール体係数多項式演算を行うことではありません。

でも、384 さんも、そんな実装は無理だと思っているようです。参考になりました。
ありがとうございました。

387デフォルトの名無しさん:2011/07/27(水) 11:27:27.24
こんにちは。
リンク先の「クラス定義の複数のファイルへの分配」に習って
メソッドを別のファイルに定義したいと思うのですが、
具体的にどう書けばよいかわかりません。

http://www.mathworks.co.jp/help/ja_JP/techdoc/matlab_oop/brqy4ox-1.html

たとえば

home/@ClassNameA/ClassNameA.m
classdef ClassNameA
 methods
  function FuncX(obj)
   disp('X');
  end
  function FuncY(obj)
   disp('Y');
  end
end

のFuncYを別のファイルに記述したい場合、
ClassNameA.m と classMethod.m はどのように記述すればよいでしょうか。
388デフォルトの名無しさん:2011/07/27(水) 13:27:01.86
>>386
その意味では、実装は可能というのが最終的な答えですよね?
実装するしないはともかくとして。
Matlab でのクラス関連のノーテーションが糞かどうかは
結局好みの問題になるかと思うのですが、
OOP から入った人なら、すんなり受け入れられるんじゃないでしょうか。

>>387
さらにそのページにある「別ファイル内のメソッド」リンクを辿った先に、
ずばり答えが書かれてます。
389Matlab でもクラス記述できるでしょうか:2011/07/28(木) 05:19:06.70 BE:1233025463-2BP(0)
>>実装は可能というのが最終的な答えですよね? 実装するしないはともかくとして。

  (P^5 + P^3+1)%(P^2+P+1)
のようにユーザー側で演算子に新しい意味を与えられるかは言語仕様による。演算子
の代わりに addBool(..) などの関数呼び出しで実装するのならば、可読性が犠牲に
なる。実装する意味がない。そんな実装をするより macaulay2呼び出しのほうがまし。

>>結局好みの問題になるかと思うのですが、
殆どの人間が Matlab のクラスを使わないのならば、Matlab のクラス仕様は糞だと言える。

390デフォルトの名無しさん:2011/07/28(木) 10:13:20.83
>>388
既に読んでいたのですがどうやら勘違いしていたようです。
プロパティみたいに function なしでクラス定義すればいいんですね。
一応成功したコードを書いておきます。ありがとうございました。

home/@ClassNameA/ClassNameA.m
classdef ClassNameA
 methods
  function FuncX(obj)
   disp('X');
  end

  FuncY(obj)
end

home/@ClassNameA/FuncY.m
function FuncY(obj)
 disp('Y')
end
391デフォルトの名無しさん:2011/07/30(土) 21:08:08.60
後出しじゃんけんのプログラムを作成したいのですが、グー・チョキ・パーをランダムに選択する文が思い浮かびません。
グーが1、チョキが2、パーが3に当てられ、まずコンピュータの手を表示してから自分の手を入力するというプログラムです。
Cだとcomp=rand()%3+1で出来るのですがMATLABではどのように表現すればいいでしょうか?
392デフォルトの名無しさん:2011/07/30(土) 21:34:19.79
>>391
C の rand 関数を使った実装がそこまで具体的に分かってるなら
matlab の rand の help を見れば一発で解決すると思いますが、
より直感的に comp = randperm(3)(1); みたいなのもアリです。
393デフォルトの名無しさん:2011/07/30(土) 21:53:29.55
>>392
helpを実行したら解決しました!
参考書を見ても載っていなかったんで、助かりました!ありがとうございますm(__)m
394デフォルトの名無しさん:2011/07/31(日) 11:35:23.38
いちばんラクなのはrandiかも。
395デフォルトの名無しさん:2011/08/05(金) 11:52:48.09
突然違う話題ですみませんが、
現在、matlabを独学で勉強しています。


以下のような関数がそれぞれどのようなグラフとなるかをmatlabにより出力したいと考えています。
a_±(x) = ±sinθcos(θ/2) * ( cosh(xsinθ) / cosh(2xsinθ)+cosθ ),
b_±(x) = ±sinθsin (θ/2) * ( sinh(xsinθ) / cosh(2xsinθ)+cosθ )

xの値の範囲は-20 < x < +20、θの値の範囲は0 < θ < πです。
xを-20から+20へと変化させた時の波形を出力しようと考えています。
しかし、独学のせいかプログラムが全く書けません(涙)
詳しい方やわかる方、教えて頂けると助かります。


396デフォルトの名無しさん:2011/08/05(金) 13:39:19.23
>>395
いきなり完全なプログラムを書こうとしてるから詰まってると見た。

例えば
>> x = -20
>> theta = 0
>> sin(theta)
>> cos(theta / 2)
>> cosh(x * sin(theta))
>> for x = -20:20, x, end

みたいな簡単なステートメントを実行しながら、
まずは代入の記法や、単一の関数で何が得られるかを確かめてみる。
そして、for ループの使い方みたいなものを断片的にでも理解してから
基本はボトムアップで試行錯誤しながら取り組むのが良いと思います。
不格好でも目的のプログラムは作れる筈。
397デフォルトの名無しさん:2011/08/05(金) 17:23:54.79
>>396
θをpとし、一応作ってはみましたが…
matlabはもとよりプログラミング自体が初めてです。。
細かいところはダメだと思いますが、流れはこんな感じで大丈夫でしょうか?

for p=0:1/100:pi
for x=-20:1/100:20
a = ±sin(p)*cos(p)*( cosh(x*sin(p)) / cosh(2x*sin(p))+cos(p) );
b = ±sin(p)*sin(p)*( sinh(x*sin(p)) / cosh(2x*sin(p))+cos(p) );
plot(x,a);
plot(x,b);
end
end
398デフォルトの名無しさん:2011/08/06(土) 01:06:54.19
>>395
形だけを確認したいんだったらMicrosoft mathematicsが便利
399デフォルトの名無しさん:2011/08/06(土) 01:43:47.52
>>396
2重ループでxとθをそれぞれ変化させて、aとbの値を求め、
最後にx,a(もしくはb),θによる3次元のグラフを1つ出力するという方針
なのですが、plot3をどのタイミングで入れれば良いのかがよくわかりません。。
どなたかアドバイスお願いします・・・
400デフォルトの名無しさん:2011/08/06(土) 01:57:31.74
>>399
全然違う
独学と言うが何という入門書を読んでる?
ほとんどの入門書に書いてあるはず
>>396の言うとおり、1つの本を決めて最初からサル真似して
打ち込んでいけばそのうち慣れる
401デフォルトの名無しさん:2011/08/06(土) 02:29:54.36
>>400
「MATLAB ハンドブック」です。
>>399以外思いつく方法がなかったのですが・・・
やばいです。。
402デフォルトの名無しさん:2011/08/06(土) 02:47:46.89
>>401
その本俺も持ってる。
ちゃんと真似て打ち込みながら読んでる?
全部やらなくても、Chapter 0, 1, 2,と
5の「グラフィックアニメーションテクニック」の部分だけで良い。
ちゃんとやれば1か月かからない
403デフォルトの名無しさん:2011/08/06(土) 02:55:47.08
>>402
真似て打ち込んでいるのですが・・・
週明けには完成させないといけないので急いでいるのですが
詰まってしまいました。。
404デフォルトの名無しさん:2011/08/06(土) 03:12:26.15
>>403
>>397を見る限り全然打ち込んでいるように見えんぞ
自宅にないならOctaveという無料のソフトでMatlabの練習が出来る
405デフォルトの名無しさん:2011/08/06(土) 08:53:30.20
>>404
octaveで練習していますが、2つの変数を変化させて値を出したいのですが
上手くできません。。
a = ±sin(p)*cos(p)*〜・・・
b = ±sin(p)*sin(p)*〜・・・
なので
下のaとbの式の右辺の先頭にそれぞれ±1を掛けてグラフを描きたいのですが、
やり方がよく分かりません。。
愚問で申し訳ないのですが、どなたか参考例を教えて頂きたいです。。

p=0:0.01:pi
x=-20:0.01:20
a = sin(p)*cos(p)*cosh(x*sin(p)) / ( cosh(2*x*sin(p))+cos(p) );
b = sin(p)*sin(p)*sinh(x*sin(p)) / ( cosh(2*x*sin(p))+cos(p) );

406デフォルトの名無しさん:2011/08/06(土) 09:40:52.49
規制で携帯から
とりあえずこんなんでいいの?

N = 100;

p = linspace(0, pi, N);
x = linspace(-20, 20, N);
[P, X] = meshgrid(p, x);

a = sin(P) .* cos(P/2) .* ( cosh(X.*sin(P)) ./ cosh(2*X.*sin(P) + cos(P)));


surfc(X,P,a);

407デフォルトの名無しさん:2011/08/06(土) 21:41:25.24
>>405
宿題を丸投げしているあたり、
>>395の独学というのは嘘でちゃんと習ったんだろ?
話を聞いていない自分の責任じゃないのか。

その本のchap.2までちゃんと読んで打ちこめ
holdコマンドをちゃんと調べる
408デフォルトの名無しさん:2011/08/07(日) 02:38:24.40
このスレってインストールできない学生や宿題できない学生のたまり場になりつつあるな
409デフォルトの名無しさん:2011/08/07(日) 04:10:13.30
夏休みだから仕方ない
410デフォルトの名無しさん:2011/08/07(日) 12:44:35.87
>>406
ありがとうございます。
皆さん申し訳ありませんでした。。
411デフォルトの名無しさん:2011/08/19(金) 04:55:25.23
MATLABって何て読むの?
まっとらぶ?
まとらぼ?
めいっとらぶ?
412デフォルトの名無しさん:2011/08/19(金) 09:26:33.93
>>411
マッチョラブ
413デフォルトの名無しさん:2011/08/19(金) 11:33:40.59
>>411
MathWorks日本語版公式サイトだと
ttp://www.mathworks.co.jp/products/matlab/

「MATLAB (マトラボ / マットラブ) 」と併記してるのでこの両方が公式
ただし「ソースを表示」等でHTMLファイルを見ないと書いてない
414デフォルトの名無しさん:2011/08/19(金) 14:44:57.39
マットラボって読んでたんだが、間違いなのか・・・
415デフォルトの名無しさん:2011/08/19(金) 19:02:38.63
MATLAB Version 7.12 (R2011a)
Statistics Toolbox Version 7.5 (R2011a)

なのですが、Statistics Toolboxの主成分分析のサンプル(ttp://www.mathworks.co.jp/help/ja_JP/toolbox/stats/princomp.html)
してみたら、分散行列の1列、4列だけ符号逆で出てくる。

>> load hald
>> [pc,score,latent,tsqure]=princomp(ingredients)

pc =

-0.0678 -0.6460 0.5673 0.5062
-0.6785 -0.0200 -0.5440 0.4933
0.0290 0.7553 0.4036 0.5156
0.7309 -0.1085 -0.4684 0.4844


プログラミングの質問じゃない気がするけど、分かる方いたら宜しくお願いします。
サポートに連絡した方がいいのかな?
416デフォルトの名無しさん:2011/08/20(土) 00:02:53.50
R2011評価版を入手。30日間の期限が切れた。
時計を戻した。使えるじゃん・・・。
417デフォルトの名無しさん:2011/08/20(土) 00:44:25.84
お巡りさん、こっちです
418デフォルトの名無しさん:2011/08/20(土) 17:43:32.17
>>415
PCA で出せる loading と score の符号は arbitrary なので問題ない。
各アプリケーション間でバラバラな上に、
同一のアプリケーションの違ったバージョンでもバラバラだったりする。

419デフォルトの名無しさん:2011/08/20(土) 21:19:39.91
>417
ハックしてるわけじゃないから、問題ないのでは。
420デフォルトの名無しさん:2011/08/21(日) 07:32:47.00
タイムパトロールに通報しといた
421デフォルトの名無しさん:2011/08/21(日) 19:05:58.91
>>419
多分民事ですね。マジメにお金払ってる人が騒ぎたくなる気もわかりますが。

それにしてもmatlab高いよ。本体とほんの数種類のtoolboxで150万円なんて。
これと比較したらあのAdobe CS 5.5ですら安くみえます。
422デフォルトの名無しさん:2011/08/21(日) 20:26:32.62
そんなこと言うならOctave使えばいいじゃん。
423デフォルトの名無しさん:2011/08/22(月) 00:05:09.44
残念ながらオクターブじゃ仕事にならないんだよ…。matlabのような統合開発環境が必要。
424デフォルトの名無しさん:2011/08/22(月) 09:12:01.37
Scilabとかもあるな
仕事なら経費と思うしかない
金が無いなら数式見てゴリゴリ書け
425デフォルトの名無しさん:2011/08/22(月) 17:34:19.31
FreeMatでいいじゃん
426デフォルトの名無しさん:2011/08/22(月) 19:41:04.44
>>424
>>425
ま、経費なんで痛くも痒くもないんですが、20万超えると承認もらうのが面倒。

matlabのいいところって、グラフをGUIで直感的にガンガン加工したのちに、.mファイルに変換して、次からは自動で描画させる事ができることろだと思うんです。もしmatlabからその機能がなくなったらOctaveに移行します。
427デフォルトの名無しさん:2011/08/22(月) 21:20:22.64
>>418

ありがとうございました。
んんー、なるほどー。
428デフォルトの名無しさん:2011/08/24(水) 14:30:24.72
クラス定義の中でプロパティの値を書き換えるとき
下のように書くと警告が出る上、xが空のままになるのですが
どのように書けばよいでしょうか?

classdef Class
  properties
    x
  end
  methods
    function this=Class()
      this.init();   % this.x=2 を代入する
      this.x     % ans = [ ] と表示される
    end
    function init(this)
      this.x=2;
    end
  end
end

429デフォルトの名無しさん:2011/08/24(水) 18:53:42.80
自己解決しました。
参照渡しとなるように以下のような書き換えが必要だったようです。

classdef Class
  properties
    x
  end
  methods
    function this=Class()
      this = this.init();     % 変更
      this.x
    end
    function this = init(this)  % 変更
      this.x=2;
    end
  end
end
430デフォルトの名無しさん:2011/08/31(水) 07:05:05.01
i行i列のu(i,j)という2次元配列を作って、それぞれに値を格納したんですが、
(iは1〜100、jは1〜100)

このu(i,j)という配列を3次元でグラフ化したいのですが、上手くいきません。

・surf(u);
・waterfall(u);

surf(u(1,:));

hold on
for i=2:1:100
surf(u(i,:));
end
hold off

いずれも上手くいきません。。
分かる方、教えて頂けたら助かります。
431デフォルトの名無しさん:2011/08/31(水) 11:29:14.51
>>430
surf(1:100, 1:100, u);

1:100のところは自分の好きなように変えるべし。
0:99でもいいし、linspace(-pi, +pi, 100)とかでもいい。
432デフォルトの名無しさん:2011/08/31(水) 15:44:01.31
ありがとうございます。
試してみたのですが、上手くいきませんでした。。ソースは以下の通りです。
1次元の熱伝導方程式について、以下のように差分法を用いて、時間変化に伴う温度分布をグラフ化しようとしました。

u=[];
t0=0; te=0.1; dt=0.01;
nx=9; x0=0; xe=1.0; dx=1.0/nx;

x=x0:1.0/(nx-1):xe;
u=sin(pi*x);

for i=2:1:te/dt
for j=1:1:nx
u(i,j)=1;
end
end
for i=2:1:te/dt
u(i,1)=0; u(i,nx)=0;
for j=2:1:nx-1
u(i,j)=u(i-1,j)+((dt)/(dx)^2)*(u(i-1,j+1)-2*u(i-1,j)+u(i-1,j-1));
end
end
plot(x,u);

時間変化による温度分布を見やすくするためにx軸をx(0〜1.0)、y軸をt(0〜0.1)、z軸をuの値として、3次元のグラフにしたいのですが、2次元のグラフでしか表現できません。。
どなたか分かる方、教えて頂けたらうれしいです。
433デフォルトの名無しさん:2011/08/31(水) 21:39:56.88
「surf使うときはmeshgrid」を呪文のように唱えてる。仕組みは知らん。

まず
for i=2:1:te/dt
ってとこだけど、0秒をi=1にしてるわけだから
for i=2:1:te/dt+1
にしないと合わない。
で、あとは plot(x, u) の部分を下で置き換えたらできるはず。

t = t0:dt:te;
[X,T] = meshgrid(x,t);
surf(X,T,u);


まぁそのコードに関しては色々言いたいことあるんだけどね。
最初のforブロックはones使えよとか
i=a:1:b は i=a:b でいいじゃないかとか
スペースとかインデントとか
434デフォルトの名無しさん:2011/09/01(木) 10:46:31.94
>>433
ありがとうございます。とても助かりました。
指摘も参考になりました。

数学的な質問になるかもしれないのですが・・・
432のu=sin(pi*x);の部分を
u=sin(pi*x)+sqrt(-1)*cos(pi*x); ←これは自分が適当につくりました
と、虚数を含む式として走らせてみたところ、
---------------------------------
??? Error using ==> surf at 78
X, Y, Z, and C cannot be complex.

Error in ==> question at 28
surf(X,T,u);
---------------------------------
というエラーが出てしまいました。
初期条件のuや、
for文の中のu(i,j)の式に、例えば
u(i,j)=(1/sqrt(-1)) * (u(i-1,j)+((dt)/(dx)^2)*(u(i-1,j+1)-2*u(i-1,j)+u(i-1,j-1)));
のように虚数が含まれる場合はどのような手順で解を導けば良いのでしょうか?
課題や研究ではなく、単純に疑問に思いました・・・


435デフォルトの名無しさん:2011/09/01(木) 14:00:42.44
>>434
複素数ってのは描画するとしたら複素平面上にしかできないわけで、
xとtを軸とした3次元プロットは手書きしようとしてもできないでしょ。

自分は振動の分野の人間だから
複素数は時間領域の場合実部をとる。(結局u=sin(pi*x)になる。)
ちょっと問題設定がわからないからこれ以上はなんとも言えないな。

ちなみにsqrt(-1)はMatlabの場合1iで書けるよ。
u=sin(pi*x)+1i*cos(pi*x);
436デフォルトの名無しさん:2011/09/02(金) 09:39:06.37
>>435
ありがとうございます。
複素数を実部と虚部に分けて考えるべきでしょうか。
例えば
u(t,x)=sin(pi*x)+1i*cos(pi*x)=a(t,x)+1i*b(t,x)
として、
a(t,x)とb(t,x)の時間変化に伴う値の変化を調べるのがいいのかなと。
u(t,x)の初期条件や境界条件からa(t,x)とb(t,x)のそれぞれの条件も出てくると思いますし。


437デフォルトの名無しさん:2011/09/02(金) 11:14:58.46
>>436
まぁ少なくとも線形な方程式なら問題なくそれで解けるよね。
ただ複素数にして何を知りたいのかがよくわからないから
何とも言えないところではある。
438デフォルトの名無しさん:2011/09/03(土) 19:27:45.28
>>437
線形でない場合は違うのでしょうか??・・・^^;
線形でない場合って・・・例えばどんな場合でしょうか・・・?
無知ですみません。。
439デフォルトの名無しさん:2011/09/04(日) 11:10:03.66
>>438
単純な例として
線形:  y = 2*x
非線形: y = x*x
の場合、x = a + ib を代入したときに
非線形の場合成立しないでしょ。
正しくは
 y = a^2 - b^2 + 2i*a*b
なのに、実部と虚部別に計算すると
 y = a^2 + i*b^2
になる。

※非線形というのは1次式または0次式(線形)でない、という意味ね。念のため
440デフォルトの名無しさん:2011/09/04(日) 12:40:33.68
教えていただきありがとうございます。勉強になります・・・
この機会なので、もう少し教えてください・・
例えば

i*(δu/δt)+i*(δu/δx)+u^2=0・・・(1)
っていう非線形の偏微分方程式があったとき、

u=u(t,x)、0≦x≦1、0≦t≦10
境界条件は (δu/δx)(t,0)=(δu/δx)(t,1)=0
初期条件は、u(0,x)=sin(πx)+i*x*cos(πx)
とした場合、
441デフォルトの名無しさん:2011/09/04(日) 12:41:13.47
上の続き・・・


安易ですが、自分の解法の流れとしては・・・
まずはu=u(t,x)=a+ib=a(t,x)+i*b(t,x)、 (a,bは実数)として,
(1)に代入して実部と虚部を分ける?

-δb/δt - δb/δx + a^2 - b^2 = 0 ・・・(2)
δa/δt + δa/δx +2ab = 0・・・(3)

次にu(t,x)の境界条件や初期条件から、
a(t,x),b(t,x)のそれぞれの境界条件や初期条件を求める・・・

そして、(2)、(3)を解く・・・
(ここまでは合っていますでしょうか?^^;)


線形項については、時間変化に伴うa(t,x)とb(t,x)についての値の変化を見る・・・
非線形項のu^2については、u^2=(a+i*b)^2=a^2-b^2+2ibの、
実部(a^2-b^2)、虚部2bについて、それぞれ変化を見る・・・

何を知りたいのかは別にして、解析の流れとして
このように考えたのですが、おかしいでしょうか・・・?



442デフォルトの名無しさん:2011/09/06(火) 23:10:27.46
すみません、取り込み中のところすみませんが、
matlabでコードを作って計算させるときに、
計算時間がえらく長くかかることあるじゃないですか?
で、何十分もかけた割にはあんまり有益なデータが取れなかったりして・・・

実際にmatlabを走らせる前に、だいたいの計算時間みたいなのを知ることって出来ないんしょうか?
厳密でなくても、だいたいでも結構です。

やり方などわかる方、教えてください。

443デフォルトの名無しさん:2011/09/07(水) 07:31:34.26
profile
tic toc
でループの中とか時間のかかりそうな部分を計測して
ループの回数をかけるとか
444デフォルトの名無しさん:2011/09/07(水) 15:52:49.54
matlab使う前に基本的なプログラミングからやり直したほうがいいと思う。
マクロ・スクリプトとして便利だけどライブラリ任せになるとツール頼みになりますよ。
matlabやoctaveてインタプリタだからプログラミングしても遅いと思うけど。

インタプリタだと、極端な話、例えばN88BASIC互換のインタプリタ言語をPentium4-3Ghzで動作させたものと
25MhzのSH2-7125のC/C++コンパイラでベンチとれば、SH2にあっさり負けますよ。
場合によっては1/10以上の差がありますから数値計算でプログラミングできない人は致命的ですよ。
ちょっとした電卓代わりなら良いですが、便利だからとクラスタでインタプリタ動かそうとしてる人はリソースの無駄遣いで、
そんなもの幾ら高速のンピュータでもリソースは足りませんよ。
445デフォルトの名無しさん:2011/09/07(水) 16:41:16.93
>>444 は、いまどき珍しい原理主義者だなぁ。
例に挙げてるのもホントに極端なものだし。
「インタプリタだから何でもかんでも遅い」っていうのは、
頭が固くて、なおかつ自分でベンチとってないお年寄りの念仏でしかないよ。
Matlab は、コードの可読性と処理速度のバランス面で、たいへん優れている。

Matlab で致命的に遅いのはグラフィックスまわり。描画の方。レンダリング重すぎ。
446デフォルトの名無しさん:2011/09/07(水) 18:01:15.48
質問よろしいでしょうか?
mex -setup のコマンドを用いてコンパイラの設定を行おうとしたところ,
カスペルスキーから警告されました.そして,操作を許可したのですが,その
直後にMatlabが落ち,起動しなくなってしまいました.
mex -setup のコマンドが正しく実行されない理由についてお教え下さい.
宜しくお願いいたします.
447デフォルトの名無しさん:2011/09/08(木) 02:15:46.63
C/C++でライブラリに頼らず書けってのか。
プログラミング初心者にそんなこと言ってたら
主眼の研究に取り掛かるのが
いつになることやら。

デバッガ、lint、プロファイラ、お手軽グラフィックが完備した
マトラボでさっさと研究を進めるべき。

マトラボでプログラミングに慣れて来たら、
Cなりアセンブリ言語なりCPUアーキテクチャなり
勉強すればよい。
448デフォルトの名無しさん:2011/09/08(木) 09:17:49.09
MATLABを使用する理由って、プログラムがよくわからなくても高度な計算がしたいってのが主な理由だしなぁ
学者や研究者がプログラミングも出来るにこしたことは無いけど、プログラマを目指す訳じゃないんだし、後回しで良いと思うけどね
つーかプログラミング出来るなら、自分でゴリゴリ数式書いたほうが良いし

>>446
カスペルスキーからどんな警告が出たのかくらい書け
とりあえず、カスペルスキーを外してから再度実行してみろ
449デフォルトの名無しさん:2011/09/08(木) 11:32:55.02
http://odin.fi-b.unam.mx/software/matlab/windows/Matlab%20R13%206.5%20Full%20+%20Serial%20+%20Manual/Documentation%20CD/jhelp/techdoc/math_anal/ch_8_23b.html
を参考にしながら、

δa/δt=-δa/δx-b(c^2+d^2+a^2+b^2);
δb/δt=-δb/δx+a(c^2+d^2+a^2+b^2);
δc/δt=δc/δx-d(a^2+b^2+c^2+d^2);
δd/δt=δd/δx+c(a^2+b^2+c^2+d^2);
(初期条件を適当にセットし、境界条件はノイマン条件としました)
という方程式を解こうとおもい、以下のようにコードを作ってみましたが、走らせると

??? Error using ==> solver5>pdex4pde
Too many input arguments.

Error in ==> pdepe at 259
c = feval(pde,xi(1),t(1),U,Ux,varargin{:});

Error in ==> solver5 at 7
sol=pdepe(m,@pdex4pde,@pdex4ic,@pdex4bc,x,t);
このようなエラーが出てしまいます・・・
どなたか、改良していただけると助かります・・

以下が作ったコードです・・
450デフォルトの名無しさん:2011/09/08(木) 11:35:04.74
function solver5
m=0;
x=0:0.1:10;
t=0:1:1000;
sol=pdepe(m,@pdex4pde,@pdex4ic,@pdex4bc,x,t);
u1=sol(:,:,:,:,1);

function [c,f,s] = pdex4pde(x,t,u)
c=[1;1;1;1];
f=[-1;-1;1;1] .*u;
a= -u(2)*( u(3)*u(3)+u(4)*u(4)+(1/2)*( (u(1)*u(1)+u(2)*u(2)) ) );
b= u(1)*( u(3)*u(3)+u(4)*u(4)+(1/2)*( (u(1)*u(1)+u(2)*u(2)) ) );
c= -u(4)*( u(1)*u(1)+u(2)*u(2)+(1/2)*( (u(3)*u(3)+u(4)*u(4)) ) );
d= u(3)*( u(1)*u(1)+u(2)*u(2)+(1/2)*( (u(3)*u(3)+u(4)*u(4)) ) );
s=[a;b;c;d];

function u0=pdex4ic(x)
if 4 <= x && x < 6
u0=[0.8;-0.2;-0.8;0.2];
elseif 6 < x && x <= 8
u0=[0.8;0.2;-0.8;0.2];
else
u0=[0.8;0;-0.8;0];
end


function [pl,ql,pr,qr] = pdex4bc(xl,ul,xr,ur,t)
pl = [0;0;0;0];
ql = [1;1;1;1];
pr = [0;0;0;0];
qr = [1;1;1;1];
451デフォルトの名無しさん:2011/09/10(土) 08:27:08.60
初歩的な質問で申し訳ないんですが
surfグラフをhold onして2つの面グラフの色を塗り分けたいと思ってます。

colormap([1 0 0])っていうふうにセットしてるんですが
2つ目のグラフの色で両方のグラフが染まってしまいます。
どうにかなりませんか?
452デフォルトの名無しさん:2011/09/14(水) 01:32:47.55
parallel computing toolboxを使って分散処理を考えています。
forループをparforにして分散処理をさせる方法をとっています。
このとき例えば、

parfor n=1:5
tmp(n) = n;
end
ans = sum(tmp)/n

のようにparforループ内でparforループ変数ごとに求めた値をparfor外でまとめて計算したいのですが、
「テンポラリ変数tmpはparforループの後に使われますが、その値は確定性がありません」
とエラーが出て、プログラムを実行できません。
何か良い案はないでしょうか。
453デフォルトの名無しさん:2011/09/14(水) 13:09:09.00
ないあるよ
454デフォルトの名無しさん:2011/09/14(水) 14:07:14.98
ありますん
455452:2011/09/14(水) 21:54:54.81
>>453-454
ありがとうございます。
おかげさまで解決しました。
456デフォルトの名無しさん:2011/09/16(金) 03:25:44.17
以下のコードで、
フィルタをとおさない場合、信号とそれ以外のスペクトルは25dBあるのですが、
フィルタをとおすと、信号以外のスペクトルが盛り上がってきてしまいます。
遮断領域がフィルタの影響で落ちて、通過帯域はそのままであって欲しいのですが、
どういった理屈でこうなってしまうのでしょうか?

data_len = 120000;
data=0.5*sin(2*pi*1/30*(0:data_len-1));%1MHzの信号。30MHzサンプリング。
b=fir1(33,0.4);
data=filter(b, 1, data);
plot(log10(abs(fft(data)).^2));
457デフォルトの名無しさん:2011/09/19(月) 21:40:16.71
それはMatlabのせいじゃなくて、フィルタってそんなもん。
458デフォルトの名無しさん:2011/09/20(火) 10:30:56.56
計算した結果を変数エディタやグラフにすると10^-4よりも小さい値は0になるのがデフォですか?
459デフォルトの名無しさん:2011/09/21(水) 11:56:36.78
matlabで行列名に番号等を付けて、ループを使って自動的に回したり作成したいんですが、
どうしたら良いですか?

たとえばA1,A2,A3…A100などと100個の行列を作成したい場合、
行列の名前に数字等を付けて、

for i=1:100
A[i]={6,6,6}←ここの値、式はなんでも良いのですが・・・
end

とかにして、意図した数の行列を作成したりするなど、行列の名前につけた数字に対して
iなどの変数を用いたりすることは可能でしょうか?
またどういう表記にすれば良いのでしょうか?
初心者の質問ですみません。
460デフォルトの名無しさん:2011/09/21(水) 14:02:49.58
もし本当に 100 個の変数が必要なら、以下のように eval を使い、
「文字列の内容そのものを評価する」方法で、それを実現できます。

for i = 1:100
str = sprintf('A%d = [6 6 6];', i);
eval(str);
end

でも、別に 100 個の変数が必要ないのなら

for i = 1:100
A(i, :) = [6 6 6];
end

とか

for i = 1:100
A{i, :} = [6 6 6];
end

というふうに 1 個の変数あるいはセルなどに収めた方がスマート。
461デフォルトの名無しさん:2011/09/22(木) 16:25:54.53
初歩的な質問ですいません。
連結リストをつくるときなど、Cだとポインタを使うようなケースを、
Matlabではどんな感じで書くのでしょうか?
462デフォルトの名無しさん:2011/09/22(木) 17:21:51.88
libpointer が使える環境なら、
それ使って C での実装をトレースすればよい。

でも原理的に連結リストを実現するために必要な情報さえ把握できていれば、
libpointer を使わずに自分で組む方法も自然と頭に浮かぶと思うけど。
463461:2011/09/22(木) 17:58:37.61
>>462
レス有難うございます。
当方Cをほんの少し知っている程度の人間なのですが、
今後Matlabも少々扱わなければならなくなり
Matlabの入門書を読んでいて疑問に思った次第です。

libpointerを使わない場合は、
構造体のアレイや、クラスを使うのでしょうか?
464デフォルトの名無しさん:2011/09/22(木) 18:08:00.55
>>463
そういう認識で良いと思います。
Matlab みたいに配列や行列の可視化が容易な環境の場合は、
変に C でのポインタの概念に縛られない方がよいかと。
465459:2011/09/22(木) 18:24:56.20
>>460
どうもありがとうございました。
出来ました。
466デフォルトの名無しさん:2011/09/22(木) 20:49:45.08
すみません、新しい質問なのですが、
画像を数十個出力して、連番になるように保存したいのですが、
どのようにすればよいのでしょうか?
いちいち出力したあとに一個一個saveしていくのは非常に面倒です・・・
また、画像を1つ1つ表示させず、保存のみしていく方法を教えて頂けたら尚嬉しいです。。
コードは以下のように作りまして、testの回数毎にe,f,g,hという関数をグラフとして出力しています
二つめの・・・の部分でe,f,g,hを計算しています。
どなたか分かる方、どの部分にどのようなコードを挿入すべきか教えて頂けると助かります。

467デフォルトの名無しさん:2011/09/22(木) 20:51:23.25
これが馬鹿には見えないコードってやつですか
468デフォルトの名無しさん:2011/09/22(木) 20:51:46.69
上の続き

for test=1:1:14

if test==1
epsilon = 0;
  ・・・
elseif test==13
epsilon = 0.013;
else
epsilon = 0.014;
end

・・・

469デフォルトの名無しさん:2011/09/22(木) 20:52:04.07
上の続き

figure;
waterfall(x,t,e);
zlim([-1 1]);
view([20,45]);
set(gca,'FontSize',18);

figure;
waterfall(x,t,f);
zlim([-1 1]);
view([20,45]);
set(gca,'FontSize',18);

figure;
waterfall(x,t,g);
zlim([-1 1]);
view([20,45]);
set(gca,'FontSize',18);

figure;
waterfall(x,t,h);
zlim([-1 1]);
view([20,45]);
set(gca,'FontSize',18);

end



470463:2011/09/22(木) 21:50:16.27
>>464
発想を切り替えなくてはならないということですね。
アドバイス有難うございました!
471デフォルトの名無しさん:2011/09/22(木) 22:44:38.79
>>466
1. 連番のファイル名を作る ... >>460 参照
2. Figure を保存する関数 ... saveas
3. Figure を消す関数 ... close
というわけで、help コマンドでこれらの関数の使い方を覚えて試行錯誤すべし。
あと、Figure のハンドルの概念を help gcf を実行して学んでおくと後々便利。

Figure を表示しない(隠す)というのは
>> fh = figure;
>> set(fh, 'Visible', 'off');
みたいにして Visible プロパティを off にすれば実現できるけど、
>>466 のやりたいことを推測する限りでは本質ではない気がする。
472デフォルトの名無しさん:2011/09/22(木) 23:43:10.92
>>466
foldername=sprintf('test%f',test);
これをforのすぐ後ろに置いて

filename=sprintf('%s\\e_test%f.fig',foldername,test);
saveas(gcf,filename)
これをfigure毎に後ろに置くのはどうですか?
e_の部分をf,g,hにして各グラフ毎に。
473デフォルトの名無しさん:2011/09/23(金) 00:14:16.15
すいません、当方octaveしか無い貧乏学生なんですが

「filtfilt関数は、filter関数に比べて次数が倍になる」
みたいなのですが、それで合っていますか?
4次のバターワースフィルタを

[B,A]=butter(4,fc_Hz/(Fs/2));
y2=filter(B,A,y);
y3=filtfilt(B,A,y);

ってやると、y3はy2に比べて次数が倍(8次)になっている感じなんですが。
位相を合わせるために前からfilterかけて、さらに後ろからfilterかけるので
結局次数が倍になると理解していますが、合っていますでしょうか?
474デフォルトの名無しさん:2011/09/23(金) 00:40:11.09
Matlab の help を一部引用します。

FILTFILT Zero-phase forward and reverse digital filtering.
Y = FILTFILT(B, A, X) filters the data in vector X with the filter described
by vectors A and B to create the filtered data Y. The filter is described
by the difference equation:

というわけで、本来 filtfilt は複数のフィルタを合成する関数です。
決め打ちでフィルタの次数を倍にする訳ではなくて、その用途にも使える、ということ。
475デフォルトの名無しさん:2011/09/23(金) 08:58:57.39
>>474
すいません、
引数が

filter(B,A,y);

filtfilt(B,A,y);

なので、
>複数のフィルタを合成 
っていうのがよくわからないのですが。

聞きたい事は、

filter関数で出た結果と filffilt関数で出た結果は違う。
filtfilt関数の結果はfilter関数よりも次数が倍になっている

っていうのが合っているかどうかなんですが。
476デフォルトの名無しさん:2011/09/23(金) 15:09:08.62
新規の質問です、すみません。

for i=1:1:1000
for j=1:1:100
u(i,j) = a(i,j)^2 + b(i,j)^2 ;
v(i,j) = c(i,j)^2 + d(i,j)^2 ;
end
end

現在とあるコードの中に上記を含ませているのですが、計算に時間がかかってしまっています。。
2重ループではなく1回のループで計算させるやり方を考えているのですが、どうも上手くいきません。

効率の良いやり方分かる方、ご指摘ください。。お願いします。
477デフォルトの名無しさん:2011/09/23(金) 16:02:01.06
>>471さん
>>472さん

お返事ありがとうございます。
無事ファイルの保存が行えました。助かります。
保存先が現在デスクトップ上に勝手に保存されてしまうのですが、
特定の場所に保存したい場合はどうしたら良いのでしょうか?

478デフォルトの名無しさん:2011/09/23(金) 21:45:50.74
u=a.^2+b.^2
v=c.^2+d.^2
479デフォルトの名無しさん:2011/09/23(金) 21:52:50.49
やっぱり、MATLABの記法がすかん。

fortranやC++の方がまだまし。
480デフォルトの名無しさん:2011/09/23(金) 23:56:05.46
インデックスが1から始まるのが不思議。Fortranもだっけ?
不思議に感じるのはC脳だからだろうか?
481デフォルトの名無しさん:2011/09/24(土) 00:12:10.06
Matlabの、なんというかスプレッドシート型とでもいうか、
ループの替わりにアレイの演算にするのは風変わりで面白い
他より優れているとまでは言わんが。

他所に書いたものだけど、x^2+y^2==z^2を
満たす自然数の組(ピタゴラス数):
[x y z] = ndgrid(1:100);
sol = x.^2 + y.^2 == z.^2;
f = [x(sol) y(sol) z(sol)];
482481:2011/09/24(土) 00:33:10.07
スプレッドシート型じゃなくてArray programmingと言うらしい
http://en.wikipedia.org/wiki/Array_programming
483デフォルトの名無しさん:2011/09/26(月) 16:58:48.49
matlabって乗算とかの時に*じゃなくて.*とかって書くときあるけど、なんで?
深い意味あんの?
484デフォルトの名無しさん:2011/09/26(月) 20:53:15.22
>>483
超大有り

* は行列の掛け算
.*は要素同士の掛け算

A=[1 ; 2]

A .* A = [1 ; 4]

A * A' =
[ 1 2
 2 4]

これを間違えると超ハマる。

485デフォルトの名無しさん:2011/09/28(水) 04:50:03.25
A^2は世界中で毎分、相当数のバグを生み出していると思われる
486デフォルトの名無しさん:2011/09/28(水) 15:09:16.59
おすすめの教科書を教えてください
487デフォルトの名無しさん:2011/09/30(金) 05:16:51.69
>>486
http://www.amazon.com/dp/0750687622/
かなり丁寧。プログラミング経験者ならくどいか

http://www.amazon.co.jp/dp/4798020419/
プログラミングは知っているという前提。
リファレンスとして使える
488デフォルトの名無しさん:2011/10/01(土) 01:08:11.04
saveasをつかって画像を保存しようとしたら
Need a handle to a Figure object
って出たんだけど、直し方知らないですか?
489デフォルトの名無しさん:2011/10/01(土) 10:18:58.14
>>488
もうちょい詳しく。
saveas( )
のカッコの中を書いてください
490デフォルトの名無しさん:2011/10/01(土) 22:49:07.80

function test

P = pi.*1/3;
x = linspace(-10,10,100);
dx = 0.01;
a = x.*sin(P);
e = a;
function e1=Fe(e)
e1= -(e(i,j+1)-e(i,j-1))/(2.*dx) ;
end

・・・

end


って感じのtest.mファイルを作って
(・・・の部分では最終的にeが100*100の行列になるまでいろいろ計算しています)
「Run File」でmatlabを走らせて、
waterfallでeをグラフ化しました。
しかし、eについて、WorkspaceやVariable Editorで配列の中身を確認できないんですけど、
確認できるようにするにはどうすればいいでしょうか?


491デフォルトの名無しさん:2011/10/01(土) 23:03:53.39
追加で質問なんですが、
配列に値を入れていくときに、linspaceとかを使うと計算時間の短縮に繋がると
思うんですが、その他に時間短縮でよく使えるものを教えてください。
あと、functionを使うと計算時間が遅くなったりすることはありませんよね?
492デフォルトの名無しさん:2011/10/01(土) 23:32:59.87
プロファイラが標準でついてるんだからまず試してみるべき
493デフォルトの名無しさん:2011/10/02(日) 18:50:42.53
R2011aの学生版を購入し、パス設定で下記のツールボックスを導入したのですが関数未定義となってしまいます
これはツールボックスが対応していないからなのでしょうか?
http://www.mathworks.com/matlabcentral/fileexchange/19
494デフォルトの名無しさん:2011/10/02(日) 19:05:53.04
自己解決しました
495デフォルトの名無しさん:2011/10/04(火) 14:59:59.55
z平面に極をプロットしたグラフを
円グラフみたいに扇形で色分けしたいんですが
どうやってやればいいのでしょうか?
496デフォルトの名無しさん:2011/10/04(火) 15:51:33.45
それは

借金をこさえてしまって貧乏なんですが
どうやって金持ちになればいいですか?

っていうくらい漠然とした質問だと思います。
せめて、何を試してどういう状態のグラフが手元にあるのか説明しましょう。
497デフォルトの名無しさん:2011/10/04(火) 16:07:45.88
>>495
失礼しました。
LPC係数をフィルタの伝達関数としたときのZ平面で極をプロットしたグラフです。
LPC係数はa0〜a10とし、
伝達関数H(z)=1/(a0+a1・z^-1+a2・z^-2+…+a10・z^-10)
です。

LPC係数a0〜a10はlpc_coefに格納、

kai=roots(lpc_coef)
zplane(1,kai)

としてz平面にプロットしました。
498デフォルトの名無しさん:2011/10/04(火) 16:40:00.02
>>497
zplane で出力したグラフを後から色分けしようとすると大変だと思うので、
kai の値を参照して、グラフ自体は pie で描画するというのはどうでしょう?
499デフォルトの名無しさん:2011/10/04(火) 16:47:48.29
>>498
レスありがとうございました、助かります。試してみます。
500デフォルトの名無しさん:2011/10/06(木) 15:13:16.29
>>498
pieのグラフとplotのグラフを重ねて表示させる方法を教えていただけないでしょうか;
501デフォルトの名無しさん:2011/10/06(木) 15:37:36.06
重ねて表示するだけなら hold on; を使えばよいです。

figure; hold on;
pie([2 4 3 5],{'North','South','East','West'});
x = -pi:pi/10:pi;
y = tan(sin(x)) - sin(tan(x));
plot(x,y,'--rs','LineWidth',2,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','g',...
'MarkerSize',10);
502デフォルトの名無しさん:2011/10/06(木) 21:24:43.67
いつになったらeps保存が融通効くようになるのかね
503デフォルトの名無しさん:2011/10/07(金) 21:14:41.98
axesでクリックした座標に点を打ち、原点からその点までの線分と
x軸とのなす角をクリックする度に求めたいのですが、

function axes1_ButtonDownFcn(hObject, eventdata, handles)
Cp = get(hObject,'CurrentPoint');
xp = Cp(2,1) % X座標
yp = Cp(2,2) % Y座標
plot(xp,yp)
axis square

とすると、2回目のマウスクリック以降で座標が取得できなくなってしまいます。
plotを削除すると、繰り返して座標を取得ができます。
どうすればできますか?
504500:2011/10/10(月) 04:24:08.71
>>501
ありがとうございます!
505デフォルトの名無しさん:2011/10/11(火) 13:44:14.67
学校のPCでマトラボプログラミングをしていたところ、
license manager error -15
というメッセージが出て、
以降起動できなくなりました。
原因と解決策を教えてください。
トラブルシューティング読んでも良くわかりませんでした
506デフォルトの名無しさん:2011/10/11(火) 15:40:43.36
>505
学校のPCの管理者に報告。
507デフォルトの名無しさん:2011/10/11(火) 21:30:17.06
>>505
神の啓示だと思って
octaveに乗り換える
508デフォルトの名無しさん:2011/10/12(水) 00:40:48.45
OctaveとかFreeMatは細かい所でMATLABと違うから困るよな
509デフォルトの名無しさん:2011/10/12(水) 05:00:42.59
matlabは年に2回とか訳の解らんペースで更新するからなぁ
しかも結構コロコロ関数が変わるし…

それはそうとどなたか>>503頼みます
510デフォルトの名無しさん:2011/10/12(水) 10:55:21.29
>>509
以下のコードで問題なく動いてる。
もし guide 使ってるなら、そっちの問題かもね。
あるいは、無理やり感があるけど axes1_ButtonDownFcn の最後に
set(hObject, 'ButtonDownFcn', @axes1_ButtonDownFcn);
の一行を加えとけばいいんじゃないかと。

-- test.m --

function test
figure; hold on;
set(gca, 'ButtonDownFcn', @axes1_ButtonDownFcn);

function axes1_ButtonDownFcn(hObject, eventdata, handles)
Cp = get(hObject,'CurrentPoint');
xp = Cp(2,1); % X座標
yp = Cp(2,2); % Y座標
plot(xp,yp);
axis square;
511デフォルトの名無しさん:2011/10/12(水) 19:41:39.86
>>510
どうもありがとうございます! test.mはきちんと動きました。
でもguideを使った自分のやつに持ってくるとやっぱりダメだった(´・ω・`)

guide使うのって良くないの? 
自分はmatlabのGUIは>>503の時点でguideのチュートリアル見ながら始めて3時間の初心者なので
こういうユーティリティに頼らないと簡単なものでもGUIは難しいです

> axes1_ButtonDownFcn の最後にset(hObject, 'ButtonDownFcn', @axes1_ButtonDownFcn);
はエラーが出てうまく動きませんでした。(これもtest.mではきちんと動作する)
@って関数ポインタみたいなもの? 自身の中で呼び出すという行為の意味もまだ理解できてません。

これは意外と難しいものに手を出してしまったかな;
512510:2011/10/13(木) 09:45:29.20
>>511
いや、GUI を組むときに guide を使うのは王道なので、
そこから入るのは間違ってないよ。
guide の知識は、少なからず持っていた方が良いです。

でも僕の場合は、guide を使うことで余分な fig ファイルが作成されたり、
自分の意図していないコードが混入してしまうことを避けるために、
スクラッチから自分で書くことが多い。

@ は、まさしく関数ポインタだね。
コードの最後で set を使って関数ポインタを設定しなおすというのは、
plot の実行によって、万が一 axes に本来セットされていた
ButtonDownFcn の内容が消されてしまった場合に備えて再定義をする、
という意図でした。
513デフォルトの名無しさん:2011/10/13(木) 19:38:24.78

すみません、matlabで例えば数十分かかると考えられる計算を行うとします。
その場合、皆さんなら計算後のデータは一般的にどのように保存しますか?


これまで、パラメータを50個用意してそれぞれ計算を行い、
後に見比べるために画像(jpeg)として保存していました。
(for文を使って一定量パラメータを変化させる毎に、saveasを使ってグラフを保存していた。)
今までは数分程度で済む計算だったのでこれでも良かったのですが、
今後はパラメータ1個あたりに対しかかる計算時間が数十分になる可能性があります。。


そこで、今までと同じように保存していくやり方では、もしグラフの保存方法(角度など)を間違えてしまった場合に
かなりの損失になってしまうと思ったので質問しました。。


何か効果的なデータの保存の仕方はありませんでしょうか?
以後もパラメータを50個用意して、for文を使って一定量変化させて計算していこうと思うのですが・・


514デフォルトの名無しさん:2011/10/13(木) 23:19:19.60
一般人の疑問にみんなの頭を使って考えてほしいのだけど、PCって2進法で動いてる訳じゃんオンとオフそれにマイナス1いわゆる逆にオンになるとやれる事が増えるって聞いたんだけど何がどうなるの?

教えてもらえませんか??????
515デフォルトの名無しさん:2011/10/13(木) 23:55:58.44
詳しくないけど、3進なら情報量は増える。
でも2進はその単純さからCPUやRAM、ハードディスクの
高速化・高集積化が可能になったのでは?

それに高電圧、中電圧、オフじゃなくて、
逆の電圧というのは回路が複雑になりそうだ。
電子工作をほんのちょっとやった経験からすると
516デフォルトの名無しさん:2011/10/14(金) 00:00:04.56
といっても「中電圧」というのも難しい。
オン/オフなら、とにかく閾値を超えるか抑えるか
だけ考えればいいから
517デフォルトの名無しさん:2011/10/14(金) 01:42:37.37
>>513
で書き込んだ者です。
saveを使ってworkspace内の変数(全て)をそれぞれ保存していく方針を立てました。

現在、走らせているmファイルはデスクトップ上に置いているのですが、
saveを使ってmatファイルを保存する際、
結構な数のmatファイルがデスクトップ上に出来てしまうため、
デスクトップ上のフォルダに保存させたいのですが、
保存先を指定するコード、もしくはコマンドを教えてください・・
518デフォルトの名無しさん:2011/10/14(金) 09:51:17.91
その質問の本質は、Windows でデスクトップのパスが
どう扱われてるかってことだと思う。

で、それはバージョン依存なんだけど、あなたのユーザー名が foo だとすると
そのパスは一般的に以下のようになる。
XP では "C:\Documents and Settings\foo\デスクトップ"
7 では "C:\Users\foo\Desktop"
これを使って、例えば以下のように
save の引数となるファイル名をフルパスで書けばいい。
別に相対パスでもいいけど。

p = 'C:\Users\foo\Desktop\';
f = datestr(now, 'yymmddHHMMSS');
save([p f]);

でもデスクトップ上に安直にスクリプトやデータを置いていく癖は、
「絶対に」直しておいた方が良いと思うけどね…
519デフォルトの名無しさん:2011/10/14(金) 13:19:22.49
(1)------------------------
for j=1:nx+2
e(1,j) = e1(j);
e(2,j) = e2(j);
end

(2)------------------------
for j=1:nx+2
e(2+i,j) = e3(j);
end
------------------------
をそれぞれ、時間短縮のために(1)'、(2)'としてるんですけど、マズイですか?


(1)'------------------------
e(1,:) = e1(:);
e(2,:) = e2(:);

(2)'------------------------
e(2+i,:) = e3(:);
------------------------
520デフォルトの名無しさん:2011/10/14(金) 19:21:20.56
uが50000000*200の行列で、それぞれの要素に値が入っているとします。
これをそのままグラフに出力すると時間がかかるので、
1行目から、一定数(例えば100)毎の行の配列を
グラフにプロットさせたいのですが、やり方がわかりません

x = -10: 10: 200 ;
t = 0: 100 :50000000 ;
waterfall(x,t,u) ;
とするとエラーが出ます。
どなたか訂正をお願いします。。
521デフォルトの名無しさん:2011/10/14(金) 20:47:18.96
MATLABでは非対称行列の固有ベクトル(特に固有値が重解をもつ場合)は
どうやって求めているんですか?
522511:2011/10/14(金) 22:13:55.22
>>512
うーむ、なるほど。これはもっと勉強してから後で作り直すとして
今は別な方法でやってみるよ。ありがとうノシ
523デフォルトの名無しさん:2011/10/15(土) 00:04:27.27
>>520
行列uの意味が分からないので超訳で。
modの行の意味はlogicalあたりを参照

u = peaks(1000);
[elm_tmax elm_xmax] = size(u);

xind = ~mod(1:elm_xmax,10);
tind = ~mod(1:elm_tmax,100);

usumm = u(tind,xind);
waterfall(usumm)
524デフォルトの名無しさん:2011/10/15(土) 12:25:15.75
すみません、以下のようにtestという変数の値を使ってファイル名とし、matファイルを作ろうとしました。
で、保存する変数(e,f,g,h,u,v)を指定しようと試みたのですが、どうも上手くいきません。
どなたかご指摘お願いします。

filename=sprintf('test_%d',test);
save (['' filename ''] e f g h u v) ;
525デフォルトの名無しさん:2011/10/15(土) 12:59:30.52
>>524
で書き込んだものです。
独力で解決できました、すみません。

昨日、寝る前に時間のかかる計算を行わせ、今日計算結果を見てみようと思ったのですが、
コマンドウィンドウに、
「Your MATLAB session has timed out. All license keys have been returned.」
という表示が出ていて、結果が全く得られませんでした・・

何やら4時間MATLABをアイドル状態にしていたらこのメッセージが表示されるようなのですが、
少なくとも計算結果は出力し終わっているべきなのではないかと思いました・・
計算中なのにアイドル状態と見なされるってありえるのでしょうか?
メモリ不足で途中で計算を止めたとも考えられるのですが、out of memoryなどという表示はなかったので・・
どなたか原因がわかる方、教えてください。




526デフォルトの名無しさん:2011/10/15(土) 22:28:12.81
>>525
そんな経験ないな。
ライセンスサーバ? スタンドアローン?
スリープしたりしてライセンスサーバと通信が途切れてない?
527デフォルトの名無しさん:2011/10/15(土) 23:02:03.51

すみません,数学に詳しい方にお尋ねしたいのですが,
場所に関して中心差分,時間に関しては4次のルンゲクッタ法を用いて
偏微分方程式の解を求めるコードを作りました.

とりあえず移流問題δa/δt=-δa/δxについて考えたのですが,
このコード間違ってますでしょうか・・?

境界条件は周期的境界条件なのですが,
以下は省いてありますので,抜粋なのですが・・.
iは時間のステップで,jは場所のステップです.

--------------------------------------------------------------
dx=0.001;
dt=dx/4;
for i=1:1:1000
for j=2:1:100
a1 = - (a(i,j+1)-a(i,j-1)) / (2.*dx);
k1a = a1 ;
k2a = a1+(dt/2)*k1a;
k3a = a1+(dt/2)*k2a;
k4a = a1+dt*k3a;
a(i+1,j) = a(i,j) +(1/6)*dt*(k1a +2*(k2a+k3a) +k4a);
end
end
--------------------------------------------------------------

a(1,j)には孤立波を最初に代入してあります.(j=1〜101)

どなたかご指導お願いします.

528デフォルトの名無しさん:2011/10/16(日) 00:51:58.31
matlab走らせてたら,コマンドラインに
「Operationterminated by user during ==> 〜〜」
っていう表示が出たんだけど,これって何?
何かマズイってこと?

529デフォルトの名無しさん:2011/10/16(日) 11:09:11.54
matlab初心者です。
ゼロ行列の作り方です。ゼロ行列のサイズが大きいときにはスパース行列にしないとメモリーや計算測度がおそくなると思います。
通常ゼロ行列は関数zers()で作りますが,自動的にスパース行列として作られるのでしょうか。
もしそうでないならスパースゼロ行列をつくるコマンドを教えて下さい。
A=spconvert([N,N,0])でいいでしょうか。
530デフォルトの名無しさん:2011/10/16(日) 15:16:37.66
>>529
whos という関数があるので、それを実行して
zeros によって出力された変数の正体を実際に自分の目で見て下さい。
スパースゼロ行列は sparse で簡単に作れます。

>> z = zeros(100);
>> sz1 = sparse(z);
>> sz2 = sparse(100, 100, 1);
>> whos z sz*;
531stranger:2011/10/16(日) 16:28:08.00
はじめての訪問者です・・・
関数を定義した.mファイルと、メインの.mファイルを作って、
メインのファイルの中で、
for文で何百回か関数を呼び出すようにしてあるんだけど、
恐ろしく時間がかかった。
関数呼び出しって時間かかるの?
532デフォルトの名無しさん:2011/10/16(日) 18:04:03.47
>>531
プロファイラ使って自分で確認するべし。
533stranger:2011/10/16(日) 18:53:48.03
>>520で書き込んだんだけど、

waterfall(u(1:100:50000000,1:200));
ってすれば、uの行の要素を100毎にプロットできたんだけど、
x,yの座標の両端が、行列の番号がそのまま出力されてしまう。
x軸の末端の値を-20,20
y軸の末端の値を0,50000000/100
ってしたいんだけど、xlimやylimを使っても上手く逝かないし、

x = linspace( -20, 20, 200 );
t = linspace( 0, 50000000, 100 );
waterfall(x,t,u(1:100:end,1:end));
ってやっても
CAT arguments dimensions are not consistent.
って出る。

どうすれば??^^;
534デフォルトの名無しさん:2011/10/17(月) 14:06:53.08
a=cell(10,1),b=cell(10,1)です。各セルにはN*Nの正方行列を格納します。
aとbのi番目のセルに格納されている行列の積を新しいセル配列に格納したいのですが,
for i=1:10
c
end
535デフォルトの名無しさん:2011/10/17(月) 14:09:28.44
534です。
途中で間違えて送信しました。
正しい質問です。

a=cell(10,1),b=cell(10,1)です。各セルにはN*Nの正方行列を格納します。
aとbのi番目のセルに格納されている行列の積を新しいセル配列cに格納したいのですが,
for i=1:10
c(i)=a(i)*b(i)
end
で正しいでしょうか。それともa(i)*b(i)はa(i)(:,:)*b(i)(:,:)でしょうか。
536デフォルトの名無しさん:2011/10/18(火) 01:36:14.44
MATLAB 2011a Windows x64を使っています。
行列の転地でA'とtranspose(A)にはどのような違いがあるのでしょうか。
全く同じだと思い、次のようなコードを実行すると
違う結果になって困っています。

>> A=rand(5000,5000);
>> sum(sum(abs((A')*A-(A')*A)))

ans =

0

>> sum(sum(abs((A')*A-transpose(A)*A)))

ans =

4.2131e-008

>>

なぜこのような誤差が出てしまうのでしょうか。
537デフォルトの名無しさん:2011/10/18(火) 07:16:58.75
ヘルプのExamplesがわかりにくくない?
例えば、

http://www.mathworks.com/help/techdoc/ref/setdiff.html

setdiff - Find set difference of two vectors
[c,i] = setdiff(...) also returns an index vector index such that c = a(i) or c = a(i,:).

Examples
A = magic(5);
B = magic(4);
[c, i] = setdiff(A(:), B(:));
c' = 17 18 19 20 21 22 23 24 25
i' = 1 10 14 18 19 23 2 6 15

とか。これもあっても良いけど、その前に
[c, i] = setdiff([11 22 33 44], [11 33 55]);
c' = 22 44
i' = 2 4
みたいな簡単なものをなぜ載せない
538デフォルトの名無しさん:2011/10/19(水) 00:23:46.62
>>536
A'は複素転置、transpose(A)は行列転置だから内部の計算方法が違うかもしれない
こういう話はサポートにGO!
539デフォルトの名無しさん:2011/10/19(水) 00:40:50.62
同じlapack使ってるOctaveやFreeMatのフォーラムでも聞けばわかるかもしれんな
540デフォルトの名無しさん:2011/10/19(水) 20:29:27.36
>>538
ありがとうございます。
自分なりの解釈ですが、BLAS的に
(A')*Aはdgemm(A,転置=true,A,転置=false)のように呼び出されてて、

transpose(A)*Aは別の関数で転置した上で
dgemm(転置したA,転置=false,A,転置=false)のように呼ばれているのだと思います。

で、dgemmが転置フラグの有無で、かけ算の順序かSIMD化が変わるのだとおもいます。

ちなみにgpuArrayではどちらも結果は0になり、一致しました。
541デフォルトの名無しさん:2011/10/20(木) 14:06:02.24
http://arman.boyaci.ca/a-matlab-implementation-of-havel-hakimi-algorithm/

次数列からグラフを作成するアルゴリズムを探していまして
このURLにあるHavel-Hakimiアルゴリズムを試しに実行しようと思いましたが

E(i+1:i+residual_degree(1),:) = ...
[repmat(vertices(1),residual_degree(1)) selected_vertices'];

この行で「添字による代入の次元が違います」と出てきたのですが、この代入の仕方ではだめなのでしょうか。

この記事を紹介してくださった方にメールを送ってみましたが返ってこなくてここで質問してみました。
初歩的な質問かもしれないですが分かる方いらっしゃいましたらよろしくお願いします。
542デフォルトの名無しさん:2011/10/21(金) 00:37:30.94
>>541
その式中の変数それぞれのsize()は?
543デフォルトの名無しさん:2011/10/21(金) 03:15:51.60
sinc関数を使いたいのですが、未定義の関数と出てしまいます、何が原因なのでしょうか?
544デフォルトの名無しさん:2011/10/21(金) 10:16:26.64
>>543
Signal Processing Toolbox を買ってないからでしょう。
シンプルな関数だから自分で書くのも良し。
octave から丸ごと持ってくるのも良し。
545デフォルトの名無しさん:2011/10/25(火) 04:06:20.39
matlabで数時間かかると思われる計算をさせる時、
走らせた後、しばらく(仮に1時間)経って、現在全体のどれくらいの割合まで計算が行われたか調べるにはどうすればいいですか?
一応、計算所要時間や開始、終了時刻はdispで最後に表示させるようにはしているんですが・・・
どなたかご存知の方教えてください。
546デフォルトの名無しさん:2011/10/25(火) 04:14:27.25
数秒おきに進行状況を出力する
547デフォルトの名無しさん:2011/10/25(火) 16:21:23.25
>>546
どうやるのでしょうか?^^;
548デフォルトの名無しさん:2011/10/26(水) 22:45:47.75
>>547
echo on

文末のセミコロンをすべて外す。

tic/tocを入れまくる
http://www.mathworks.com/help/techdoc/ref/tic.html

これで情報が氾濫する。
それから自分が見やすいと思うまで少しずつ減らしていけばよい
549デフォルトの名無しさん:2011/10/29(土) 22:49:37.58
スクリプトscript内でユーザ定義関数ufuncを使って,scriptを実行するとエラーメッセージ「関数としてスクリプトufuncを実行しようとしています」がでます.
スクリプトフィルscript.m,関数ファイルufunc.mはサーチパス内に保存しています.
原因がわかりません.


script.m内の記述


y=ufunc(x)



ufunc.m内の記述
function y=ufunc(s)
%


y=x+…%計算内容

ちなみに簡単な場合はうまくいきます.
エラーが発生した実際の関数はかなり長い記述です.

よろしくお願いします
550デフォルトの名無しさん:2011/10/29(土) 22:50:53.04
>>549
549です.
function y=ufunc(s)はfunction y=ufunc(x)の間違いです.
551デフォルトの名無しさん:2011/10/29(土) 23:25:49.37
>>549
Matlab ではスクリプト内でユーザー定義関数を使えません。
それはいわば、Matlab のコマンドプロンプト上で
突如 function を使って関数を定義し始めようとするようなものです。
ユーザー定義関数を別途ほかのファイルに書くか、
スクリプト自体を関数に変更することで対処すべし。
552デフォルトの名無しさん:2011/10/29(土) 23:58:55.78
>>549
which -all ufunc
の結果は?
553デフォルトの名無しさん:2011/10/30(日) 00:46:22.25
>>551
549です.
ユーザ定義関数は別のファイル(ファイル名ufun.m)で定義し,スクリプトフィル内ではufuncを呼び出すだけです.
ですから,ご指摘のような状態ではないと思います.
554デフォルトの名無しさん:2011/10/30(日) 00:50:13.35
>>552
which -all ufuncのufuncのところは私が定義したユーザ定義関数名をいれますか,それともこのままですか.
555デフォルトの名無しさん:2011/10/30(日) 00:54:25.55
>>552
549です.
which -all の使い方がわかりました.
which -all ユーザー定義関数名
を実行すると,ユーザ定義関数名が,正しいフルパス付きで返されます.

何か解決策のヒントになりましたでしょうか.
556デフォルトの名無しさん:2011/10/30(日) 01:06:41.38
>>554
前者
557デフォルトの名無しさん:2011/10/30(日) 01:08:56.13
>>555
誤解した、556は無視して。
「ユーザー定義関数名」を何か適当な他の名前に変えるとどうなる?
558デフォルトの名無しさん:2011/10/30(日) 01:54:33.65
>>553
斜め読みしてすっごい勘違いしてた。ゴメン。

短い ufunc.m と長い ufunc.m が存在してて
長い ufunc.m を呼び出した時だけエラーが発生するということなら、
単に長い ufunc.m の頭から function y=ufunc(x) が抜けてて
関数がスクリプト扱いされてるんじゃないかという気がする。
559デフォルトの名無しさん:2011/10/30(日) 02:03:24.17
>>555
which -all 関数ファイル名 in スクリプト名
はどうなる?
560デフォルトの名無しさん:2011/10/30(日) 02:07:14.54
>>549
> script.m内の記述
>
> …
> y=ufunc(x)


「y=ufunc(x)」

「ufunc」
に書き変えてから、この行にプレークポイントを置いて、
F5でここでストップしたらF11すると何が開く?
561デフォルトの名無しさん:2011/10/30(日) 03:07:35.18
>>559
正しいパス付のファイル名が返されます.
562デフォルトの名無しさん:2011/10/30(日) 03:19:38.88
549です.

原因がわかりました.
恥ずかしながらおバカな間違いでした.
関数定義文のキーワードfunctionがfuncionとタイプミスしていました.
お騒がせしました.

ところでこのような間違いを自動的に検出しれくれるエディターの設定はないでしょうか.
VB.netのエディタでは自動的に発見されるのですが.
563デフォルトの名無しさん:2011/10/30(日) 09:48:00.47
>>562
functin y=ufunc(s)
とすると付属エディタでの色が
hold on
なんかと同じだろう。
ufunc.mというスクリプトの先頭で
functin('y=ufunc(s)')
と関数が呼び出されていると解釈される。
その色でおかしいと気付く
564デフォルトの名無しさん:2011/10/31(月) 10:15:56.88
>>563
562です。
ありがとうございました。
まだ使い始めで色違いに気づきませんでした。
565デフォルトの名無しさん:2011/10/31(月) 17:41:28.26
plotを用いてグラフを描画するときに,条件を満たした部分だけ背景の色もしくは
線分の色を変更したいのですが,良い方法はありますでしょうか?
イメージとしては以下のような感じです.
ttp://image.space.rakuten.co.jp/lg01/68/0000069268/66/img90e521adzik5zj.jpeg
566デフォルトの名無しさん:2011/11/01(火) 12:55:20.63
>>565
Matlab 標準の機能としては無かったと思う。
fill でシコシコ関数を自作して、それらしく見せることはできた。
567565:2011/11/01(火) 14:57:46.27
>>566
ありがとうございます.
fillで代替するように試してみます.
568デフォルトの名無しさん:2011/11/01(火) 19:18:36.27
2次元のデータを引数として、2次元データの散布図をプロットする。
かつデータから求めた回帰直線をプロットする。戻り値として回帰直線 y=ax+b の a と b を出力する関数を作成する

手順がわからず困っています
どなたか上の問題について教えて下さい
569デフォルトの名無しさん:2011/11/02(水) 08:12:29.50
>>568
ここは宿題丸投げスレじゃないぞ
検索したらすぐ出てきたが
570デフォルトの名無しさん:2011/11/02(水) 23:14:22.80
>>569
検索しても出てこなかったんですけど…?
どこのサイトですか
571デフォルトの名無しさん:2011/11/03(木) 01:17:13.26
回帰直線なんていくらでも出てくるだろ。MATLAB関係なしにちゃんと勉強しろ。
理解できなかったら今すぐ大学やめていいレベル。
2次元データのプロットもplotで一発だし。ヘルプ読めば頭使わなくて出来るだろクソが。
572デフォルトの名無しさん:2011/11/03(木) 01:32:28.70
573デフォルトの名無しさん:2011/11/03(木) 16:34:34.82
>>572
ありがとうございます
574デフォルトの名無しさん:2011/11/03(木) 22:26:25.67
4等当たってledスタンドもらったWWW
575デフォルトの名無しさん:2011/11/05(土) 14:07:52.77
偏微分方程式解く場合、matlabだと標準装備でpdepeってのがあるようなんですが、
それは解ける方程式の型が限定されてしまうらしいです。(放物型、楕円型)
もしpdepeの守備範囲外の方程式を解こうとした場合、
特に時間積分はルンゲ=クッタ法が用いられることが多いと思うのですが、
その際に以下のパッケージode45は使うことは出きるのでしょうか?
http://odin.fi-b.unam.mx/software/matlab/windows/Matlab%20R13%206.5%20Full%20+%20Serial%20+%20Manual/Documentation%20CD/jhelp/techdoc/ref/ode45.html
一般的にこれは常微分方程式で使われる例が多いようで、偏微分方程式を解く際に用いることは出来るのかが気になりました。


576デフォルトの名無しさん:2011/11/05(土) 16:58:53.50
できません
偏微分方程式は常微分方程式とは別物
577デフォルトの名無しさん:2011/11/06(日) 23:24:14.50
>>576
じゃあ,やっぱり自分でプログラムを作るしかなさそうですね・・・
これからmatlabのプログラムを頑張って作ってみます・・

ところで,たとえば,
δa/δt = −δa/δx + a*cos(x) + (a^2+b^2)*a
δb/δt = −δb/δx + b*cos(x) + (a^2+b^2)*b
っていう方程式を解こうと考えた場合,
(仮に初期条件を孤立波としておく)

とりあえず線形項を考慮して,dt/dx<<1
は満たす必要があると思いますが,非線形項を含む場合は
どのようにdtやdxを決定してやればいいのでしょうか?
プログラム作るのはそこまで難しくなさそうだけど,
dtやdxってテキトーに決める以外,方法はなくないですか?
578デフォルトの名無しさん:2011/11/07(月) 09:41:10.55
コマンド:legendreを使ったLegendre多項式の近似がうまくできません。
厳密に言うなら、近似そのものはできているのですが、導出時に得られる係数の値が正しくないという状況です。

例えば、
x=0:0.1:4
y=2*x^2
としたときに、P(0),P(1)に対する係数は0,P(2)の係数は2になるはずです。
にもかかわらず、予想した値を得ることができませんでした。
どなたか教えてください。
579デフォルトの名無しさん:2011/11/08(火) 21:02:56.09
Re = zeros(50,2);
x = randn(5000,50);

for h = 3:50
for t = 1:5000 
Mean_d = mean(x(1:t,h));
var1(m) = (sum((x(1:t,h)-Mean_d).^2)/h); 
var2(m) = (sum((x(1:t,h)-Mean_d).^2)/(h-1));
end
Re(n,1) = mean(var1); 
Re(n,2) = mean(var2); 
end

plot(Re(h,1), '-'); 
hold on; 
plot(Re(h,2), '-');

上のプログラムは、「1/nで分散した場合と不偏分散( 1/(n-1) )を比較できるグラフを出力する」ものです
このプログラムは合っていますか?間違っている箇所があれば教えてください
580デフォルトの名無しさん:2011/11/09(水) 00:34:31.36
>>579
日本語が間違ってる。
内容を理解してないのがバレバレ
581デフォルトの名無しさん:2011/11/09(水) 19:05:12.38
>>580
それでは、>>579のプログラムが何なのか教えてください
これで合っているはずなんですが…
582デフォルトの名無しさん:2011/11/09(水) 22:04:09.56
>>581
合っているはずなら、推定量の不偏性について調べる。
その後コードを読んで考える。
583デフォルトの名無しさん:2011/11/09(水) 22:07:30.46
>>581
ちなみに合って無いからな。
宿題はちゃんとやれよ
584デフォルトの名無しさん:2011/11/09(水) 23:19:35.93
Re = nan(50, 2);
vars = zeros(2, 5000);
x = randn(5000, 50);

for h = 3:50
   xx = x(:, 1:h);
   Mean_d = mean(xx, 2);
   bunsi = sum((xx-repmat(Mean_d, 1, h)).^2, 2);
   vars = [bunsi/h, bunsi/(h-1)];
   Re(h, :) = mean(vars);
end

plot(Re)
585デフォルトの名無しさん:2011/11/10(木) 05:54:32.37
メモリに入りきらない大きさの行列を扱いたいのですが、
MATLABである程度効率よくOut-of-coreを実現する方法はありませんか?

OSのスワップを活用する方法は実用的ではありませんでした。
586デフォルトの名無しさん:2011/11/10(木) 11:09:32.80
スワップを使うのが実用的でなかったというのは、速度的にということかな?
まぁ小手先の技は使えないでしょう。
Parallel Computing Toolbox 一択では?
587デフォルトの名無しさん:2011/11/10(木) 20:28:13.19
>>584
ありがとうございます
今回の一件で自分のMATLABに対する未熟さを痛感しました
これを肥しに勉強します
588デフォルトの名無しさん:2011/11/11(金) 23:15:03.07
>>584
これ、かなり遅くないか?
589デフォルトの名無しさん:2011/11/11(金) 23:15:42.40
>>585
もっと具体的に書いてくれれば
590デフォルトの名無しさん:2011/11/11(金) 23:17:17.12
知恵袋で質問しましたが、回答してもらえなかったのでどなたか回答お願いします。。。

入力するデータはx軸、y軸、z軸それぞれにつき1000点のデータ点で、
これをつかって3次元グラフに起こしてアニメーションにして動かしたいです。
具体的には出力結果は
http://beta-infinite.blogspot.com/2007/11/blog-post_11.html
このブログに挙げられている感じにしたいです。

グラフを作った後、アニメをする所でつまずいてます。。。
関連書籍を軽く読んでみましたが、関数をアニメーションで動かすのは見つけましたが、プロットから動くグラフを作るのはありませんでした。
591デフォルトの名無しさん:2011/11/11(金) 23:31:30.58
>>586
>>589
ありがとうございます。
問題を簡単化すると、ディスク上にある200GBの行列Aと200GBの行列Bの
積C=A*Bを求めたいと言うことです。

64bit Linux版20011aでSWAPを2TB確保すると、仮想的には
二つの行列がメモリに載ります。そこでC=A*B;すると動くのですが、
2日待っても終わりませんでした。その間のCPU使用率は7%とかなので、
おそらくディスク(SWAP)に激しいランダムRWを行っているからだと思います。

一方、なるべくシーケンシャルに読み込み、シーケンシャルに書き込む
ように作った自作のCプログラムでは、10時間程度で終わります。
こちらのCPU使用率はSIMDは使ってませんが100%です。

行列の積程度なら自作してもいいのですが、
もっと複雑な操作や演算をしようと思ったときに
全部自分で作るのは大変だと思って、質問させていただきました。

お金があれば、>>586さんの仰るように分散配列でメモリを増やせるのですが
貧乏なもので・・・
592586:2011/11/12(土) 00:45:39.12
>>591
なんか、いちいちやってることが上級者すぎるんですが、
本当に西暦 20011 年から来たというオチではなかろうね?

演算が簡単だから、というのは分かるんだけど、
そこまで gigantic な行列を扱おうとしてるのなら、
そもそも Matlab を選ぶべきではないのでは。
何が目的なのか分からないけど、
むしろ自作のプログラムをキワキワの行列演算ライブラリとして商用化して、
そのアップデートをライフワークにした方が良いのでは?

> お金があれば、>>586さんの仰るように分散配列でメモリを増やせるのですが
> 貧乏なもので・・・

これ、
「いやー、弁護士免許も医師免許も持ってるんですけど、
 近所のスーパーでバイトしようと思って面接に行っても落とされるんですよね 」
って言われてるような違和感を覚える。

マジレスすると、仮にランダムアクセスがネックになっているというのが事実で、
なおかつシーケンシャルにスワップを操作する部分を Native C で書いてるのなら、
そのプログラムを mex で有効活用できるかどうか調べてみるのが先決な気がする。
593584:2011/11/12(土) 08:23:45.00
>>588
じゃーどう書きゃいいのよ?
これ以上は可読性が下がると思ったんだけど。
ちなみに今見たらvarsの初期化はいらんかった
594デフォルトの名無しさん:2011/11/12(土) 21:14:47.47
あるスクリプトで関数「func.m」を呼び出すんですが、
func.mを外部エディタで書き変え(この時matlab標準のエディタでfunc.mは開いていません)、
数秒後にスクリプトでこれを呼び出すと、書き換えが反映されず、
書き変え前のfunc.mがなぜか実行されることがあります。
(時間を置いたり、なんどか繰り返して呼び出していると反映されます)
matlabにfunc.mが変更された事を知らせ、すぐ反映してもらう方法はありますでしょうか?
595デフォルトの名無しさん:2011/11/12(土) 21:33:13.82
>>594
help rehash
596デフォルトの名無しさん:2011/11/13(日) 01:02:44.70
>>595
助かりました。有難うございます
597デフォルトの名無しさん:2011/11/13(日) 09:03:03.30
>>591
591さんがHDDを量産効果で値下げすると聴いて飛んで来ました。

単一行列ならマトリックス位置は決まっているので分割演算して並替えする。
其れ以前にデータ保存できるのかね?
算数でもどれくらいのサイズか解るよね。

200*10^9*200*10^9≒20*10^21バイトで20ゼタバイトだよ。
HDD容量で2TBのHDDで100億台必要だよね?
高騰する前で\5980/2TB
現在\16000/2TB
59.8兆円かスゲーな。
HDDメーカーに見積もり出してみたら?
598デフォルトの名無しさん:2011/11/13(日) 11:02:42.63
>>591
200GB というと倍精度で 160000×160000 ぐらいの行列でしょうか。
非零要素数はいくつぐらいですか?
599デフォルトの名無しさん:2011/11/15(火) 18:20:26.59
a =

0.0002 0.0161 0.8165 0.0161 0.0002
としたときに、
X = diag(a)

X =

0.0002 0 0 0 0
0 0.0161 0 0 0
0 0 0.8165 0 0
0 0 0 0.0161 0
0 0 0 0 0.0002
のように5*5の対角行列が出来ると思いますが、
X =

a 0 0 0 0
0 a 0 0 0
0 0 a 0 0
0 0 0 a 0
0 0 0 0 a
のように、125*125の対角行列を作るにはどうすればよいでしょうか?
600デフォルトの名無しさん:2011/11/15(火) 18:21:54.86
>>599
すみません、間違えました。
X =

a 0 0 0 0
0 a 0 0 0
0 0 a 0 0
0 0 0 a 0
0 0 0 0 a

のように25*25の対角行列を作るにはどうすればよいでしょうか?
601デフォルトの名無しさん:2011/11/15(火) 18:55:37.15
onesにaかけてdiagとか
602デフォルトの名無しさん:2011/11/15(火) 18:57:01.38
>>600
diag(a*ones(1,25))
603デフォルトの名無しさん:2011/11/15(火) 20:00:31.59
a * eye(25)
604591:2011/11/15(火) 20:18:22.98
みなさんありがとうございます。

>>592
>そもそも Matlab を選ぶべきではないのでは。
実際はそうですが、過去のコードを活かせたらいいなと思いまして。

>むしろ自作のプログラムをキワキワの行列演算ライブラリとして商用化して、
>そのアップデートをライフワークにした方が良いのでは?
商用Out-of-Coreライブラリは既にいくつか存在します。

mex化はもちろん検討したのですが、行列をディスクに置いてしまうと
ほとんどのmatlab関数を自分で作る羽目になって
matlab使う意味がほとんど無くなってしまいそうです。

>>597
行列1つのサイズが200ギガバイトなので、そんなには必要ないです。

>>598
サイズはその程度です。今は実用性の検証段階で、
密行列でやってます。

目的はあまり詳しくかけませんが、
大規模非線形システムのシミュレーションです。
605デフォルトの名無しさん:2011/11/15(火) 20:18:34.68
x=[];
x(10)=0;
だと横ベクトルですよね。
そしてx(:)は縦。
どちらかに統一しないのはなぜですか?
606デフォルトの名無しさん:2011/11/15(火) 20:28:05.37
> matlab使う意味がほとんど無くなってしまいそうです。

既に無い
607デフォルトの名無しさん:2011/11/15(火) 20:49:08.19
>>601
>>602
>>603
ご回答ありがとうございます。
似たような質問で申し訳ないんですが、
--------------------------------------------------------------
>> N = 5;
h = 2*pi/N;
column = [0 .5*(-1).^(1:N-1).*cot((1:N-1)*h/2)]';
D = toeplitz(column,column([1 N:-1:2]));
>> D

D =

0 -0.6882 0.1625 0.1625 -0.6882
-0.6882 0 -0.6882 0.1625 0.1625
0.1625 -0.6882 0 -0.6882 0.1625
0.1625 0.1625 -0.6882 0 -0.6882
-0.6882 0.1625 0.1625 -0.6882 0
--------------------------------------------------------------
5*5のDという行列を使って、

X =

D 0 0 0
0 D 0 0
0 0 D 0
0 0 0 D

の形のXという20*20の対角行列を作りたいんですが、作り方を教えて頂けないでしょうか?
608デフォルトの名無しさん:2011/11/15(火) 21:05:08.03
>>607
すみません、再度間違えました。。

X =

-D 0 0 0
0 -D 0 0
0 0 D 0
0 0 0 D

の形のXという20*20の対角行列を作りたいのですが、
作り方を教えてください。
609デフォルトの名無しさん:2011/11/15(火) 21:49:19.87
blkdiag
610デフォルトの名無しさん:2011/11/15(火) 22:45:11.14
>>609
助かりました。ありがとうございます。
611デフォルトの名無しさん:2011/11/16(水) 22:19:37.67
ある2x3の構造体のアレイ「struct_2by3」を、1x1の構造体「struct_1by1」に変換し、
struct_2by3(n,m).somefield と struct_1by1.somefield{n,m}
が等しくなるようにしたいのですが、良い方法が分かりません。

% 例: struct_2by3 を適当につくる
struct_2by3 = struct;
for row = 1:2
for col = 1:3
struct_2by3(row,col).field1 = eye(4)*10*row + col;
struct_2by3(row,col).field2 = row*col;
end
end

% struct_1by1 に変換
celled = struct2cell(struct_2by3);
fn = fieldnames(struct_2by3);
struct_1by1 = struct;
for n = 1:length(fn)
struct_1by1.(fn{n}) = squeeze(celled(n,:,:));
end

で一応できるのですがもっと簡単に変換する方法はありますでしょうか?
612デフォルトの名無しさん:2011/11/19(土) 16:26:08.19
長すぎ
613デフォルトの名無しさん:2011/11/19(土) 23:52:26.91
>>612
なにか簡潔な書き方がありましたらヒントでも良いのでお願いします
614デフォルトの名無しさん:2011/11/21(月) 18:11:49.60
u=rand(4,4)
u =
0.7094 0.6551 0.9597 0.7513
0.7547 0.1626 0.3404 0.2551
0.2760 0.1190 0.5853 0.5060
0.6797 0.4984 0.2238 0.6991
----------------------------------------
上のように作成したuについて、次のように
uの4行目の全ての要素を1行目の全ての要素に置き換えるようにするには
コマンドラインからだとどのように入力すればよいですか?
( u(1:3 1)とするとダメだったので・・・。愚問ですみません)

u =
0.7094 0.6551 0.9597 0.7513
0.7547 0.1626 0.3404 0.2551
0.2760 0.1190 0.5853 0.5060
0.6797 0.4984 0.2238 0.6991

u =
0.7094 0.6551 0.9597 0.7513
0.7547 0.1626 0.3404 0.2551
0.2760 0.1190 0.5853 0.5060
0.7094 0.6551 0.9597 0.7513
615デフォルトの名無しさん:2011/11/21(月) 19:28:52.78
>>614

a = a( [1 2 3 1], : ) ;

or

a(4,:) = a(1,:) ;
616デフォルトの名無しさん:2011/11/21(月) 20:06:08.32
>>615
ありがとうございます。
a = a( [1 2 3 1], : ) ;
の形が好ましいのですが,仮に
N=100;
a=rand(N,N) ;
とした場合,
同様にaのN行目の全ての要素を1行目の全ての要素に置き換えるには,
どうすれば良いですか?
a = a( [1 2 … N 1], : ) ;
を書き直したいのですが.
617デフォルトの名無しさん:2011/11/21(月) 23:00:23.11
>>616
a = a([1:N-1, 1, N+1:end], :);

じゃないの?
618デフォルトの名無しさん:2011/11/22(火) 00:18:25.96
quiverで表示させたベクトルの矢じりの大きさを統一するのってどうやるんでしょうか
619デフォルトの名無しさん:2011/11/22(火) 01:33:44.76
>>616
ところで普通は>>615の前者を使うんだけどなんで後者?
620619:2011/11/22(火) 01:34:37.42
訂正:
普通は>>615の後者を使うんだけどなんで前者?
621デフォルトの名無しさん:2011/11/22(火) 11:18:40.57
>>620
数式の中で使いたかったのと、代入文を省きたいと考えたので後者を選びました。

>>617
試してみましたが出来ませんでした。。


622デフォルトの名無しさん:2011/11/22(火) 11:30:52.15
>>621
どちらでも数式の中で使えるし、どちらも代入文を使っているので、
通常なら >>615 の後者の方がクリアで良いと思うんだけど。

あと、試してみたけど出来ないというのは具体的にどういうこと?
N=100;
a=rand(N,N) ;
a = a([1:N-1, 1, N+1:end], :);
isequal(a(1, :), a(N, :))
を実行してみれば分かるけど、
君の要求である「aのN行目の全ての要素を1行目の全ての要素に置き換える」ことは
出来てる筈。
623デフォルトの名無しさん:2011/11/22(火) 18:05:40.63
>>622
ありがとうございます。
無事実装できました。

別の質問なのですが、仮にUという変数についてのグラフを保存しようとした際、今までは以下のような感じにしていたのですが、
グラフは無事保存されるのですが、matlabの出力結果のウィンドウも同時に出てきます。
私は解析の都合上、保存されたデータのみを必要としているので
matlabの出力結果のウィンドウが現れないようにしたいのですが、どう修正すれば良いでしょうか?

figure;
set(gcf,'renderer','opengl');
waterfall(U);
saveas(gcf,'U_.png')
624デフォルトの名無しさん:2011/11/23(水) 13:08:25.37
>>623で書き込んだものです。

>> fh = figure;
>> set(fh, 'Visible', 'off');
としてウィンドウの表示をさせなくすることが出来たのですが、元に戻す方法がわかりません(泣)
>> fh = figure;
>> set(fh, 'Visible', 'on');
としてもダメでした。。
どなたか助けてください。。
625デフォルトの名無しさん:2011/11/23(水) 13:27:07.85
>>624
matlabをリスタート
626デフォルトの名無しさん:2011/11/23(水) 17:36:43.27
>>624
figure で新しく可視状態のフィギュアを作成した時に
fh の値が上書きされているから、当然そうなるわな。

簡潔にいえば
>> fh = figure;
>> set(fh, 'Visible', 'off');
>> fh = figure;
>> set(fh, 'Visible', 'on');
ではダメ。

>> fh = figure;
>> set(fh, 'Visible', 'off');
>> set(fh, 'Visible', 'on');
なら良し。

あと、figure の返り値が何を意味するものか、とか、
なんで変数の名前として fh を使っているのか、とか、
その辺を一度、真面目に考えた方がいいと思うよ?

いわば君がやってることは、
>> fh1= figure;
>> set(fh1, 'Visible', 'off');
>> fh2 = figure;
>> set(fh2, 'Visible', 'on');
に等しい。
627デフォルトの名無しさん:2011/11/24(木) 07:24:22.62
付属エディタやコマンドラインで、たとえば「plo」まで入力してタブキーを押すと候補が出ますよね。
そこからplot3等、なにか上下で選択してエンターキーを押すと
「plo」の直後にあった「|」の点滅が無くなってしまうためキーを打っても入力できず、
「plo」の直後の場所を一度マウスでクリックして「|」の点滅を復活させる必要があります。
Matlab2011, Windows7 pro, 64bit です。
クリックしなくても済むようにする方法はありますでしょうか?
ちなみに Windows vista business, 32bit だと大丈夫です。
628デフォルトの名無しさん:2011/11/24(木) 11:48:21.22
質問させてください。

一種類の画像をx秒表示したあと、二種類の画像からランダムで1つの画像を
y秒表示させるプログラムをつくりたいのですが、matlabでx秒間表示させるといった方法が分かりません。
検索してみましたが、計算にかかった時間を表示させるといったものしか見つけられませんでした。
何秒ごとかに処理を行うコマンドを教えていただけるとありがたいです。
629デフォルトの名無しさん:2011/11/24(木) 16:22:55.55
以下のどちらかのやり方で行列Aを作ろうと思うのですが、Aを求めるのにかかる時間は同じでしょうか?

式1〜式4が長いので、コードの分かりやすさ的には前者を選択したいのですが、時間に差があれば教えてください。

1-----------------------------------------------
a1 = 式1; ←計算後のa1は256×1の行列
a2 = 式2; ←計算後のa2は256×1の行列
a3 = 式3; ←計算後のa3は256×1の行列
a4 = 式4; ←計算後のa4は256×1の行列
A = [a1; a2; a3; a4]; ←1024×1

2-----------------------------------------------
A = [式1;式2;式3;式4]; ←1024×1

630デフォルトの名無しさん:2011/11/24(木) 17:18:52.39
>>629
計算時間調べればいいんじゃないか?
631631:2011/11/25(金) 11:01:18.86
質問です。simulinkでシミュレーションする際に計測された値によってシミュレーションの挙動を制御するためのプログラムを作りたいと思います。
ここでS-functionブロックを使ってif文を使ったプログラミングに挑戦しました。
しかし、エラーがでてしまいます。そもそもS-functionでif文が使えるかも判りません。
以下にプログラムをさらしますので、まずいところを教えてください。
632631:2011/11/25(金) 11:01:39.83
function VoltageCheckerAgent(block)
%瞬時電圧から、計算して電圧の実効地を求める式
setup(block);
function setup(block)
%入力ポート数を設定 2入力
block.NumImports = 2;
%第1,2入力ポートのベクトル幅を1に設定する
block.InputPort(1).Dimensions = 1;
block.InputPort(2).Dimensions = 1;
%第一ポートにおいて出力方程式で入力信号を用いるための措置
block.InputPort(1).DirectFeedthrough = true;
block.InputPort(2).DirectFeedthrough = true;
%出力ポート数の設定。変数を一つ出力するための設定
block.NumOutputPorts = 1;
block.OutputPort(1).Dimensions = 1;
%サンプル時間を設定する。入力信号からサンプル時間を継承させる。
block.SampleTimes = [-1 0];
%コールバック関数の登録
block.RegBlockMethod('InitializeConditions',@InitializeConditions);
block.RegBlockMethod('Outputs',@Outputs);
block.RegBlockMethod('Derivatives',@Derivatives);
633631:2011/11/25(金) 11:01:54.10
function InitializeConditions(block)
%初期値を登録する
block.Constates.Data(1) = 0;
block.Constates.Data(2) = 0;
block.Constates.Data(3) = 1;

function Outputs(block)
%出力方程式
block.OutputPort(1).Data = block.Constates.Data(1);
634631:2011/11/25(金) 11:02:08.27
function Derivatives(block)
%変数定義
Vrms = block.Constates.Data(1);
vt = block.InputPort(1).Data;
Time = block.InputPort(2).Data;

Jud = mod(Time,0.0167);
if Jud = 0;
T2=Time;
T1= Time - 0.0167;
%以下は電圧を計算するための式
fun1 = u(t)^2;
fun2 = quad(fun1,T1,T2);
fun3 = fun2/0.0167;
Vrms = sqrt(fun3);
else
Vrms = Vrms;
end if
635デフォルトの名無しさん:2011/11/25(金) 11:03:48.78
>>630

ありがとうございます。
式の内容によっては時間差が生まれるようです。
後者が無難であるように思われました。
636デフォルトの名無しさん:2011/11/25(金) 12:43:41.48
>>628
image(a);
drawnow;
pause(5);
close(p);
637デフォルトの名無しさん:2011/11/27(日) 23:39:15.14
rows =[1 1 2 2];
cols =[1 2 1 2];
などと、ある行列Aの座標が書かれたベクトルがあるとき、
wanted = [A(rows(1),cols(1)), A(rows(2),cols(2)), ..., A(rows(4),cols(4))]
を得たいのですが、これは
A(なんとかかんとか)
という書き方は可能なのでしょうか?
A(rows, cols)
として対角要素をとるしかありませんか?
638デフォルトの名無しさん:2011/11/27(日) 23:49:05.99
対角要素取る方法では、巨大な行列の場合は遅くなる。
ぱっと思いついた2次元配列限定で汚いけど、対角取るよりはましな方法は

A((cols-1)*size(A,1)+rows)

確認はしていない。
639デフォルトの名無しさん:2011/11/28(月) 00:19:06.72
>>637
638やA(sub2ind(size(A), rows, cols))のようにリニアインデックスで指定するしかない気がする。
まあ素直にarrayfun使うしか無いのでは?
640デフォルトの名無しさん:2011/11/28(月) 00:53:16.93
iphoneアプリのMATLAB
mathworksクラウドに接続すると基本コマンドがモバイルで使える
こりゃすげえと思って登録してみたが
matlabのシリアルが必要だった・・・

持ってないからちょっと使いたかったのに
一生scilabでいいわもう
641デフォルトの名無しさん:2011/11/28(月) 21:20:26.95
>>640
互換性からいうと、Octaveの方が今はいいかも。
起動の速さからいうと、scicoslab (scilabはトロイので却下) が一番だけどね
642デフォルトの名無しさん:2011/11/28(月) 21:22:53.77
貧乏人本気でかわいそす・・・
643デフォルトの名無しさん:2011/11/29(火) 00:12:00.36
最近はscalalaに興味出てきた
644デフォルトの名無しさん:2011/11/29(火) 11:01:41.26
質問です。
mファイルで外部プログラムを呼び出して計算を行わせているのですが、
外部プログラムがファイルが作成するまでmファイルの計算を待機させる
何かいい方法はありませんでしょうか。
よろしくお願いいたします。
645デフォルトの名無しさん:2011/11/29(火) 11:10:33.71
>>644
外部プログラムが ext.exe,
ext.exe が作るファイルを ext.dat とするなら

system('ext.exe');
while(~exist('ext.dat', 'file'))
;
end
disp('I found ext.dat.');

みたいな感じでいけると思う。試してみて。
646デフォルトの名無しさん:2011/11/29(火) 12:19:49.63
>>645
できました!
助かりました。有難うございます。
647デフォルトの名無しさん:2011/11/29(火) 17:17:06.45
matlab購入を検討しています。
用途は、大学院で信号処理の研究に使っているので家でも勉強できるように買いたいと思っています。
そこで質問なのですが、2011aと2011bの違いってなんですか?
amazonで2011aが割安で販売されていたので、機能としてほぼ変わらないのであればaを買おうかと考えています。
648デフォルトの名無しさん:2011/11/29(火) 18:04:57.91
>>647
公式の Changelog や Summary of New Features を見て検討すべし。
http://www.mathworks.co.jp/help/base/relnotes/relnotes_highlights.html
http://www.mathworks.co.jp/help/base/relnotes/f0-107996.html

学習用なら 2011a で何ら問題なし。octave でもいいくらい。
649デフォルトの名無しさん:2011/11/29(火) 18:37:46.42
大学院にてmatlabを使用して画像処理を行う事になりました
そこで研究室にあったr2007bをインストールして起動しようとした所
一瞬だけmatlabのロゴだけが映る状態になりmatlabが立ち上がらない状態になりました
タスクマネージャーで確認したら一瞬だけ立ち上がっては消えるみたいです
管理者として実行しようとした所、発行元が不明になっていました
ウイルスソフトといったセキュリティ等に引っかかっているのでしょうか?
OSはwindows7の32bitオペレーションシステムを使用してます
650デフォルトの名無しさん:2011/11/29(火) 19:51:07.77
>>649
きみはoctaveを使ったほうがいいよ
651デフォルトの名無しさん:2011/11/30(水) 00:01:52.65
Fラン大学院でもMATLAB使えるのかよ・・・
652デフォルトの名無しさん:2011/11/30(水) 01:26:57.73
明後日テストがあるのですが・・。
この問題がわかりません。

問1  総合環境であるMPLABはソースファイルの作成から、ビルド
そしてターゲットマイコンへのダウンロードといった一連の作業が
同一ソフトウェア上で可能でした。全く新しいプロジェクトを作成
する場合についてその作業を説明しなさい。(キーワードを仕様すること)

キーワードは:ウィザード、ソースファイル、ビルド、ダウンロード、PICKit2、接続

お願いします。誰か答えを教えてください。



653デフォルトの名無しさん:2011/11/30(水) 05:23:37.01
>652
ここはMATLABスレ。それは別のスレどころか別の板だ。
654デフォルトの名無しさん:2011/11/30(水) 23:37:39.39
>>652
ウィザードを立ち上げてソースファイルをビルドしてPICKit2へ接続してターゲットのPICマイコンへバイナリをダウンロードする。
655デフォルトの名無しさん:2011/12/01(木) 17:43:31.77
waterfallなどを使って画像を表示すると、標準だと
まず小さいウィンドウとして結果が出てくるじゃないですか?
そのウィンドウを最大化すると、
より鮮明(表現が悪いですが)で、ラベル云々もよりわかりやすく表示されます。

私は次のようにして画像を保存しているんですが、
前述のように最大化ウィンドウで表示される画像の方を保存したいのですが、
どのようにすればいいのでしょうか?
コマンドで設定するやり方を出来れば教えて頂きたいです。
現状だと、デフォルトのためか、あるウィンドウサイズで表示される画像を保存してしまっています。
どなたか解決策を教えてください。


set(gcf,'Renderer','zbuffer');
waterfall(u);
saveas(gcf,['test.png'])

656デフォルトの名無しさん:2011/12/02(金) 12:29:39.25
655で書き込んだものです。
以下のサイトを参考にすると出来ました。
http://ichiro-maruta.blogspot.com/2010/11/matlab.html
657デフォルトの名無しさん:2011/12/03(土) 01:43:51.70
scilab変換できる人いませんか
ヨーロピアン・コール・オプションのブラック・ショールズ価格
%%%%%%%%%%%%%%%%%%%
% 1. パラメータ設定
%%%%%%%%%%%%%%%%%%%

r=0.05; % 金利(100r %/年)sigma=0.25; % ボラティリティ(100sigma %/年)
T=3/12; % 満期(年)S0=100; % 初期価格
K=110; % 行使価格 N=10000; % シミュレーション回数
alpha=0.05; % 1-信頼水準
randn('state',1); % 乱数の初期状態の設定

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2. 原資産価格のサンプルパスの生成,ペイオフの計算
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
B=sqrt(T)*randn(1,N);S=S0*exp((r-sigma^2/2)*T+sigma*B);h=max(S-K,0);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 3. オプション価格の平均・信頼区間の計算
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Yn=mean(h); % サンプル平 sd=std(h); % サンプル標準偏差
price=exp(-r*T)*Yn; % オプション価格 CI=[exp(-r*T)*(Yn-norminv(1-alpha/2)*sd/sqrt(N)), ... exp(-r*T)*(Yn+norminv(1-alpha/2)*sd/sqrt(N))]; % 信頼区間
BSprice=blsprice(S0,K,r,T,sigma,0); % ブラック・ショールズ価格
658デフォルトの名無しさん:2011/12/03(土) 14:51:20.64
沢山いると思いますし、僕でもできます。
659デフォルトの名無しさん:2011/12/03(土) 18:17:00.75
blspriceは無いだろ。
660デフォルトの名無しさん:2011/12/03(土) 18:19:39.75
win7 matlab(2011a,64bit)で、60fpsのディスプレイで規則的な周期の描画を行いたいのですが、
(例えば、6フレームごとに画像を入れ替えて、10Hzの点滅をつくりたいです。)

スロー撮影のできるカメラで確認すると、どうも数コマの乱れが頻繁に生じてしまいます。
(例:6フレーム設定で、画像A:5フレーム表示→画像B:6フレーム→画像A:4フレーム→画像B:5フレーム など)

ソースはこちらになります。
-----------------------------------
a=imread('01.png'); %画像読み込み
b=imread('02.png');
h=image(b); 画像表示し、ハンドルを取得

for i=0:60;

set(h,'CData',a);drawnow();
msec_pause(166);  %下記参照
set(h,'CData',b);drawnow();
msec_pause(166);

end
-----------------------------------

msec_pauseという関数は、windowsのマルチメディアタイマをMEX化した関数です。
この場合166ms(1フレームが約16.6msなので10フレーム)待機します。この関数は乱れの原因ではなさそうです。

この点滅を表示するプログラムで、
正確な1フレームごとの表示ができるようにするにはどうしたら良いでしょうか。

何か改善点やアドバイスを頂ければ幸いです。
よろしくお願いします。
661デフォルトの名無しさん:2011/12/06(火) 14:32:37.21
MATLABでLMIの計算ってどうやってやるか教えてください
たとえば
A=[1 0;0 1]
B=[0 0;1 1]
C=[0 1;1 0]
A*B*X+C>0
になるようなX
お願いします・・・
662デフォルトの名無しさん:2011/12/06(火) 20:57:56.82
simulinkを使って電力系統を模擬するのだけど、その中でソースブロックの値を変更する必要があると考えています。
頭が足りないので、いい知恵を貸してください。

一つはmatlabのコマンドを使ってsimulinkを起動させて、一定時間シミュレーション後に一時停止させて、変数を変える方式。
ただ、これはそんな一時停止できるようなコマンドを知らないのが問題です。

方法2
S-functionブロックを使って、simulink内で解決する。
S-functionの使い方が判らない。入力された信号を計算するようなプログラム文しか見たことがないので、このような『判断』を下す系の想像ができないのです。
申し訳ないですけど知恵を貸してください。
663デフォルトの名無しさん:2011/12/06(火) 22:24:17.24
>>649
32ビットなのかどうか再確認を
664デフォルトの名無しさん:2011/12/07(水) 05:20:58.17
ググり方が悪いようで分からなかったので質問させてください。
ワークスペースにcharで格納されている
a,1,2,3,a,4,5,6,a,7,8,9,a,10,11,12という値を、四行三列の行列式(double?)に変換するにはどうしたらよいでしょうか。
1| 2| 3|
4| 5| 6|
7| 8| 9|
10|11|12|
初歩的な質問で申し訳ありません。よろしくお願いします。
665デフォルトの名無しさん:2011/12/08(木) 03:21:16.89
関数の引数について質問です。

funciton y = linearFun(x, a, b)

y = a.*x + b;

という関数を作った時、bを省略して良いようにするには

if nargin < 3
  b = 0;
end

と書いてあるコードが多い気がしますが、

if ~exist('b', 'var')
b = 0;
end

の方が、今後のバージョンでさらに引数の数が
ごちゃごちゃ変化した時に保守しやすい気がするんですが
あまり見かけないのは何か理由があるのでしょうか?
666デフォルトの名無しさん:2011/12/08(木) 10:17:22.87
>>649
症状から見て、おそらく R2008 からフィックスされた有名なバグ。
bugreports/398525 を見て、ユーザー環境変数をいじれば、
改善される可能性大だと思う。

>>664
strtok, sscanf, strread など便利な関数があります。

>>665
好みの問題では?
667デフォルトの名無しさん:2011/12/08(木) 19:15:18.10
プログラムの質問です。
位相によって1か0を出力するプログラムを組みたいです。
例えば位相0°〜120°の間は1を出力する。しかし、それが終わったら0を出力する。
しかし、matlabはラジアン表示です。更に言うのなら位相360°を超えた場合の問題が有ります。
位相360°=0°で考えますが、ラジアン表示ではただ増えていくだけです。
どのようにすれば、定期的に出力できるようになるのでしょうか?
668デフォルトの名無しさん:2011/12/08(木) 22:13:12.33
>>667
まず紙と電卓で自分でとける?
例えば2000°ならどうやって手計算する?
そこから始める
669デフォルトの名無しさん:2011/12/08(木) 22:24:21.76
>>666
ありがとうございました!
670デフォルトの名無しさん:2011/12/08(木) 22:32:43.04
>>667
計算機の替わりに小学生にバイトで計算させるさせると考える。
子供にも出来るよう計算の手順を丁寧に紙に書く。
計算機は小学生よりアホだからそれくらい丁寧に書く必要がある。
それが完成したらそこからコードにするのは簡単。
671デフォルトの名無しさん:2011/12/08(木) 22:44:25.87
>>670
お前人に教える力ないな…とは言え>>667がアホすぎてビックリではあるが。文系か理系Fランなんだろう
πは180°と同じことということも知らないんだろ
672670:2011/12/08(木) 23:05:27.10
>>671はさぞかし教える力があるんだろうから、
教育の手本というものを見せてくれ。
逃げないでね
673デフォルトの名無しさん:2011/12/09(金) 05:12:40.76
>>672

         __、
     ,r´⌒ヽ,⌒ヽ,ヽ
   (⌒)、   .人  λ\、 ._____
    \. \    、 ヽ./ ー  ー\
     |\ \    ヽ./ ( ●) ( ●)
     |  \  \ /     (__人__) \  はいはい、どーもすみませんでした
     |.   \   |       ` ⌒´   |
  .   |.   |.\_ノ\            /
  .   |.   |   |   \______/
  .   |   )  .|     . . ̄ ̄
  .   |   |  .|
     |   |.|  .|
  .   |  | .| .|
     /  / / ヽ,
    (__ノ  ヽ、__つ
674デフォルトの名無しさん:2011/12/09(金) 05:58:37.28
教える力とか言う以前に教える気がないと思うのだがw
675デフォルトの名無しさん:2011/12/09(金) 10:50:08.17
πは180°は知ってたが、教える気が出ないほど教える力が無いんだろう
676デフォルトの名無しさん:2011/12/09(金) 12:34:26.72
どなたか imwrite 関数を使って複数ページの tif 画像を single か double で書き出す方法を知りませんか?
uint16 などの整数値の画像なら問題なくできるのですが、浮動小数点値だとめちゃくちゃな数値で書き出されてしまいます。
677デフォルトの名無しさん:2011/12/09(金) 20:07:26.09
MATLAB EngineのC#のいいラッパーないですかね
有名所のやつ、作り込んでくるとなんかメモリエラーが出始めるんで
678デフォルトの名無しさん:2011/12/10(土) 02:11:57.34
>>675
以外と、「なぜπ=180度なのか?」を即答できるヒトは少ないんだよな。
大学の研究室に配属になった4年生に時々聞いてみているんだが。
679デフォルトの名無しさん:2011/12/10(土) 05:40:44.29
min( . )の複素数型での最小(abs( . ))ってオーバーロードは普通なの?
最小(real( . ))の方が実数の変数に虚部のゴミが混入した時に安全な気がするけど。
という愚痴です。やっと寝れる
680デフォルトの名無しさん:2011/12/10(土) 11:44:40.96
すみません,1次元の偏微分方程式の解を格納した
uというN×Mの行列があるのですが,
このuの1行目から最後の行までのそれぞれの行ベクトルを
順に表示させたいと考えています.
つまり,アニメーションのように時間発展を表示させたいと考えています.
(今までは単にwaterfallなどを使って表示していました)

やり方などわかる方おられれば教えてください.
また,出来ればそのアニメーションの様子をavi形式などにして,
動画ファイルとして保存したいと思っています.
よろしくお願いします.
681デフォルトの名無しさん:2011/12/10(土) 12:37:35.36
>>680
figure(1)
for j = 1:size(u,1)
plot(u(j,:))
pause(1)
end
みたいなもので足りる単純な話ではない感じ?
682デフォルトの名無しさん:2011/12/10(土) 12:47:25.38
>>680
getframe でフレームをキャプチャして、movie2avi でaviに変換できるみたい。
詳しくはヘルプファイルで。
683デフォルトの名無しさん:2011/12/10(土) 13:20:55.76
>>681
>>682

ありがとうございます.
とりあえず参考にしてやってみました.
今回,uは100×Nの行列として考えることにし,

>>M = moviein(100);
for j = 1:100
waterfall(u(j,:));
view([44 62]);
M(:,j) = getframe;
end
>> movie(M)

としてみたところ,1つ目の>>では思惑通りのアニメ?が得られました.
avi形式で保存するためにはmovie関数でMが表示出来なければいけないのですが,

??? Error using ==> movie
Movie contains uninitialized frames

と出ており,Mの保存がよろしくないようでした..
改善策が不明なため,どなたかご教授ください.

684デフォルトの名無しさん:2011/12/10(土) 13:37:46.28
すみません,記載ミスがありました.

>>hold on;
M = moviein(100);
for j = 1:100
waterfall(u(j,:));
view([44 62]);
M(:,j) = getframe;
end
hold off;
>> movie(M)

としてみたところ,1つ目の>>では思惑通りのアニメ?が得られました.
(hold on,hold off を使っています.)
avi形式で保存するためにはmovie関数でMが表示出来なければいけないのですが,

??? Error using ==> movie
Movie contains uninitialized frames

と出ており,Mの保存がよろしくないようでした..
改善策が不明なため,どなたかご教授ください.

685デフォルトの名無しさん:2011/12/10(土) 19:22:54.40
>>684
多分,何かのミスじゃない?
そのコードで通ると思うけど

ところで,下の行列があるとき,
0.8147 0.6324 0.9575 0.9572
0.9058 0.0975 0.9649 0.4854
0.1270 0.2785 0.1576 0.8003
0.9134 0.5469 0.9706 0.1419
各行の最大要素が格納されてる列番号を調べるにはどうすれば良い?
上だと,
1行目:3列目
2行目:3行目
3行目:4列目
2行目:3行目
って感じで・・・
686デフォルトの名無しさん:2011/12/11(日) 08:04:55.58
>>685
doc max
687デフォルトの名無しさん:2011/12/11(日) 13:35:23.22
>>686
ありがとう!
688デフォルトの名無しさん:2011/12/11(日) 15:25:25.98
surfとかwaterfallで表示された結果はについてなんだけど,
matlabのウィンドウならzoomとか回転とか出きると思うんだけど,
当たり前だけど画像形式で保存するとそういう操作はできなくなってしまう

保存後,保存先でもzoomとか回転とか出来るようにするには
どういう保存の仕方がいいのだろうか・・・?
689デフォルトの名無しさん:2011/12/11(日) 18:18:22.74
>>688
.fig で保存するのではダメなの?
690デフォルトの名無しさん:2011/12/11(日) 23:38:54.45
691デフォルトの名無しさん:2011/12/12(月) 23:57:59.22
symbolic mathつかってるんだが、一部のパラメータをスライドバーで変えながらプロットを見るのってできないかね?
例えば a*x^2+b*y^2-1=0 のaとbが可変、みたいな
692デフォルトの名無しさん:2011/12/13(火) 00:15:03.97
シミュリンクじゃ、駄目なのか?
693デフォルトの名無しさん:2011/12/13(火) 23:32:45.95
関数によって返された行列の一部分を使いたいのですが、
これは一度変数に入れなければならないのでしょうか。

例としては、
hoge=eye(10);
hoge=hoge(:, 8:10);

を一度hogeに入れずに一部分を抽出したいということです。
694デフォルトの名無しさん:2011/12/13(火) 23:42:09.93
>>692
simulinkもってねー
695デフォルトの名無しさん:2011/12/14(水) 22:31:46.80
>>693
arrayfunやmat2cell/cellfunを駆使すれば出来る場合があるが、
Matlabにあまりそういうワンライナーを推奨していない気がする
696デフォルトの名無しさん:2011/12/15(木) 22:33:17.71
Matlabの使い方をマンツーマンで教えてくれるような先生や、
バイトみたいに個人レッスンをしてくれる人を探すことはできますか?
初心者で時間もないのに、Matlabを使いこなさなければいけないようになりました。
そういう人やサービスあるなら東京近辺がいいです。。
697デフォルトの名無しさん:2011/12/16(金) 00:45:14.73
mathworksが定期的にセミナーやってる
698デフォルトの名無しさん:2011/12/16(金) 00:46:55.67
それじゃダメなんだろ
割れてるからなw
699デフォルトの名無しさん:2011/12/16(金) 01:17:34.36
>>693
function part(array, varargin)
% Example: part(eye(10), ':, 8:10')

eval(['array(', [varargin{:}], ')']);

勧めないが
700デフォルトの名無しさん:2011/12/17(土) 06:24:18.19
>>696
ところでプログラミングが初めての後輩に入門書を買ってもらおうと思ったら良い和書が無かった。
701デフォルトの名無しさん:2011/12/27(火) 12:45:46.62
ループでJITが動いてるかどうか確認する方法ってあります?
702デフォルトの名無しさん:2011/12/30(金) 15:40:02.83
MATLABで作成した.matファイルがoctaveで読み込めないのですがどうしてでしょうか?
.matファイルの関連付けはAccessになっています.
703デフォルトの名無しさん:2011/12/31(土) 10:07:22.32
>>702
1)拡張子を .m にする
2)octave から
souce hoge.m
とするか、hoge.mがカレントディレクトリにあれば単に
hoge
とする。
704デフォルトの名無しさん:2012/01/01(日) 09:58:13.10
matファイルのバージョンを確認したら?
705デフォルトの名無しさん:2012/01/04(水) 21:59:53.04
>>702
アスキーで保存するのがよろしい
706デフォルトの名無しさん:2012/01/04(水) 22:00:28.52
707デフォルトの名無しさん:2012/01/07(土) 20:18:23.29
Six-hump camel back functionのグラフが描けません。
以下のサイトのようなグラフが得られるはずですが、得られるグラフが違ったものに
なってしまいます。
http://www.geatbx.com/docu/fcnindex-01.html#P247_13252
私が書いたコードは以下の通りです。

[x,y] = meshgrid(-2:0.1:2,-2:0.1:2);
z = (4 - 2.1 * (x.^2) + 1/3*(x.^4))*(x.^2)+x.*y+(-4+4*(y.^2)).*(y.^2);
figure(1);
surf(x,y,z)
figure(2);
contour(x,y,z,32)
どなたか原因をご教授願えれば幸いです。
708デフォルトの名無しさん:2012/01/07(土) 23:12:10.28
Win7でMatlab2011aを使用しています。

Matlabに出力として特定のキーを押したのと同じ動作をさせたいのですがどうすればいいでしょうか。

実験で使うのですが、Matlabは非アクティブ状態で回しておき、
もう一つ他のプログラムをキー入力を受け付けられるようにアクティブ状態で待機させておこうと思っています。

どなたかわかる方がいましたらご回答お願いします。
709デフォルトの名無しさん:2012/01/08(日) 01:16:00.69
test
710デフォルトの名無しさん:2012/01/09(月) 14:39:24.88
>>707
そのページに書いてある数式まちがってない?
http://www.it.lut.fi/ip/evo/functions/node26.html
のやつでやったら似たような結果になった。

[x,y] = meshgrid(-1.9:0.1:1.9, -1.1:0.1:1.1);
z = (4 - 2.1 * x.^2 + x.^4 / 3).*(x.^2) + x.*y + (-4 + 4*(y.^2)).*(y.^2);
surf(x,y,z);
view(30,45);
711デフォルトの名無しさん:2012/01/14(土) 20:09:55.82
下のコードは自分で作成しました。
もし、n=5であれば、5つの図を出したいのですが、
上記の場合ですと、1つ目の図はプロットされていますが、
2つ目以降のグラフは、grid とtitleなどが表示された図が表示されるだけで
プロットされてません。
なお、xx1やxx2はちゃんと値が入っているので数字的ミスはまったくないです。

forで回すのは、figureを作成するうえでやめたほうがいいんでしょうか?

よろしくお願いします。
712デフォルトの名無しさん:2012/01/14(土) 20:10:29.81
for i=1:1:n
t=0:dt:t;
figure(i)
subplot(1,3,1)
plot(t,xx1(i,:))
grid on
title('Displacement-time')
xlabel('time')
ylabel('displacement')

subplot(1,3,2)
plot(t,xx2(i,:))
grid on
title('Velocity-time')
xlabel('time')
ylabel('Velocity')

subplot(1,3,3)
plot(t,xx3(i,:))
grid on
title('Acceralation-time')
xlabel('time')
ylabel('Acceralation')
hold on
end
713デフォルトの名無しさん:2012/01/14(土) 20:57:46.71
>>712
t=0:dt:t;

これ、tに値を入れる前にtを使ってないですか?
714デフォルトの名無しさん:2012/01/14(土) 21:04:32.91
>>713
返信ありがとうございます。
使っていないです。
使っていたとしてもtは書き換えられるので大丈夫かなとは思います。
715デフォルトの名無しさん:2012/01/14(土) 21:36:16.16
>>714
いや、t=0:dt:t;
っていう文は、文法的におかしいでしょ? ってこと。
Cで言うところの

int a;
a=a+1

みたいなもんで。(aの値は不定になる。

716デフォルトの名無しさん:2012/01/14(土) 23:05:35.12
ほんとだ。。このせいでした。学校に行ってまたmatlabを動かしたいと思います。
ありがとうございました!
717デフォルトの名無しさん:2012/01/18(水) 15:24:53.29
for i=1:1:n
figure(n)
。。。
end

とやり、figureをnまでひとつずつ別ウィンドウで表示させたいのですが、
どれがn番目のグラフかわかるようにしたいのですがその場合
どうすればいいでしょうか?
718デフォルトの名無しさん:2012/01/18(水) 21:32:48.49
タイトルつければいい
719デフォルトの名無しさん:2012/01/19(木) 18:01:40.91
>>717-718
具体的には
for k=1:n
 figure(k);
 何か描画
 title(sprintf('Figure %d', k));
end
とするといいんじゃないかな。
720デフォルトの名無しさん:2012/01/19(木) 20:29:52.01
最短距離法により
ある点Aからある1本の線の一番近い座標を求めたいのですがどうすれば良いでしょうか?
ちなみに線は直線とは限らず曲線の場合もあります。ですから一番近い座標が複数あることもありえます。
最短距離法の式や使い方がわからなくて困ってます。
よろしくお願いします。
721デフォルトの名無しさん:2012/01/22(日) 12:41:09.42
>>703,704,705

解決しました,ありがとうございます.
722デフォルトの名無しさん:2012/01/26(木) 20:17:13.33
すいませんOctaveの質問なんですがMATLABでも同じかなと思って質問します
行列をsaveしたときに行頭にスペースが出来てしまうんですがこれを作らない方法ありますでしょうか
723デフォルトの名無しさん:2012/01/27(金) 09:33:01.80
>>722
当方 Matlab も Octave も使っていますが、そういう現象は見たことがありません。
「行頭にスペースが出来る」という表現も曖昧で、いまいち要領を得ない。
save した行列の 1 列目が空白になってしまうのか、
あるいは文字列に限って一文字目にスペースが入ってしまうのか。

その問題の行列を作ったときの statement を書き、
行列をセーブしたファイルをアップロードして
スレ住人が直接チェックできるようにした方が、早期問題解決できると思います。
724デフォルトの名無しさん:2012/02/05(日) 21:24:12.00
plotにlegendで凡例を書き込むと、表示される図は問題無いのですが、
TeXに貼り付けようと、eps形式にすると凡例の文字が凡例の枠(テキストボックス)から
はみ出してしまします。どなたか対処法をご存じないでしょうか。
よろしくお願いします。
725デフォルトの名無しさん:2012/02/05(日) 21:28:34.96
どのようにeps形式にしたのかが最重要
726デフォルトの名無しさん:2012/02/05(日) 21:32:54.43
matlabが吐く図をファイルメニューから「ファイルの種類」でepsを選択して、
そのまま保存しています。この方法では問題があるでしょうか。
727デフォルトの名無しさん:2012/02/05(日) 21:40:33.99
printコマンドで出すのとGUIで出すので、
ファイルが微妙に違う。
728デフォルトの名無しさん:2012/02/23(木) 17:34:28.05
簡単な微分方程式
x'(t) = (x(t))^2, x(3) = 1
をmatlabで数値計算で解いてみます。
解析的な解は x(t) = 1 / (t-4)^2 となります。
まず、

function xdot = diffeq(t,x)
xdot = [x(1); x(1).^2];

として、
tspan = [3, 0];
x0 = [1;0];
[t,x] = ode45('diffeq',tspan,x0);

を実行しました。すると若干、解析的な解である x(t) = 1 / (t-4)^2 とは
異なった数値になってしまいます。私のプログラムが間違っているのでしょうか?
それとも、こんなものなのでしょうか?

それから、output のxは行数が2になっていますが、2行目の列ベクトル
x(:, 2) には何が入っているのでしょうか?初期値x0をスカラーにするとエラーが
返され、x0の2番目の要素を変えると、x(:, 2) の値も変わってきます。
729デフォルトの名無しさん:2012/02/23(木) 23:50:58.50
>>728
x'(t) = (x(t))^2, x(3) = 1 なら
解析解は x(t) = -1/(t-4)

diffeq は
xdot = x.^2;

じゃないの?
730728:2012/02/24(金) 09:24:49.51
すみません、解析的な解は検算した時にx'(t)を計算した時にだした
式をまちがって書いてしまいました。

function diffeq のほうをおっしゃるとおりに書き直したらうまくいきました
ありがとうございます。
731デフォルトの名無しさん:2012/03/17(土) 16:06:03.39
ここってscilabやxcosに関する質問もおk?
732デフォルトの名無しさん:2012/03/18(日) 01:05:58.11
>>731
OKでっす
733デフォルトの名無しさん:2012/03/18(日) 09:53:06.61
いいけど、octaveは

データ解析ツールoctaveを語ろう Part 2
http://toro.2ch.net/test/read.cgi/unix/1256735581/

こっちへ
734デフォルトの名無しさん:2012/03/18(日) 23:04:49.50
xcosで作ったモデルの周波数応答取りたいんだけど、なんかいい方法ない?
思いゆつくのは、一旦、応答をテキストに書きだしてfftすることぐらい。
他に方法あればご教示願います。
グラフでダブルYってどうやって出したらいいでしょうか
plotyyのこと?
それでした。どうもありがとうございました。
axisはどうやってやるんだろう?片面しか効かないけど・・・setとか使うのかな・・・
738デフォルトの名無しさん:2012/04/23(月) 10:04:45.31
ステップ入力のグラフをかきたいのですが、どうやればいいですか?
739デフォルトの名無しさん:2012/04/23(月) 16:14:37.34
力技だけど

x = [-1, 0, 0, 1];
y = [ 0, 0, 1, 1];
plot(x, y);

って感じでいけない?(今手元にMatlabなくて検証してないけど、できなかったらスマン(´・ω・`))
740デフォルトの名無しさん:2012/04/26(木) 03:25:46.42
( ・ω・)y─┛〜〜
741デフォルトの名無しさん:2012/05/01(火) 13:16:49.11
sin関数みたいに、ベクトルや行列を渡すとその要素に作用して結果を返す関数って
どうやって作るのでしょうか。

forやarrayfunで出来ることは出来るのですが、
並列化されないためか、遅いです。
742デフォルトの名無しさん:2012/05/01(火) 13:51:21.30
関数内で .* みたいに要素ごとに処理する演算子を使えば普通にできる
743デフォルトの名無しさん:2012/05/01(火) 15:08:10.56
>>739
stairsでいいんでないか?
744デフォルトの名無しさん:2012/05/01(火) 22:29:28.61
>>741
なんで遅いと思ったの?
745デフォルトの名無しさん:2012/05/03(木) 17:24:56.72
GPUって簡単に使えるの?
746デフォルトの名無しさん:2012/05/09(水) 14:49:27.86
for i=1:length(C)
  C(i)=max(table(table(:,:,2) == x2(i)) );
end

とすると
??? Improper assignment with rectangular empty matrix.
というエラーが出ます。
わからないのは、for文を回さずに、
C(1)=max(table(table(:,:,2) == x2(1)) );
という風にコマンドラインで1つずつやっていくと1〜length(C)までちゃんと出るんです。
forやwhileなど、繰り返し文に入れるとエラーが起きてしまいます。
どうしてでしょうか?
747デフォルトの名無しさん:2012/05/09(水) 16:14:03.91
自己解決しました!。
table(table(:,:,2) == x2(i))
が空だった時にエラーが出るみたいです!。
748デフォルトの名無しさん:2012/05/09(水) 21:03:11.84
時報の音をプログラミングして、それをハミング関数を使用せずに
ハミング窓で窓掛けしたいのですが
----------------------------------------------
Fs = 48000;
FqA = 440;
FqB= 880;
time = Fs / 10;


n = 1:time;
tone(n) = 1 * sin (2 * pi * FqA * (n-1) / Fs);
n = time:Fs;
tone(n) = 0;
tone = repmat(tone, 1, 3)


n = 3 * Fs + 1:6 * Fs;
A = [ones(1, Fs) linspace(1, 0, Fs * 2)];
tone(n) = A .* sin (2 * pi * FqB * (n-1) / Fs);


soundsc(tone, Fs);

liner(n) = (n-1) / time;
tone_win(n) = 0.5 + 0.5 * cos (pi / tone(n) .* liner );
soundsc(tone_win, Fs)
-------------------------------------------------------------
tone_win(n) = 0.5 + 0.5 * cos (pi / tone(n) .* liner );
で次元が合わないとエラーを吐いてしまいます。
MATLAB初心者で窓掛け自体をしっかりと理解していないのもありますが
上手く次元を合わせられないのですがどう改変すればいいですか?
749デフォルトの名無しさん:2012/05/10(木) 22:42:12.64
cos()の中にtone()が入っているので、なんか音が歪みそう。
ハミング窓をかけるのは、音圧をフェードイン・アウトさせる目的?
750デフォルトの名無しさん:2012/05/13(日) 00:07:25.66
致違いで申し訳ございません。
どこにもこれから質問するものに関連するものがなかったのでここで質問させていただきます。

今現在研究で(大学生4年です)解析をしています。
解析手法としては線形加速度法という陰解法を使用していますが、
この手法の欠点としては、ステップ間隔を短くしなければなりません。

実際研究で使う地震波は、100秒もあり、扱う対象のものは
固有円振動数だけで330個、その中の最小のものより1/60程度にしなければ
なりません。そうしなければ、解は拡散してしまうからです。

そこで、0.0005秒間隔で100秒までとなると20万ステップしなければなりません。
構造解析のソフトウェアではそれにどれだけいったいかかるのか
図ったことはありませんが、最適化ですのでこれを少なくとも100回は回していかなければ
なりません。線形加速度法で扱う行列は、330行列。。。
この前0.0005秒間隔で20000ステップやるのですら、
1時間かかていました。。 20万ステップですから単純計算で
一回終えるのに10時間。これが最低でも100回回さなければならないため、
1000時間かかってしまいます。

そこで、解析手法を変えようと思っているのですが、
どの方法が適切でしょうか?何卒ご協力お願い申し上げます
751デフォルトの名無しさん:2012/05/13(日) 00:48:34.95
シミュ板に書いたら
752デフォルトの名無しさん:2012/05/13(日) 23:30:13.49
まず先生に相談しよう
それがダメなら海外の研究者にメールしよう
753デフォルトの名無しさん:2012/05/15(火) 18:00:24.32
>>748-749
tone_win(n) = 0.5 + 0.5 * cos (pi ./ tone(n) .* liner(n));

とすれば、とりあえず通るみたいだけど、確かに音が歪みますね。

tone_win = (0.5 + 0.5 * cos (pi .* liner)) .* tone;

なら、フェードアウト部分がエコーっぽく装飾される。
plot(tone_win) で確認すればよくわかる。
754デフォルトの名無しさん:2012/05/16(水) 06:31:22.59
matlabをやめれば速くなるかもね。
755デフォルトの名無しさん:2012/05/16(水) 12:17:00.24
>>748
nの使い方が変なので左辺と右辺の長さが合ってない
n = 1:time;
n = time:Fs;
n = 3 * Fs + 1:6 * Fs;
どんどん変わってるからliner(n)の長さがおかしくなってる

窓掛けはcos関数の中にtoneを入れちゃダメだろ…
最初の
soundsc(tone, Fs);
まではとりあえず動くようなので

x = 0:length(tone) -1;
hann_window = 0.5 - 0.5 * cos(2 * pi * x / length(tone));
tone_win = tone .* hann_window;
soundsc(tone_win, Fs)

ま、普通はこういう窓のかけ方はしないんだけどな
エスパー回答なんで質問の意図と違ってるかも知れん
756デフォルトの名無しさん:2012/05/16(水) 19:17:39.77
a=sin(θ)のグラフを描くときに、θが0からπのときだけa=0となるようなグラフは、どうすればかけますか?
757デフォルトの名無しさん:2012/05/16(水) 23:45:07.18
a=sin(θ).*~(θは0からπ)
758デフォルトの名無しさん:2012/05/17(木) 00:21:09.31
>>757ありがとうございます
759デフォルトの名無しさん:2012/05/17(木) 18:39:28.45
突然失礼します。
今メモ帳にあるデータを、アルゴリズム上で格納したいのですが、
以下のようにしたいです。
加速度   
0.01 0.02 0.01 .....約10万行......
0.01 0.02 0.01 .....約10万行......
0.01 0.02 0.01 .....約10万行......
.
.
330行


数字は任意です。
データとしては、上からi=1:1:10万として
下のように格納していきたいです。
for i=1:10万
i=i+1;
あるデータ=-----------;
格納(i,あるデータ)
end

としていきたいです。
あるデータは、1行*330行列になっています。
また、加速度という文字も最初の1列目に入れたいため、
i=i+1;としました。
760デフォルトの名無しさん:2012/05/17(木) 18:51:16.31

        ./ニYニヽ
 r、r.rヽ.  / (0)(0)ヽ
r |_,|_,|_,|/  ⌒`´⌒ \   で?っていう
|_,|_,|_,|_,| , -)    (-、.|
|_,|_,|_人 (^ iヽ__ ノ l |
| )   ヽノ |  `ー'´   /
|  `".`´  ノ
   入_ノ
 \_/
   /
  /
761デフォルトの名無しさん:2012/05/17(木) 18:53:15.98
格納の仕方を知りたいです。
何卒宜しくお願いします。
762デフォルトの名無しさん:2012/05/17(木) 18:58:50.15
普通にイコール(=)演算子を使えよ

a = '加速度'

テキストファイル読みたけりゃdlmread関数とか
763デフォルトの名無しさん:2012/05/17(木) 19:03:46.29
どのように格納すればよいのかまったくわかりません。。。
fprintが調べたら出てきたのですが、使い方も複雑な説明の仕方でわかりませんでした。
764デフォルトの名無しさん:2012/05/17(木) 19:26:33.18
絶望的だなw
一つの変数に文字と数字を混在させるにはcellを使うが、もし意味がわからないなら
文字を入れるのは無理だから数字だけにしたほうがいい

ファイルの読み込みはcsvreadかdmlreadを調べて分からなきゃご愁傷様
765デフォルトの名無しさん:2012/05/17(木) 22:05:46.12
小林乙
766デフォルトの名無しさん:2012/05/17(木) 23:33:27.65
エクセル使え
文字列と数を1つの行列で扱うな
767デフォルトの名無しさん:2012/05/18(金) 00:12:06.07
申し訳ございません。
dmlreadなどで調べなおしてきます。
また、自分がメモ帳といったのは、再度そのデータを
matlab上でグラフにするために必要だからメモ帳を選択しました。
メモ帳での書き出しはできます
768デフォルトの名無しさん:2012/05/18(金) 00:52:53.42
matlabのテキストファイルの扱いはたいして融通がきかないから
saveでワークスペースを保存したほうがいい
769デフォルトの名無しさん:2012/05/18(金) 11:04:49.31
>>767
>>759を見る限りまともに書き出されてない

770デフォルトの名無しさん:2012/05/18(金) 13:09:58.18
なぜこの読み込みをしなければならないのかというと、
メモリー不足になってしまうからです。
上のような行列が3個もありそれらすべてを一回、ある行列に格納していって(for - next の中で)
そのあとにplotしていきます。
saveでも大丈夫なんでしょうか?
771デフォルトの名無しさん:2012/05/18(金) 14:14:14.56
>>770
100000 x 330ならデフォの倍精度でも配列の大きさは200MB強くらいしかいかないだろ
まぁ、dlmreadは範囲指定できるからforループ内でファイルの一部だけ読みだすのはできるが
matlabにとっては一番オーバーヘッドが大きい使い方なので普通はやらない
772デフォルトの名無しさん:2012/05/23(水) 13:28:59.63
例えばですが、1行100列の行列があって、
その各要素の高い順に番号をつけたいのですが、そんなことできますか?

たとえば、
a=[ 1 3 5.5 2 4 ]であったら、

ans= [ 5 3 1 4 2 ]
と要素の高い順に番号をつけてくれる。。。というかんじです。
773デフォルトの名無しさん:2012/05/23(水) 17:22:21.04
[Y,I] = sort(a)
で、Iを見ると良いよ。
774デフォルトの名無しさん:2012/05/24(木) 02:19:56.75
だれかGPUつかってる人いる?
実際のところどうなの?
速くなるの?
775デフォルトの名無しさん:2012/05/25(金) 15:46:21.60
3次元の位置[x,y,z]があって
3次元の図上でその各点の強度を色とかで表現する方法ってありますか。

うまい方法があれば教えてください。お願いします
776デフォルトの名無しさん:2012/05/25(金) 16:27:48.48
meshとかsurf関数を調べろ
777デフォルトの名無しさん:2012/05/25(金) 16:29:15.63
いや無理か
2Dに投影はできるんだが
778デフォルトの名無しさん:2012/05/25(金) 18:20:52.95
779デフォルトの名無しさん:2012/05/25(金) 18:27:01.81
たとえば、a=[ 1 2 ; 5 7 ; 5 6];という行列を
[1 2 5 7 5 6]
と行だけに変換する関数ってありますか?

宜しくお願いします。
780デフォルトの名無しさん:2012/05/25(金) 18:42:28.53
>>779
reshape
781デフォルトの名無しさん:2012/05/25(金) 22:07:06.58
>>779
a(:).'を良く見かける
782デフォルトの名無しさん:2012/05/28(月) 00:38:30.23
突然失礼します。
線の色について非常に困っています。
x=[10×2000]の行列があって、
これを、tの軸と一緒にプロットしたいのですが、
plot(t,x)とやってしまうと、
どれが1,2,3と8,9,10行の成分なのかわからなくなります。
これは、1〜7番目までは違う色で、8番目からはまた同じ色が使われてしまうからです。
この問題を解決するためにどのような手段を講じればよいでしょうか?

何卒よろしくお願い致します。
783デフォルトの名無しさん:2012/05/28(月) 15:45:37.20
holdするかlegend
784デフォルトの名無しさん:2012/05/29(火) 00:36:35.87
カラーマップ変えるか自分で色を指定するか
785デフォルトの名無しさん:2012/05/29(火) 09:39:05.07
xが軸で、A,Bがグラフの時に
h=figure;
plot(x,A,x,B);
としてプロットして
saveas(h,'result.eps');
としてresult.epsに保存すると、2つ描かれてるグラフの色が同じになってしまいます。
どうすれば色を分けたまま保存することができますか?。

786デフォルトの名無しさん:2012/05/29(火) 19:39:06.34
>>775
GraphRでバブル表示
787デフォルトの名無しさん:2012/05/30(水) 03:01:50.27
3Dのデータを扱っています。
smooth3はGPUで処理すれば速くなるのでしょうか?
788デフォルトの名無しさん:2012/05/30(水) 07:01:23.43
VideoWriterのプロパティの設定の仕方を教えてください
789デフォルトの名無しさん:2012/05/30(水) 09:36:37.53
まずマニュアル読め。そして自分の頭で考えよ。
それでどうしても無理だったら「ここまでやって、こうなっている」と報告の上、質問。
790デフォルトの名無しさん:2012/05/30(水) 12:31:26.37
いやです
791デフォルトの名無しさん:2012/05/30(水) 12:57:39.16
池沼は使わない方がいいよ
792デフォルトの名無しさん:2012/06/04(月) 04:43:11.86
figureで名前をつけて保存ってやると,png以外,まともに保存されない.
文字化けしたり軸の数値がおかしくなる・・・
793デフォルトの名無しさん:2012/06/05(火) 22:32:46.56
odeについて教えてください。
計算精度を保つように自動的に時間刻み幅を調整してもらえるのはありがたいのですが、
場合によってはちっとも計算が進まない、という事態になります。
このような場合、精度悪化を無視して、強制的に設定した時間刻み幅で
計算してもらえるような設定は不可能なのでしょうか?

[tini:dt:tend]とすればdtごとの出力を得られることは知っていますが、
計算の刻み幅は必ずしもdtでは無いようです。
ご存知の方、よろしくお願いします。
794デフォルトの名無しさん:2012/06/06(水) 22:37:46.08
MATLABでそれなりの規模のプログラムを開発しているのですが、関数のファイルが増えすぎて
メインの実行ソースがあるディレクトリの中身がゴチャゴチャで管理が大変です
そこで子のディレクトリを作って関数のファイルをそこに隔離したいのですが
関数を呼び出すたびにcdでカレントディレクトリを移動するのは、あまりスマートなやり方には思えません
最終的な実行環境は別のPCなので、MATLABの設定を変更してパスを通す以外で何か良い方法はありますか
795デフォルトの名無しさん:2012/06/06(水) 23:17:44.79
クラス化すればディレクトリ構造で管理できるでしょう
796デフォルトの名無しさん:2012/06/07(木) 02:54:56.81
>>794
init.mとかを作ってaddpath()を羅列しちゃう
797デフォルトの名無しさん:2012/06/07(木) 12:31:00.29
失礼します。
固有値を求めるeigという関数で、
例えば5*5の行列の固有値を求めるのは、大きいw^2から順に
対角に数字が入っているのですが、
300*300で見てみると所々、その順序が逆になっていることもあります。

eigで求めた場合、どのような順で並んでいるのでしょうか?
798デフォルトの名無しさん:2012/06/07(木) 15:04:02.47
799デフォルトの名無しさん:2012/06/08(金) 17:13:01.42
ありがとうございました!
800デフォルトの名無しさん:2012/06/12(火) 15:39:12.48
matlab student version使ってる方に質問です。
大学などの専門機関で研究目的には使っちゃだめってあって、卒論修論作成に
利用するのはおkらしいけど、博士論文作成だと論文投稿が必須なのに、
これってバカ高い通常版買えってこと?アカデミック版ですら単品で5万とか
するのに。
801デフォルトの名無しさん:2012/06/12(火) 22:37:45.96
研究費で買えばいいじゃん
802デフォルトの名無しさん:2012/06/14(木) 10:54:38.10
>>801
研究員の人が専用で使ってるので、学生にmatlab使わせる金がないんです。
803デフォルトの名無しさん:2012/06/14(木) 21:45:28.51
金がないなら自分でコーディングしろや
804デフォルトの名無しさん:2012/06/14(木) 21:54:59.69
>>802
大学なら学科か、最悪研究室レベルならどこか一つくらいサーバーライセンスがあるだろ
担当者に頼んで借りろ
ツールボックスなんか知らんけどな
805デフォルトの名無しさん:2012/06/16(土) 12:36:24.02
>>800
GNU-Octaveでがんばれるだけがんばりましょう
806デフォルトの名無しさん:2012/06/17(日) 16:14:29.91
numpyってどうなん?
パイソンだけに大規模開発はマトラボよりやりやすいらしいが
807デフォルトの名無しさん:2012/06/26(火) 16:24:16.43
MAIN.Mっていうスクリプトファイルがあってそれを使おうとすると
>> MAIN
Cannot find an exact (case-sensitive) match for 'MAIN.m'

The closest match is /rains/eve/e-tec/k128590/Linux/practice9/MAIN.M

To change the file extension, cd to the file's folder, type:
movefile MAIN.M MAIN.m_bad; movefile MAIN.m_bad MAIN.m
and then cd back.

ってエラーが出るんですけど、どうしたらいいんですか?。
教えてくださいm(__)m。
808デフォルトの名無しさん:2012/06/26(火) 19:55:11.89
訳:そんなファイルねえよカス
809デフォルトの名無しさん:2012/06/26(火) 21:31:53.09
ファイルちゃんとあるのに、エラーが出ます・・・。
810デフォルトの名無しさん:2012/06/27(水) 10:20:48.22
>>807
書かれている通りにやる
811デフォルトの名無しさん:2012/06/27(水) 11:22:29.85
和約するだけ
まあ要は、「change the file extension」=拡張子変えろ、ってこと

cd、movefileの意味はここでも読んでろ
http://www.mathworks.co.jp/help/ja_JP/techdoc/ref/cd.html
http://www.mathworks.co.jp/help/ja_JP/techdoc/ref/movefile.html
812デフォルトの名無しさん:2012/06/27(水) 18:52:46.33
どうもありがとうございますm(__)m。
813デフォルトの名無しさん:2012/06/27(水) 19:37:08.95
A=1:0.1:100;
B=1:0.1:1000;

sum((A-B(1:length(A))).^2)の結果がゼロにならないんですが、
我慢するしかないんでしょうか。
正直この結果にショックを受けています。
浮動小数といっても、ゼロになって然るべきなので。

間隔を0.1ではなく自然数にすると0になります。
Matlab 2011a x64 windowsです。
814デフォルトの名無しさん:2012/06/27(水) 20:24:02.98
数値計算システムだからしょうがないとあきらめて、
自分は「eps以下ならゼロとみなす」というようにやってます。
815デフォルトの名無しさん:2012/06/27(水) 20:41:05.30
>浮動小数といっても、ゼロになって然るべき
>浮動小数といっても、ゼロになって然るべき
>浮動小数といっても、ゼロになって然るべき
>浮動小数といっても、ゼロになって然るべき
816デフォルトの名無しさん:2012/06/27(水) 20:59:45.07
>>815
まちがっちゃいないよ。
A=rand(1,1);
A-A == 0は真
817デフォルトの名無しさん:2012/06/28(木) 13:41:14.01
>>816
>>813の文脈では完全に間違ってるけどね
818デフォルトの名無しさん:2012/06/28(木) 13:43:14.11
どうしても我慢できないなら数式処理のツールボックス入れれば良い
激遅だけどな。
819デフォルトの名無しさん:2012/06/28(木) 14:05:09.31
>>813はどうして、0にならないんですか?。
820デフォルトの名無しさん:2012/06/28(木) 14:05:41.03
disp ---------------------------------
clear all; tic
A = 1:0.1:10;
B = 1:0.1:100;
0 == sum((A-B(1:length(A))).^2)
toc; clear all; tic
A = sym(1:0.1:10);
B = sym(1:0.1:100);
0 == sum((A-B(1:length(A))).^2)
toc


---------------------------------
ans =
0
Elapsed time is 0.002416 seconds.
ans =
1
Elapsed time is 1.485948 seconds.
821デフォルトの名無しさん:2012/06/28(木) 14:19:30.90
>>819
仕様で保障されてない
822デフォルトの名無しさん:2012/06/28(木) 14:25:17.49
>>821さん、どうもありがとうm(__)m。
823デフォルトの名無しさん:2012/06/28(木) 14:36:19.60
がっかり仕様だなー
例えばCでforループで数列を作れば一致するんだが
matlabはどうやって数列を生成してるんだろうね?
824デフォルトの名無しさん:2012/06/28(木) 15:43:48.68
a:b:cはなるべく使わないようにしてる
bが整数以外の時は特に

そういう配列が欲しい時は

p = (x*y:x*z)/x;

って書いてる
今回で言えば

A = (10:1000)/10;
B = (10:10000)/10;
825デフォルトの名無しさん:2012/06/28(木) 17:36:57.76
A = (100:10000000)/100;
B = 1:0.01:100000;
plot(cumsum(A<B).\cumsum(A>B)),shg
826デフォルトの名無しさん:2012/06/28(木) 17:38:59.97
semilogxの方が見やすかった
827デフォルトの名無しさん:2012/06/28(木) 20:25:40.89
>>821
保証がどうこうより、どういう実装だから
こんなことになってしまうかの方が気になる。
配列の第一要素を確定した後に逐次的にインクリメントするだけなら
こうはならない。

おそらく、途中途中でかけ算使ったりしてるんじゃないかな。
並列化のために。
828デフォルトの名無しさん:2012/06/28(木) 20:32:35.78
そういう粗探しはマトラボコンパチのオープンソースでも調べたら
829デフォルトの名無しさん:2012/06/28(木) 21:07:41.70
>>824
それどれくらいメリットある?
マトラボでそういう綱渡り的なコーディングは怖くて俺にはできんわ
830デフォルトの名無しさん:2012/06/28(木) 23:43:32.22
浮動小数点演算で誤差があるの当たり前だろ
831デフォルトの名無しさん:2012/06/28(木) 23:46:15.82
[0:0.1:1] - [0:1:10]/10
これですら全部0にはならないんだから
832デフォルトの名無しさん:2012/06/28(木) 23:51:21.53
>>831
>>813とそれとでは全く次元が異なる問題

「誤差があるのが当たり前」と考えるのをやめるのは良くないよ。
833デフォルトの名無しさん:2012/06/28(木) 23:53:49.80
>>830
なんで@eqをエラーにしないの?
834デフォルトの名無しさん:2012/06/30(土) 13:58:16.83
>>833
3.14 == 3.14
でエラーやNaNを返すようにしろと?
835デフォルトの名無しさん:2012/06/30(土) 14:16:03.34
配列の中身、ダンプしてみたら
836デフォルトの名無しさん:2012/06/30(土) 15:04:49.80
電卓みたいに有効桁数で四捨五入とかしてくれないの?
837デフォルトの名無しさん:2012/06/30(土) 18:14:02.38
勝手にそんな処理されたら困るw
838デフォルトの名無しさん:2012/06/30(土) 18:20:00.43
え、切り捨てでいいの?
839デフォルトの名無しさん:2012/06/30(土) 21:22:55.26
恥ずかしながら今日まで>>813は真だと思っていた。
840デフォルトの名無しさん:2012/06/30(土) 22:46:03.63
>>839
それほど恥ずかしいことではない。
古いmatlabだと0になるし。
841デフォルトの名無しさん:2012/06/30(土) 22:57:27.91
>>839
フォローサンクスです。
多分昔書いたコードに真を仮定したものがあるような気がする・・・
indexingだけで変わるなら>>834もありな気もしてきますが、
IEEEの規格なんかではどうなってんでしょうか
842839,841:2012/06/30(土) 22:58:49.08
間違いました>>840さんににサンクスです。
843デフォルトの名無しさん:2012/06/30(土) 23:25:59.21
>>838
切り捨てっつーか、他の言語がIEEE丸めなのにmaltabだけ四捨五入だったら迷惑極まりない
844841:2012/06/30(土) 23:34:17.98
また良く読んで無かった
>>824の例でうまくいくならindexingの問題じゃなくてn:a:mでの生成の問題なのか
なら昔のコードは助かった・・・
845デフォルトの名無しさん:2012/06/30(土) 23:42:38.75
>>843
maltab使って、最終的に何するの?
846デフォルトの名無しさん:2012/06/30(土) 23:45:23.30
計算する
847デフォルトの名無しさん:2012/06/30(土) 23:48:20.84
グラフ書かせて終わりとか?
848デフォルトの名無しさん:2012/07/01(日) 00:16:29.69
>>847
まあ大半はそれだけどな
849デフォルトの名無しさん:2012/07/01(日) 00:20:26.66
データ生成とか簡易な統計処理

matlabのグラフはどうも馴染めないんだよなー
gnuplotのラッパーがどこかにないものか
850デフォルトの名無しさん:2012/07/01(日) 00:22:11.28
>>849
Rは綺麗
851デフォルトの名無しさん:2012/07/01(日) 01:23:17.19
スクリプトの途中から呼び出したりできないと使いにくくてかなわんよ
852デフォルトの名無しさん:2012/07/01(日) 01:29:46.43
>>851
どゆこと?
853デフォルトの名無しさん:2012/07/01(日) 01:34:29.21
>>850
ワークフローをひとつのソフトウェア(matlab一本)でやりたいってこと
連動してくれないとずっと見張ってなきゃならないし
854デフォルトの名無しさん:2012/07/01(日) 15:08:14.37
いい加減グラフ関連は刷新して欲しいよな
特に3Dグラフは描画重すぎ
855デフォルトの名無しさん:2012/07/01(日) 21:03:59.73
画面表示とEPS出力の再現性のなさもなんとかしてほしい。
856デフォルトの名無しさん:2012/07/02(月) 12:11:03.04
Matlab 2012bからバージョン番号が8.0なんだけど、
figureについては見た目同じだった。
857デフォルトの名無しさん:2012/07/02(月) 12:16:58.43
>855
同意
858デフォルトの名無しさん:2012/07/02(月) 12:39:25.78
subplotの数を増やすと指数関数的に遅くなる問題、
ある程度増やすとplot自体がされなくなる問題もなんとかしてほしい。
859デフォルトの名無しさん:2012/07/02(月) 13:08:16.97
そうそう増やすもんじゃない
860デフォルトの名無しさん:2012/07/02(月) 13:13:15.53
1024×1024でplotとかしてたんだが、普通じゃないのか
861デフォルトの名無しさん:2012/07/03(火) 00:37:37.21
>>855
画面表示でフォントサイズとか確認して最後にバッチで連番保存した後でズレに気づいた虚しさって誰しも一回は味わうよね
862デフォルトの名無しさん:2012/07/03(火) 05:03:21.76
普通にpngなんかで出力するとタイトルや座標のフォントってギザギザですよね?
みなさんどうしてますか?

ai形式で出力してからイラレで出力すると
滑らからしいですがイラレ高い・・・
863デフォルトの名無しさん:2012/07/03(火) 08:14:42.00
>>862
解像度上げまくってpng出力すれば、ギザギザじゃないよ。
投稿の締め切りが近いときはそうしてる。

時間があるときは調整してEPS
864デフォルトの名無しさん:2012/07/03(火) 09:35:24.75
>>863
出力の設定に解像度があったのですね。
有難うございます。大変助かりました。
865デフォルトの名無しさん:2012/07/03(火) 10:03:12.82
>>864
紙の上での図のサイズをMatlab上の用紙サイズに設定して、
あとは必要な解像度合わせれば割とうまくいく。

自分はEPSでベクトル出力したい派だけど。
866デフォルトの名無しさん:2012/07/03(火) 22:41:23.14
macのlionについてなんですがxcodeをインストールしてもmexがコンパイルできません
どうすればよいのでしょうか?
867デフォルトの名無しさん:2012/07/03(火) 23:39:11.38
mex -setupはできたか?
868デフォルトの名無しさん:2012/07/03(火) 23:44:06.56
setupはできました
gcc-4.2とg++-4.2がありませんといすエラーがでます
869デフォルトの名無しさん:2012/07/03(火) 23:48:51.69
バージョンによってはパッチが必要
http://www.mathworks.co.jp/support/compilers/R2012a/maci64.html
870デフォルトの名無しさん:2012/07/04(水) 00:10:26.71
ぐぐってもわらかんorz
r2011aなんですがpatch必要でしょうか?
871デフォルトの名無しさん:2012/07/04(水) 00:28:44.70
まず、最新版にしようか
話はそれからだ
872デフォルトの名無しさん:2012/07/04(水) 00:31:19.88
>>870
URIをR2011aに変えるとか、少し頭使えよ
873デフォルトの名無しさん:2012/07/04(水) 00:52:57.01
なるほどxcode4.1なら使えるんですねありがとうございます
874デフォルトの名無しさん:2012/07/06(金) 21:13:17.21
matlab.exe -nojvm
てWindowsでもふつうに動くよね?
ヘルプによるとUNIXのみとなってるけど
875デフォルトの名無しさん:2012/07/06(金) 21:53:28.37
スクリプトファイル中の、あるセルのデバッグをするときにエラーの行番号を知りたいのですが、
該当以外のセルを評価してもらいたくない場合は他のセルをコメントアウトしてF5するか、または
該当のセルのみを新規ファイルにコピペしてF5しなくてはなりませんよね?

実はもっと手軽な方法があったりするのでしょうか?
876デフォルトの名無しさん:2012/07/06(金) 22:04:21.32
選択部分のみ実行的なのがなかったっけ?
877875:2012/07/07(土) 16:44:36.76
>>876
上から選択してF9していって該当行を見つけるという事でしょうか?
878デフォルトの名無しさん:2012/07/07(土) 18:30:00.59
構造体をアレイにすると
「 s(1,2). 」
でtab補完してくれないのうちだけ?
(win7 64bit, 2012a)
879878:2012/07/07(土) 18:33:48.53
コマンドウィンドウでは補完した。
エディタではしてくれないらしい。
880デフォルトの名無しさん:2012/07/07(土) 18:44:10.55
つか構造体のアレイてつかいにくくない?
[ s.f(1:2, :) ]
とか
{ s.f(1:2, :) }
とかやるとベクトルになっちゃう
881880:2012/07/07(土) 18:45:09.03
すまん
s(1:2, :)
の間違いです
882デフォルトの名無しさん:2012/07/08(日) 01:30:26.06
こんばんわ、matlabで困っているものです。
excelファイルからmatlabに書き込むときに、
もしexcelファイルのA1、A2のところに文字が書いてあり、
その下に40行2列の数字があったとすると、
[data, header] = xlsread('test.xls')
でdataと打てば、文字が入っていない配列が得られるのでしょうか?

http://sach1o.blog80.fc2.com/blog-entry-21.html と
http://odin.fi-b.unam.mx/software/matlab/windows/Matlab%20R13%206.5%20Full%20+%20Serial%20+%20Manual/Documentation%20CD/jhelp/techdoc/ref/xlsread.html
で言っていることが逆で分からないです。

今私がやろうとしていることは、
3列目から数字が始まるので、そこから取り出したいです。
よろしくお願いします。
883デフォルトの名無しさん:2012/07/08(日) 09:33:09.71
どちらが正しいか自分で確認すればいいだろ
なんで困ってるのかわからん
884デフォルトの名無しさん:2012/07/08(日) 10:00:00.86
すみません。それが、今matlabを使える状況じゃないので…(少なくとも来週の火曜日までは)
885デフォルトの名無しさん:2012/07/08(日) 10:08:46.03
とりあえず2011bではブログの返り値のほうが正しい
しかしバージョン依存かもしれん
886デフォルトの名無しさん:2012/07/08(日) 11:16:49.73
ありがとうございます。自分のバージョンは2009だったので、まだわからないですね。。。

ところで、3列目から数字を抜く方法はご存知でしょうか?
887デフォルトの名無しさん:2012/07/08(日) 14:29:48.67
>>886
データは2行のヘッダと40行2列の数字じゃなかったの? 3列目?
「抜く」という表現の意味がわからないですね

excelの行列のサイズによらず、数字なら第2返り値の配列に入るはずだけど
888デフォルトの名無しさん:2012/07/08(日) 15:31:43.70
説明不足で誠に申し訳ございません。
私が今行おうとしていることは、
エクセルの1行、2行は文字で、数字が始まるのはエクセルでいうと、
3行目からであるため、抜くのは、2行目からではなく、3行目からということです。

たとえば、
A3からB10まで8行2列の数字が入っていれば、そこの数字だけ抜き取りたいということです。
何卒よろしくお願いします。
889デフォルトの名無しさん:2012/07/08(日) 16:52:36.83
>>888
そりゃ普通に
num = xlsread('filename')
でいいよ

ファイル中の(最初のシートの)全数字セルを抜き出した数字配列が返る
>>887の「第2返り値の配列」は誤記で、正しくは「第1返り値の配列」ですね
890デフォルトの名無しさん:2012/07/09(月) 19:55:36.46
質問があります。

大きさが同じのカラー画像
元画像A.bmp 
処理画像B.bmp
の平均二乗誤差mse

X = imread('A.bmp');
Y = imread('B.jpg');
[height,width,depth] = size(X);

difR = reshape(X(:,:,1)-Y(:,:,1), width*height, 1);
difG = reshape(X(:,:,2)-Y(:,:,2), width*height, 1);
difB = reshape(X(:,:,3)-Y(:,:,3), width*height, 1);
mseR = mean( difR.^2 );
mseG = mean( difG.^2 );
mseB = mean( difB.^2 );

だと思うんですけど

大きさが同じの「モノクロ」画像
元画像C.bmp 
処理画像D.bmp
の平均二乗誤差mse
は、どうやればいいか教えて下さい
お願いします。

891デフォルトの名無しさん:2012/07/09(月) 21:52:11.37
http://www.mathworks.com/matlabcentral/fileexchange/18835-functional-library
マトラボの用途を大きく占めてるデータの解析は書き捨てのワンライナーが便利なのに
今後そっちは強化しないんだろうか?
892デフォルトの名無しさん:2012/07/12(木) 20:35:16.81
グラフのプロットの話なんですが、
text(1,2,3,'aaaaa')とすれば、3次元の(1,2,3)の座標ににaaaaaと文字が
現れると思いますが、
このaaaaaが変数の場合、どのように書けばいいのでしょうか?

宜しくお願いします
893デフォルトの名無しさん:2012/07/12(木) 22:47:22.71
sprintf
894デフォルトの名無しさん:2012/07/13(金) 00:27:30.47
or
num2str
895デフォルトの名無しさん:2012/07/13(金) 01:48:54.88
for i=1:9
str=num2str(i);
text(1,2,3,'i');
end
でよろしいですか?今手元になくて確かめれません。。
896デフォルトの名無しさん:2012/07/13(金) 05:27:40.94
それでよろしくないと思う
もうなんかとにかくそれは違う
897デフォルトの名無しさん:2012/07/13(金) 06:31:56.40
>>895
octave等の無料のソフトを自宅のにインストールするべし
898デフォルトの名無しさん:2012/07/13(金) 17:20:54.57
すみません。octaveをインストールしてやってみましたが、
895のやり方ではだめでした。。。
895の書式ならどのようにやればいいのでしょうか?お願いします。。。
fprintfやnum2strの解説を見ても本当にどのようにやればいかわかりません。
899デフォルトの名無しさん:2012/07/13(金) 18:39:15.16
text(1,2,3,str);
?
900デフォルトの名無しさん:2012/07/13(金) 20:13:56.92
すみません。言及不足でした。
3次元のグラフの
1,2,3という次元に数字を入れていくというものです(895の例)
つまり
for i=1:5
str=num2star(i)
x=a(i);y=b(i);z=c(i);
plot3(x,y,c)
text(x,y,c,str)
end
としたいわけです

901デフォルトの名無しさん:2012/07/13(金) 20:34:00.47
c,zがワケワカ?
902デフォルトの名無しさん:2012/07/14(土) 13:26:51.53
>>900
それ実行してもエラーだらけだと思うがそのエラー見てどう思うの?
903デフォルトの名無しさん:2012/07/14(土) 15:43:21.42
900をお願いします。本当に困っています。
904デフォルトの名無しさん:2012/07/14(土) 15:44:46.45
すみません。URLが801-900/で900までしか見れなかったので903を書き込んでしまいました。
間違っていました。
plot3(x,y,z)
text(x,y,z,str)
でした;
905デフォルトの名無しさん:2012/07/14(土) 15:48:55.90
エラー晒せやも読めないようだ
906デフォルトの名無しさん:2012/07/14(土) 16:05:40.60
for i=1:5
str=num2star(i)
x=a(1,i);y=b(1,i);z=c(1,i);
plot3(x,y,z)
text(x,y,z,str)
end
と打つと、
'num2star' undefined near line 4 column 5と出ました。。
907デフォルトの名無しさん:2012/07/14(土) 16:06:11.07
ちなみにa=[1 2 3 4 5];b=a;c=a;と事前に打ってあります。
908デフォルトの名無しさん:2012/07/14(土) 16:16:17.71
すみません。書き間違えてました。。num2star(i)とやってみたらできました。。。
本当にすみません。失礼しました。
909デフォルトの名無しさん:2012/07/14(土) 16:38:27.03
>>213
A(sub2ind(size(A), [1, 3], [2, 5]))
910デフォルトの名無しさん:2012/07/14(土) 17:09:02.18
num2star
num2str
911デフォルトの名無しさん:2012/07/14(土) 18:34:00.69
for文をどのようにして外に出せばよいのでしょうか?
(ex)
n=100;
for j=1:n:1

if 何かの条件をクリア
for文の外へ出す
end

end

ためには恐らくbreakを使うのだと思いますがどのようにして外に出せばよいでしょうか?
912デフォルトの名無しさん:2012/07/14(土) 18:36:35.97
913デフォルトの名無しさん:2012/07/14(土) 19:43:20.42
n=nan;
for j=1:n:1
 if nan == nan || nan ~= nan
  quit force
 else
  quit force
 end
 break
end
914デフォルトの名無しさん:2012/07/14(土) 19:59:40.97
matlab方面でも
マニュアル読めません(読みません)系がやってるのけ
915デフォルトの名無しさん:2012/07/14(土) 23:03:56.91
ブレークポイントつけても,スルーされることがある.
私だけ? 2011a x64 Linux
916デフォルトの名無しさん:2012/07/15(日) 00:00:08.93
MATLABは研究とか仕事で必要に迫られて使うものだと思うんだけど、あまりに低レベルな質問する人って周りに使ってる人だれもいないのかね
917デフォルトの名無しさん:2012/07/15(日) 00:11:01.05
どうしてそんな環境にMATLABが入ってるんだとw
918デフォルトの名無しさん:2012/07/16(月) 13:36:04.39
MATLABですらまともに使えないのが日本のまともな研究者
919デフォルトの名無しさん:2012/07/16(月) 16:24:51.78
棚に箱を飾っとくことに意味があるじゃね、その手の人には
920デフォルトの名無しさん:2012/07/17(火) 04:16:04.38
たしかシール付いてくるぞ
921デフォルトの名無しさん:2012/07/17(火) 08:15:59.21
>>916
本来は教わった・習ったのに覚えてないから聞くに聞けないってのが多い
922デフォルトの名無しさん:2012/07/17(火) 09:15:08.63
GUIでPopupmenueの項目を選びプッシュボタンを押すとグラフが表示されるというものを作りたいのですが,

popupmenuの項目をどうやってgetするか
プッシュボタンのところで getした数字によってswitchするにはどうすればいいか

がわかりません.宜しくお願いします.
923デフォルトの名無しさん:2012/07/17(火) 09:42:38.28
>教わった・習ったのに覚えてないから
記憶に頼るような時代じゃない
辞書引くみたいな
検索能力がないとか
924デフォルトの名無しさん:2012/07/17(火) 21:35:56.31
ひと通りチュートリアルやるどころか、プログラミングすら初めてみたいな人がよく2chの板見つけて質問しようと思うよなぁ
925デフォルトの名無しさん:2012/07/18(水) 10:53:15.64
>>1
チュートリアルはどっちもリンク切れてるな
むかしMathworksの日本語簡易マニュアルで勉強した覚えがあるんだが
今はそういうオンライン資料ないのかね
926デフォルトの名無しさん:2012/07/18(水) 10:58:21.08
セミナーに来いってことか
927デフォルトの名無しさん:2012/07/18(水) 11:48:56.82
すいません、質問なのですが…

expA=Σ1/n! An
n=0
を計算したい場合、
% neumann.m --- 行列の Neumann 級数 (等比級数) の第 N 部分和
function s = neumann(a,N)
[m,n] = size(a);
if m ~= n
disp('aが正方行列でない!');
return
end
% 第 0 項 S_0 = I
s = eye(n,n);
% 第 1 項 S_1 = I + a
t = a; s = s + t;
% 第 2〜N 項まで加える (t が a^n になるようにしてある)
for k=2:N
t = t * a;
s = s + t;
end

これを改変して使えますか?
928デフォルトの名無しさん:2012/07/18(水) 12:19:47.20
フーリエ級数
929デフォルトの名無しさん:2012/07/18(水) 12:41:26.75
>>928
フーリエ級数を使うと計算出来るのでしょうか?
930デフォルトの名無しさん:2012/07/18(水) 15:28:50.92
テキトーに
n=0
からでいいのけ?
931デフォルトの名無しさん:2012/07/18(水) 18:55:22.68
はい、そうなんですが…
よかったら教えてください。
932デフォルトの名無しさん:2012/07/18(水) 19:31:13.12
?=1/0!
933デフォルトの名無しさん:2012/07/18(水) 19:54:23.26
>>932
此れを何処に入れれば良いのでしょう…?
934デフォルトの名無しさん:2012/07/18(水) 20:08:40.51
え、マジで訊いてるの?
935デフォルトの名無しさん:2012/07/18(水) 20:15:06.05
すみません、まだ全然分からなくて…。
936デフォルトの名無しさん:2012/07/18(水) 20:18:49.46
937デフォルトの名無しさん:2012/07/18(水) 20:21:26.99
もしかして?=1/0! のみでいい、ということですか?
938デフォルトの名無しさん:2012/07/18(水) 20:31:55.04
悪かった
939デフォルトの名無しさん:2012/07/18(水) 20:40:58.62
すみません…まったく的外れだったでしょうか…
940デフォルトの名無しさん:2012/07/18(水) 20:45:20.42
行列指数関数ならexpmで一発
941デフォルトの名無しさん:2012/07/18(水) 20:50:15.52
942デフォルトの名無しさん:2012/07/18(水) 20:53:50.99
ありがとうございます。
もう少し、やってみます。
943デフォルトの名無しさん:2012/07/18(水) 21:01:45.53
あ、>>941さんもありがとうございます。
マクローリンではなく、テイラー展開のようですが…
944デフォルトの名無しさん:2012/07/19(木) 11:42:02.71
1.e の級数からの計算

 この例は自然対数の底 e を級数から直接計算するものです。e は級数展開で

e=1+1/1+1/2!+1/3! + … + 1/n! + …

で計算されることが知られています。この式を使って e を計算したものが次のプログラムです。

e=1
P = 1
For i=1 to 20
P=P*i
e = e + 1/P
Next i
Print e

加える値が 1/n! で少しだけ複雑ですが,n! を積の方法で計算し,1/n! を求め和を求めています。

e の値は実際には内蔵関数 exp を使うと exp(1) と表されます。この値と上で計算した値を比較して下さい。
945デフォルトの名無しさん:2012/07/19(木) 11:45:42.74
>>943
フーリエもコーシーもマクローリンもテイラーも
本質的には同じ
946デフォルトの名無しさん:2012/07/19(木) 16:39:34.65
いやフーリエは違くないか
947デフォルトの名無しさん:2012/07/19(木) 17:00:17.96
どうしてそう思ったのですか?
948デフォルトの名無しさん:2012/07/19(木) 17:10:30.21
類似点はある
が、俺の知ってる範囲では、本質的に同じとはとてもじゃないが言えない
949デフォルトの名無しさん:2012/07/19(木) 23:52:37.31
ビートルズもストーンズもスマップも
本質的には同じ
950デフォルトの名無しさん:2012/07/20(金) 19:43:06.30
いやスマップは違くないか
951デフォルトの名無しさん:2012/07/20(金) 19:59:24.18
どうしてそう思ったのですか?
952デフォルトの名無しさん:2012/07/24(火) 15:36:16.36
スクリプトMファイルunko.mを実行して
「this file name is unko」とdispさせる事はできるのでしょうか?
953デフォルトの名無しさん:2012/07/25(水) 14:28:29.78
フーリエとテイラーって本質的にどこが同じなん?
コーシーはローラン展開って言いたかったのだろうか・・・
954デフォルトの名無しさん:2012/07/26(木) 10:12:30.01
フーリエは、任意の関数を三角関数で表現。テイラーも任意の関数を多項式で表現。ということで一応同じ、と考えられるのかも。
955デフォルトの名無しさん:2012/07/26(木) 13:20:17.89

突然の質問失礼します。
今、max関数を使って絶対値の大きいものを抽出しようとしています。
例えば以下のマトリックスaがあるとします。
0.7419 0.4536 0.9377 0.3272 0.2620
-0.7765 -0.0852 -0.7722 -0.2671 -0.1022
0.2525 0.5864 0.5908 0.8265 0.3716
0.6616 0.5367 0.9436 0.5176 0.1288

この場合、max(a)を使うと、以下のような結果が出てきます。
0.7765 0.5864 0.9436 0.8265 0.3716

しかし、自分の場合、絶対値が大きいものをそのまま抜き出したいので
以下のような形にしたいのです。

-0.7765 0.5864 0.9436 0.8265 0.3716

上記のような結果を出すためには、やはりfor構文を使うしか方法はないのでしょうか?
どのようにして求めているのかという、max関数の中身についてはわかりませんが、
少なくとも11行×3000列ほどありますので、for構文で回しても問題はないですが、
上記のようにmax関数ですぐ求めたいです。

何卒宜しくお願いします。
956デフォルトの名無しさん:2012/07/26(木) 13:38:44.17
>>955
abs使えばオッケー
957デフォルトの名無しさん:2012/07/26(木) 13:42:05.16
>>956だけど、問題点しっかり読んでなかった。absじゃ解決しないかも、すまぬ
958デフォルトの名無しさん:2012/07/26(木) 14:14:35.81
ttp://www.mathworks.co.jp/help/ja_JP/techdoc/ref/max.html

>[C,I] = max(...)
>[C,I] = max(...) は、A の最大値のインデックスを求め、出力ベクトル I に返します。最大値をもつ要素が複数あるときは、最初に見つけられたインデックスが返されます。
あとは・・・分かるな

使っている関数がどんな機能持っているか、ちゃんと調べておくと捗るぞ。
今回もmaxの使い方知ってれば自己解決できただろうし、バグ(意図しない動作)を防げる場合もある。
959デフォルトの名無しさん:2012/07/26(木) 16:14:44.20
>>954
つまり、
任意の三角関数を多項式で表現。
任意の多項式を三角関数で表現。
もできる訳ですね。わかります。
960デフォルトの名無しさん:2012/07/27(金) 07:58:26.09
>>955
a(ismember(abs(a), max(abs(a)))).'
>>548より遅いし読みにくいし勧めしないが。

つか最近のマトラボは条件によってはループ速いど。
ベクトライズも度を過ぎると可読性が落ちるし、
今回のはあれだけど、ループ書くのを頭から否定しなくてもいい。
961デフォルトの名無しさん:2012/07/28(土) 00:33:08.60
>>954,959
どもです。

>>955
b = max(a);
c = max(-a);
(b>=c).*b + (-1)*(b<c).*c
でいけない?
962デフォルトの名無しさん:2012/07/28(土) 13:45:31.35
>>960とおなじようなもんだが
a(bsxfun(@eq, abs(a), max(abs(a)))).'
963デフォルトの名無しさん:2012/07/28(土) 14:24:23.98
a(~(Inf>1./(repmat(max(abs(a)),size(a,2),1)-abs(a)))).'
964デフォルトの名無しさん:2012/07/28(土) 15:45:07.38
a = rand(3,7)-0.5
sum(a.^((repmat(max(abs(a)), size(a, 1), 1)./abs(a)).^7777))
965デフォルトの名無しさん:2012/07/30(月) 17:41:07.90
きたねえコードだな
どの括弧がどれと対応してるのか分かりにくいからせめて2行くらいに分けろ
966デフォルトの名無しさん:2012/07/31(火) 22:58:22.71
>>965
おまえだれだよ
967デフォルトの名無しさん:2012/08/01(水) 00:14:48.44
ビルトイン関数がmファイルかコンパイル済みかはどうやって決めてるんでしょうかね?
968デフォルトの名無しさん:2012/08/05(日) 17:03:36.13
dispを使って、変数の表示を以下のようにしたいです。

割合 n %

このnが変数です。何卒よろしくお願いします。
969デフォルトの名無しさん:2012/08/06(月) 01:53:24.21
このスレ、結構な頻度で
したけりゃしろよ
っていうレス付けたくなる書き込みがあるね
970デフォルトの名無しさん:2012/08/06(月) 06:34:24.89
>>968
dispじゃなくて
ttp://www.mathworks.co.jp/help/ja_JP/toolbox/simulink/slref/fprintf.html
こっち使うんじゃないのけ
971デフォルトの名無しさん:2012/08/06(月) 07:54:04.32
>山梨弁乙
972デフォルトの名無しさん:2012/08/10(金) 05:57:24.17
>>955
ind=find(max(abs(a)));
a(ind)
でいけないかな

>>968
fprintf('割合 %d%\n');
973デフォルトの名無しさん:2012/08/10(金) 06:12:21.50
>>890
mae=mean((x(:)-y(:)).^2)
974デフォルトの名無しさん:2012/08/22(水) 22:20:25.03
PDFのマニュアルのバージョン間の変更について質問です。

http://www.mathworks.com/help/techdoc/rn/rn_intro.html
ここのリリースノートなどを見ると、OOP関連について、
2011b→2012aで変更は無いようなんですが、
OOPを含む多くの(すべての?)PDFのドキュメントなどは
表紙が「2012a」となっているようです。

表紙のバージョンだけ上がって、中身は同じということも有るのでしょうか?
975デフォルトの名無しさん:2012/08/26(日) 13:27:33.49
MetaTrader4というC言語ライクのMQL言語という独自言語を使用した
為替等の自動取引ソフトウェアがあるのですが、MATLAB用のDLLを作成し、
MetaTrader4側からMATLABの関数を呼び出したいと考えていますが、
プログラミング能力に乏しい自分にはどのようにして良いか分からず、
途方に暮れておりますが、どなたかご教示いただけないでしょうか。

なお、同じ数値解析用ソフトウェアのRの場合には、MetaTrader4側から
R関数を呼び出すDLLがフリーで公開されているようですね。
https://sites.google.com/site/prof7bit/r-for-metatrader-4
976デフォルトの名無しさん:2012/08/29(水) 21:14:00.62
MacでR2012aなんですが
エディタで日本語のコメントって入ります?
見た目、入力はできてるんだけど、一回保存して再度開くと
日本語のところが全部「?????」って感じでハテナマークになってしまう。
977デフォルトの名無しさん:2012/08/31(金) 11:16:21.28
OS X 10.8.1, Java 1.6.0_33, Matlab R2012a
普段から英語コメントしか使ってないけど、試してみたらちゃんと日本語コメント通ったよ。
978デフォルトの名無しさん:2012/09/01(土) 02:36:09.41
みなさんデータが2次元から3次元になりそうなら
セルにしますか?3次元アレイにしますか?
979デフォルトの名無しさん:2012/09/01(土) 03:57:16.09
>>978
どうゆうこと?具体例がないとちょっとわからない
980デフォルトの名無しさん:2012/09/01(土) 05:06:26.35
980
981デフォルトの名無しさん:2012/09/01(土) 08:18:18.35
>>977
ちなみにそいつをwindowsに持っていくと…?
982デフォルトの名無しさん:2012/09/01(土) 10:48:11.92
>>977
> 普段から英語コメントしか使ってないけど

この部分は必要な情報なの?
983デフォルトの名無しさん:2012/09/01(土) 10:59:26.62
windowsだとシステムロケール変えるとどのフォントでも文字化けするね
984デフォルトの名無しさん:2012/09/01(土) 11:07:56.55
>>983
ですよねー
やっぱり米は英語でつけるしかない
985デフォルトの名無しさん:2012/09/01(土) 11:33:27.18
ro-maji mo ii yo !
986デフォルトの名無しさん:2012/09/01(土) 13:42:32.38
次々とコンソールに文字列(行末改行)を表示するプログラムで、
最初はコンソールが勝手にスクロールされていって、
最新の文字列が一番下に表示されていくのですが、
不明なタイミングでコンソールの自動スクロールが止まってしまいます。@2011a win64

解決法はありますか?
987デフォルトの名無しさん:2012/09/01(土) 22:29:08.84
すみません
ステレオで収録されてるwavファイルを読み込んでフーリエ変換とかをする時って、2列まとめてやっていいんですか?
例えば、
チャンネル数が2のステレオのファイルexample.wav
x=wavread('example.wav');
でxに読み込んだら、xは○行2列になりますけど、これにfftをかけるとしたら
fft(x)でいいんですか?
それともfft(x(:,1))として別々にやってから統合するんでしょうか?
988デフォルトの名無しさん:2012/09/01(土) 23:37:36.91
別々にやってから統合
989デフォルトの名無しさん:2012/09/02(日) 01:31:36.27
いや、一気にやっても良いよ
たしか列ごとの○行2列の複素fftが返るだろ
そっちのほうが速いし
990デフォルトの名無しさん
>>988-989
教えてくれてどうもありがとうございます!