1read 100read
2011年12月1期プログラム47: MATLABプログラミング 質問箱 その3 (676) TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
48: VBプログラマ質問スレ(Ver.6.0 まで) part57 (759)
49: Microsoft Silverlight その9 (63)
50: 【iPhoneも】Titanium Mobileスレッド【Androidも】 (25)

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


1 :09/10/03 〜 最終レス :11/12/09
MATLAB 日本語版
http://www.cybernet.co.jp/matlab/
MATLAB 本家
http://www.mathworks.com/
Yahoo MATLAB
http://dir.yahoo.co.jp/Science/Mathematics/Software/MATLAB/
MATLAB入門
http://feedback.mech.fukui-u.ac.jp/matlab/matlab0.htm
MATLAB チュートリアル
http://www-isys.eei.metro-u.ac.jp/~sho/pub/ttmatlab/Index.html
前スレ
MATLABプログラミング 質問箱 その2
http://pc11.2ch.net/test/read.cgi/tech/1163125702/

2 :
>>1
乙!

3 :
Figureのエクスポートの設定で「図の端まで軸を拡張」というのがありますが、
これのオンオフをプログラムから変更するにはどの関数を使えばよいのでしょうか?

4 :
DirectXはサポートしていますか?

5 :
最近仕事で使う事になりそうなんですけど
これが何の役にたつのかわかりません。。普段Cプログラマなんですけど。
フリーの類似ソフトで自宅で勉強しようと思うのですが
オススメ教えてください

6 :
octave

7 :
Matlab超初心者です。
データのインポートについて教えてください。
355x165の行列データ(csv形式)をインポートウィザードを使って取り込もうとしているのですが、
なぜか353x165のデータしか取り込むことができません(最後の2行が取り除かれる)。
どうやったら全データを取り込めるでしょうか。
よろしくお願いします。

8 :
load('filename')

9 :
リアルタイムでビデオカメラから入力している映像を
90°,180°など指定した角度だけ変化させて映像を表示させるプログラミングを
教えてください。
よろしくお願いします。

10 :
入力部分はできてるの?
それならあとは簡単だけど

11 :
9です。
ただ表示させるだけ(0°)ならできています。
あとImage Processing ToolboxやImage Processing Toolboxなどを
積んでいますが使うのでしょうか?

12 :
2次元の情報を3次元的に使える?

13 :
matlabに触れたことがないので何もわからない状態です・・・
上記の入力部分とありましたが、使い方もわからずただpreview()とか書いてパソコンに表示
させただけです・・・
1からプログラミング内容を書いてもらえないでしょうか?

14 :
>>9
a <-これにイメージ情報が入っているとして、
a=a'
これで90度回転するよ

15 :
棒状のものを表示したいのですが、どのプロットが最適でしょうか?

16 :
wavファイル保存についてなんですが
ファイル名を(ファイル名)001〜ってどうやるんですか?
録音したものを連番で次々保存していきたいんですが

17 :
>>16
初心者だけど、numに連番入れるとして
wavname = [ '(ファイル名)' num2str( num, '%03d' ) '.wav'];
こんなとか、
wavname = sprintf( '(ファイル名)%03d.wav', num);
こんな感じかな?

18 :
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 :
do-whileってmatlabに無いの?

20 :
マッチョラボだと入るのに勇気がいるよね( ・ω・)y─┛〜〜

21 :
>>19
ttp://newsgroups.derkeiler.com/Archive/Comp/comp.soft-sys.matlab/2006-01/msg04384.html

22 :
>>21
kwsk

23 :
>>22
hi
one of the solutions:
t = true;
while t
t = some_condition;
end

24 :
MATLAB R2009aを使っているのですが、たとえば
A=[1 3.5 5]; B=[-3 5.7 -5]; C=[4 4 8];
のようなプログラムを入力したとき、空白をタブキーで区切ると、空白の幅が一定にならないのが気持ち悪くって悩んでいます。
空白の幅を一定にするにはどうすればいいのでしょうか?

25 :
タブとはそういうものだと思うが

26 :
>>24
空白をスペースで入力すれば?

27 :
初歩的な質問で申し訳ないんですが、
A=imread('test01.jpg');
で画像を取り込んで
image(A)
で表示するのはできたんですが、
表示された画像の任意の場所をクリックして、そのクリックされた座標を調べるにはどうしたらいいでしょうか?
やりたいことは、2点の点をクリックして座標を出し、その2点間の距離を求める ということです。

28 :
>>27
ginput

29 :
ランダムな行列から
○列目の値が△である行を全て抽出して
新たな行列を作るはどうしたらいいでしょうか?
誰か教えてください

30 :
なんかR2009bにしてからしょっちゅう固まる…何故だろう

31 :
> 29
ind = hogehoge(:,○)==△;
hogehoge2 = hogehoge(ind,:)

32 :
>>31
findが必要なんじゃないの?
ind = find( hogehoge(:,○)==△);

33 :
>>31-32
ありがとうございました
成功しました

34 :
関数ではない波形、例えば地震波形などを積分したい場合は自前で台形公式
などを作って積分するしかありませんか?
trapez やquadは対象が関数の形になっているものしか無理っぽいのですが。
よろしくお願いします。

35 :
そういう時系列データなら、
sum(data)*dt
じゃだめなの?

36 :
xlswriteを使ったプログラムを作ってます。
動作自体は問題ないのですが、xlswriteを呼び出した回数だけプロセスにEXCEL.EXEが残ってしまいます。
正しくプロセスを終了させる工夫はあるのでしょうか??

37 :
>>34
trapzでいけるはずだ。台形近似で定積分できる。
tはサンプリング時間、wはその時点での値。tは等間隔じゃなくってもいける。
 s = trapz( t,w );

38 :
>>32
findいらないよ

39 :
個人的覚え書き
秀丸で、matlabの' 'を文字定数にしたい場合
'.*'では
アポストロフィー演算子の扱いに困るので前方不一致を使って
(?<!\))'
だと(1 2)'とかを避けてうまくいくようだ。

40 :
inputdlgから取得した文字列がanswerに格納されていると思うんですが
str2num(answer(1));
といった感じで文字列から数値に変換しようとすると
『文字列を入力してください』
といった類のエラーが出ます。
色々と試してみましたが解決できませんでした。
よろしければこの解決方、あるいは
この文字列を数値に変換する他のすべを教えて頂ければと思います。

41 :
40ですが自己解決しました
inputdlgの戻り値がキャラ型じゃないというだけでした
こんな簡単なことにも気付かなかったなんて……
ググレカスな質問をしてしまい、申し訳ありませんでした

42 :
(x,y)のような位置情報データをfigureにマップのように表示したいのですが、そのような方法はありますか?

43 :
ありますよ

44 :
マットラブ エックスポ 20009 行ってくるぜ

45 :
mexファイルを使おうとしてコマンドプロンプトでmex -setupと打つと、
1にはlcc
2にはNone
となってしまってVC++が選択できません。
VC++はインストール済みです。何が問題なのでしょうか?

46 :
>>45
そもそも普通にVCは使えているのですか?環境変数が設定されていないのでは?MSVCDirとかさ。
直接、VCをつかうようにするには
C:\Documents and Settings\(ログイン名)\Application Data\MathWorks\MATLAB\(リリースバージョン)
のフォルダーにmexopts.batがあるから、そこにVCの設定にすればよいはず。
最適化のオプションも設定後、自分でこのパラメータを変更すればよい。

47 :
>>46
VC(2008)は普通に使えています。
matlabも普通に使えています。
MSVCDIRは設定されていませんでしたが、VS90COMNTOOLSが設定されていました。
MSVCDIRをユーザー/システム環境変数にC:\Program Files\Microsoft Visual Studio 9.0\VC\binと設定し、
setupを試しましたが現れませんでした。(再起動が必要?)
mexopts.batに関してはCompiler parametersの辺りを変更するということでしょうか?
ただ、環境変数のパスのあたりをどう設定してよいか・・・

48 :
>>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 :
>>48
こちらもmatlabは7.1でしたので、デフォルトではmsvc90opts.batはありませんでした。
ネットで探してみたところ本物かはわかりませんが見つけたので、
試したところコンパイルできるようになりました!
色々とありがとうございました。

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 :
>>50には来週から営業をやってもらおう

52 :
>>50
お前の頭、機械以下じゃね?

53 :
matファイルの中身(変数名やその値など)が全くわからないとき、
何かしらの方法で出力できませんか?
専用の閲覧エディタや出力するスクリプトなど・・・

54 :
MATLAB 変数名でググった4つ目

55 :
VC2008で作ったものをMatoabでMexしようとしたら、「windows.hが見つかりません」と出たので、パスを設定したつもりなのですができませんでした。
パスの設定方法は「ファイル→パスの設定」でやったのですが、やり方が違うのですか?

56 :
windows.hなんて必要ないんじゃないの?

57 :
説明少なくてすみません。
C++でDirectSoundで再生するものを作り、それをMexしようとしました。
そこでwindows.hをincludeしました

58 :
maxで最大値を出すことはわかるんですが
最大値の位置を求めるにはどういうコマンドを使えばいいのでしょうか?
例えば
A=[2 52 5 9 20 32];
B=max(A)
B=52
ここで位置を求めるコマンドを使って
A(1,2)が最大値だということが知りたいわけです。

59 :
maxのリファレンスを見ましょうね。

60 :
[B,pos] = max(A)
でいいんじゃないの?

61 :
mファイル内で音楽を再生させてから表示させる時、
a=100;
sound(S,fs);
a
とすると再生と同時に表示が行われてしまいます。
これを再生が終わった時に表示するようにしたいのですが、どうすればいいですか??

62 :
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について繰り返したいのですが、どうしたら良いのか分かりません。

63 :
続きです
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 :
>63
cd FolderName
だとFolderNameが変数じゃなくてリテラルとみなされるようで
cd(FolderName)
だと変数として扱われるようです。

65 :
関数f(t)と時間反転した関数f(-t)の畳み込みって自己相関に等しいですよね?
matlab上で、
  conv(f(t),f(-t))  と xcorr(f(t))
が等しくならないのはなぜでしょうか?
また、この方法が間違ってる場合、f(t),f(-t)を用いて自己相関を表現する方法があれば教えていただけないでしょうか

66 :
>>64
できました。
ありがとうございます!

67 :
>>65
携帯からだから説明面倒だからしないけど、
とりあえずyahooで「MATLAB conv」で検索すれば法政の小林研究室の講義資料がトップに出てくるはずだから、それを読めば幸せになれるよ。

68 :
>>67
自分の頭では同じと書いてあるようにしか読めませんでした……
自己相関の場合conv(f(t),f(-t))でいいと書いてるようですが……

69 :
連投すいません
整数で試してみたら出来ました
今やってるのはデータが複素数なので、そのあたりに原因がありそうな気がします

70 :
MATLABについて質問なんですが、
私が今回作ったプログラムにかなり大きいfor文がありまして、いざデバッグしてみると、エラーも吐かずちゃんと動いてるのですが明らかにおかしい結果が出てしまうのです:
そこで、MATLABにはブレークポイントという便利な機能があるって聞いて、使ってみたらとてもすばらしい機能でした^^;
しかし、行が多くなるにつれてクリックするのがめんどい…w だれかこれを一気に全行に設定できる機能orコマンド知りませんか?
私の環境はWindows XP Pro MATLABR2006aです;
どうかご教授くださいー!;

71 :
>>70
教授ではないので教授できません。

72 :
全行にブレークポイント入れたら今度はデバッグ時に
更なるクリック連打になって余計面倒な気が…

73 :
ループごとにtest1、test2、test3...と変数の最後の数字を変更して変数を作りたいのですがどのようにすればいいのでしょうか?

74 :
>>73
ループでカウントアップする変数と
'test'って文字列をくっつけてevalすれば良いと思うよ

75 :
>>74
変数の中身をtest1...としたいのではなく、変数として宣言したいのですがそれもevalで可能ですか?

76 :
>>75
やじうまです。変数をプログラム実行中につくるわけですよね。で
それは、何に使うのでしょうか?配列とかでは代用できないのでしょうか?

77 :
>>76
配列でも代用は出来るのですが、すでに2次元配列になっていて3次元にするとややこしくなるかなと思いまして
使えれば便利だなと思ってる程度で、絶対に必要というわけではないですね、すいません
使い方としてはループごとに新しい変数に2次元配列を格納するといった感じでしょうか
1ループ目はtest1に、2ループ目はtest2に...といったイメージです

78 :
>>77
「matlab eval」でぐぐって最初のところ(これ、マニュアルかな)にある例をみると
代入文のevalもできるみたいですね。

79 :
>>77
それを文字列+ループナンバーで合成した新しい変数に
ぶっこむと、あとあとの処理を書くのが面倒くさくなる気がする。
変数名リストを作っておいて、まいどまいどeval、とか。
やたらと変数がとっ散らかって美しくないし。
3次元配列とか構造体でいいじゃない。

80 :
randを使って乱数を発生させているのですが、プログラムを実行するたびに同じ乱数を発生させてしまいます
実行するたびに違う乱数を発生させたいのですがどうすればいいでしょうか?知恵をお借りしたいです

81 :
>>80
会社じゃないとMATLABがないので確認できませんが
適当に検索したR13のマニュアルによると
「randは、実行するたびに異なる値を出力します。」
だそうです。
自分の記憶でも、そうなっていたような。
手元にあるFreeMat V3.6だと毎回違う出力になりますが、
なんの参考にもならないですね…

82 :
>>80

83 :
>>80
rand('state',0)で最初の状態にリセット
rand('state',j)でj番目の状態になる。
jを固定すれば、毎回、同じ一様乱数を発生する、だと思う。
乱数と言っても疑似乱数ですから、ある周期のどこかを取ってきているだけですので、こんな感じになるんだと思います。

84 :
randのアルゴリズムってどうなってんの?

85 :
rand('state',sum(100*clock));
と書くと毎回ランダムになると聞いたのでプログラムに追加してみたのですが、何も変わりませんでした
置く場所はrandを使う直前じゃないとダメとかそういう決まりがあるんですかね?
プログラムの内容が変わると違う乱数になるみたいですが、結局またその乱数で固定されてしまいます

86 :
>>85
> rand('state',sum(100*clock));
これを最初に1回だけ実行すれば、時刻で初期化されて違う系列の乱数に
なりそうですけどね。
やっぱり、ことばで説明するよりソースをあげた方が解決が早いかも。

87 :
rand('state',sum(100*clock)); の場所を変更したら毎回違う乱数を発生させてくれるようになりました
回答してくださった皆さんありがとうございました

88 :
初歩的なことで申し訳ないですが、方法が上手く検索できなかったので質問させてもらいます
たとえば20個あるデータをAとして、その平均を取るときは
 mean(A)
でいいと思うのですが、
間の10番だけ飛ばして平均を取る、といったような事は出来るのでしょうか?
1〜9、11〜20を足して19で割り、平均したいのですが

89 :
mean(A([1:9 11:20]))
こんな感じかもしれない

90 :
>>89
やってみたら出来ました!
そんなところに括弧つければよかったんですね、知りませんでした

91 :
質問です
Genetic Algorithm and Direct Search Toolboxで組合せ最適化問題を解きたいのですが、
整数であるという制約はどのようにしたらいいですか??
c<=0 ceq=0でしかできないのでどうしたらいいか困っています
よろしくお願いします

92 :
最適レギュレータで質問です。
A=[1 0;2 -1]
b=[1;0]
c=[1 -1]
Q=[1 0;0 1]
r=1
設計したいのですが「lqr」を使ってプログラムを組んでみたのですがエラーが出てしまいます。
教えてください。お願いします。

93 :
デフォルト値はどのファイルに書けばいいのか?

94 :
配列の中の最大値はmaxで求まるのですが、
配列の中の最大値の場所を調べる関数と言うものはあるのでしょうか?
今はfor使って探していますが、関数としてありそうな気がしたので質問させてもらいました

95 :
>>94
maxでできる
help maxで確認してください

96 :
質問です
(x,y,R,G,B)のimageで扱えるようなデータがあり、
そのデータを(x,y)がある多角形の中に入るものだけプロットさせたい
と考えています
これって可能でしょうか

97 :
>>94
>>58-60

98 :
>>96
可能ですけど。

99 :
>>97
一度されていた質問をしてしまって申し訳ない……
しかし助かりました、ありがとう

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
48: VBプログラマ質問スレ(Ver.6.0 まで) part57 (759)
49: Microsoft Silverlight その9 (63)
50: 【iPhoneも】Titanium Mobileスレッド【Androidも】 (25)