トップページ⇒tech
1001コメント336KB

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

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさんNGNG
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
0809ゆーき2006/06/26(月) 00:02:49
みなさんありがとうございます。
ちなみにmatlabでsubplotを保存するにはどうするのですか?
あと、できれば
>>777 >>792
の質問も見て欲しいです。
お願いします。
0810デフォルトの名無しさん2006/06/26(月) 00:03:56
>>808
ノシ

>>802
gsetでterminalとoutputを予め設定してからplotしてみたら。
0811デフォルトの名無しさん2006/06/26(月) 02:36:55
>>808
Universal 対応してないから使ってない
0812ゆーき2006/06/26(月) 18:38:29
>>810
gset term postscript enhanced;
gset output "a.eps";
replot;

としているのですがterminalの設定方法がわかりません。教えて下さい。
0813デフォルトの名無しさん2006/06/26(月) 19:42:31
>>812
subplotはgnuplotのmultiplotモードを使う。

gnuplotはmultiplotモードではterminalを変更できない。

従ってsubplotコマンドを使用する前に
terminalとoutputを変更すればOKのはず。

これが希望する解決策でないことはわかるけど
エレガントな解決方法はわからない。

0814ゆーき2006/06/26(月) 20:00:48
>>813
とてもありがとうございます。自分はエレガントなど求めておりませんので保存で
きればけっこうです。

ただ1つ問題が。。。


terminalとoutputの変更の仕方が分からない。。。(ハイパー素人のため)

subplotとしてではなくてグラフ1つずつ保存すると言うことでしょうか??
お願いします。
0815デフォルトの名無しさん2006/06/26(月) 20:16:28

gset terminal postscript eps
gset output "test.eps"
subplotとplot色々
gset nomultiplot
gset terminal x11
これでtest.epsに保存できる。
0816813=8152006/06/26(月) 20:39:17
813, 815の回答はOctaveね。MatlabならGUIでできるでしょ。
0817ゆーき2006/06/26(月) 21:20:06
octaveですのでその方法でやってみます。
ほんとにありがとうございました!!!!
0818デフォルトの名無しさん2006/06/27(火) 09:18:28
Matlab 2006bマダー?
0819ゆーき2006/06/27(火) 13:36:05
>>815
保存できました!!!!ありがとうございました!!



。。。が!!!事件です!!!!!グラフがほぼ壊滅状態に陥るほど劣化してしまい使えません。orz
やっとできたと思ったのに。。。

誰か救いの手をさしのべて下さい。
ちなみに
>>777 >>792
も見てもらえると有り難いです。
0820813=8152006/06/27(火) 18:44:33
>>819
私はエスパーではないのでry

octaveについてはUNIX板か数学板の
octaveスレに
行けば詳しい人もいるかも。
0821ゆーき2006/06/27(火) 20:06:04
>>820
ご親切ありがとうございます!!!
頑張ってみます!!
0822デフォルトの名無しさん2006/06/29(木) 19:27:48
                  1
      /|
___/ |   ____ 0
       |  /1
       |/
       0          -1

みたいなグラフを描く場合、どういう風に記述すればいいんですか?
途中で切り替える場合が出来ません。
ifを使って、
if -1<= t < 0
a=1;
b=1;
elseif 0 <= t < 1
a=1
b=-2
end
x = a*t + b
みたいな感じで記述したらどうかなーと思ってたんですが
値が後者に固定されてしまい全く出来ません

助けてください><;
0823デフォルトの名無しさん2006/06/29(木) 20:29:45
「0<=t<1」は「0≦tかつt<1」の意味にはならない。

「0<=t」がまず評価され0か1に置き換えられ、
「0<1」または「1<1」が評価される。

お前の意図どおりの結果を得る式は「0<=t && t<1」。


しかしグラフを描くには、t=-2:1/256:2みたいな入力に
対応できないと困らないか?
そのためには条件分岐を使ってはいけない。

isbitween01 = 0<=t & t<1;
x(isbitween01) = t(isbitween01) + 1;

みたいに書くべし。
0824デフォルトの名無しさん2006/06/29(木) 22:34:00
窓関数を使おうとしてるんですけど、
hamming(sample_point)
は使えるんですけど
hanning(sample_point)
だとscript hanningを関数として使ってください
みたいなことがエラーで出ます。
初心者ですいません。
教えてください。
0825デフォルトの名無しさん2006/07/01(土) 00:01:26
ハニング窓関数はhann
0826デフォルトの名無しさん2006/07/04(火) 23:30:18
hannで大丈夫でしたー。
でも、窓関数関数自体のスペクトルがうまく出力できないー。
0827matlabとC言語について2006/07/06(木) 14:26:08
matlabからC言語で書いた関数をリンクさせたり参照したりすることは可能でしょうか?

フリーのscilabはlink可能だったのですが研究でmatlabを用いて数値計算をしたいと考えています.
よろしくお願いします.
0828デフォルトの名無しさん2006/07/06(木) 15:09:45
できるよ。mexってのを調べてみるといい。
0829ゆーき2006/07/07(金) 11:43:23
どなたかc-splineのcsapeを使って曲線を描くときのcsape(x,y,conds,valconds)の
valcondsにいれるべき値とはどういったものかお教えください。お願いします。
0830デフォルトの名無しさん2006/07/07(金) 12:41:50
すみません。質問です。
OBB(Oriented Bounding Box)で、物体頂点群から、
主成分分析をもちい(共分散行列つくって固有ベクトル)、
3つの軸を見つけることができたのですが、

直方体の物体に対する第一成分の軸が、最長の対角線上
になってしまいます。こうなるとAABBより悪い。。。

あとで考えてみると、確かに普通に適用するとそうなるのは
わかったのですが、外国の論文みてると、どうやらこれを回避
する方法があるらしいのです。
ただ、英語がよくわからないので、もう一歩が読みきれません。
あとなにかのアイデアひとつと思うですが、
ポイントを教えてください。
0831デフォルトの名無しさん2006/07/07(金) 15:43:26
>>830
スレ違い。あとマルチいくない
0832デフォルトの名無しさん2006/07/07(金) 16:08:27
>>831
すみません。撤回します。しかし、よくマルチって
わかるなぁ。全部マイナーなスレにのっけたのに。
0833デフォルトの名無しさん2006/07/07(金) 16:12:17
>>832
検出するソフトがある
0834デフォルトの名無しさん2006/07/08(土) 13:33:34
matlabで音声を再生しながら
プログレスバーを移動したり、再生部分の時刻を表示する
ことは可能ですか?
0835デフォルトの名無しさん2006/07/08(土) 13:50:24
>>833
そのまでやるのか・・・キモ
0836デフォルトの名無しさん2006/07/08(土) 14:18:46
        ∩___∩
. \     | ノ      ヽ
   \  /  ●   ● |
     \|    ( _●_)  ミ 
      彡、   |∪| ,/..
       ヽ   ヽ丿/  /⌒|
       / \__ノ゙_/  /  =====
      〈          _ノ  ====
       \ \_    \
        \___)     \   ======   (´⌒
           \   ___ \__  (´⌒;;(´⌒;;
             \___)___)(´;;⌒  (´⌒;;  ズザザザ
0837デフォルトの名無しさん2006/07/08(土) 16:49:02
IIRフィルタ(2次)で、周波数を山形波形で出力させたいのですが、関数をどのようにしたらいいのでしょうか?
0838デフォルトの名無しさん2006/07/10(月) 08:56:09
周波数を山形波形で出力させられるように係数を決める。
0839デフォルトの名無しさん2006/07/14(金) 23:41:48
2006aで何が変わったの?
0840デフォルトの名無しさん2006/07/15(土) 09:32:37
バージョンが変わった。
0841デフォルトの名無しさん2006/07/15(土) 15:05:24
なるほろけっと
0842デフォルトの名無しさん2006/07/16(日) 14:09:33
FFTした後の振幅って、その中のピークで規格化するのが一般的なんですか?

実際のパワースペクトル密度を得たいときはどうすればいいんですか?

勉強不足ですいません。よろしくおねがいします。
0843デフォルトの名無しさん2006/07/16(日) 23:48:21
PERIODOGRAMあたりのドキュメントを読むべし。
0844デフォルトの名無しさん2006/07/17(月) 20:56:13
ありがとうございます。
やってみます。
0845デフォルトの名無しさん2006/07/19(水) 02:29:48
periodogramじゃなくて、FFTしたものにサンプルリング周期をかけてやることで
連続時間フーリエと同じ結果になりました。
0846デフォルトの名無しさん2006/07/21(金) 06:14:31
Matlab R2006aのSimulinkで下記のようなモデルを作成するとします。

●モデル:
Test.mdl
Test/Subsystem
Test/Subsystem/ConstantA
Test/Subsystem/BlockB

構成は、Subsystemのブロックパラメータで変数Aに値1を設定し、
ConstantAに変数Aを設定します。
ConstantAはBlockBにつなげてBlockBの入力にします。

コンフィグレーションはタイプ:固定ステップ、ソルバ:離散、固定ステップ:0.01
としてます。

●質問:
ここでシミュレーションを実行すると、時間ゼロではConstantAの変数A=0(NaN?)
がBlockBに入力され、次のステップでA=1がBlockBに入力されているようなので
すが、これを時間ゼロからBlockBにA=1が入力されるようにすることはできるの
でしょうか。

BlockBはS-Function(Level2 Mファイル)で、変数Aで割り算しているところがあ
るのですが、当初動作確認のためBlockBのブロックパラメータで変数Aを設定
して問題なく動作していたため、上記のように時間ゼロ時に変数Aで割るとゼロ割
になってしまいます。BlockBで工夫すればゼロ割は避けられますが、プログラ
ムの都合上時間ゼロでConstantAの変数Aが確定している方が良いです。

なお、実際作成しているモデルはブロックパラメータが複数有り、複数のConstant
出力をMuxしてBlockBに入力しています。
0847デフォルトの名無しさん2006/07/21(金) 15:32:08
MATLAB初心者中の初心者です。起動の仕方と簡単なコマンドしかわかりません。
今回、エクセルのデータ(xとyの値が50個ずつくらい)をMATLABでプロットしたいんですが、
データの読み込み方もそれをプロットするやり方もわかりません><
webで調べても難しいことばっか言っててわかんなかったです…
こんな私にどなたかご教授ください〜
0848デフォルトの名無しさん2006/07/21(金) 18:23:32
むりむり。
0849デフォルトの名無しさん2006/07/21(金) 21:37:09
>>847
氏ね
0850デフォルトの名無しさん2006/07/21(金) 22:52:46
>>846
うまくいくかわかりませんが,IC(初期値を設定するブロック)を
ConstantとS-funの間に挿入してはどうでしょうか。
http://www.cybernet.co.jp/matlab/support/manual/r14/toolbox/simulink/slref/ic.shtml



>>847
つ ささやかなヒント
http://www.cybernet.co.jp/matlab/support/manual/r14/toolbox/matlab/matlab_prog/ch_impo6.shtml#173379
0851デフォルトの名無しさん2006/07/21(金) 23:44:32
>>847
皆に酷評されてるけど それくらい自分で努力せにゃあかんよ
最低だぞー
08528472006/07/24(月) 11:46:38
初心者中の初心者ですよ…850さんのリンクは以前から何度も見ていますが、
さっぱり何を言っているのか泣
今回はしかたなく、エクセルのデータをテキストデータにして、

a=dlmread('データ')
x=a(:,1)
y=a(:,2)
plot(x,y)

ってやりました。

問題は、
x1 y1 y2 … yn

x2 y1 y2 … yn

x3 y1 y2 … yn
:
:
っていうデータで、x1とx2の間のxは等間隔でy1〜ynと対応しています。
これをきちんと、xとyのグラフにプロットするにはどういうふうにしたらいいんでしょうか。
バカかと思われてもしかたありませんが解決策を教えてください…
0853デフォルトの名無しさん2006/07/24(月) 12:06:02
はぁ?対応してるんだったら
x1 y1
x2 y2
x3 y3
.
.
xn yn
じゃねーの?
0854デフォルトの名無しさん2006/07/24(月) 12:13:58
説明が下手でした。
x1とx2の間が等間隔なんですが値がなく、それとy1〜ynが対応してるんです…
XYDATA=(X++(Y..Y))
っていう…。それをきちんとxとyのグラフにプロットがしたいんです
0855デフォルトの名無しさん2006/07/25(火) 22:59:11
>>850
回答ありがとうございます。私が作成したMファイルに問題があったようで、
直接フィードスルーがfalseになったままだったのが原因でした。
trueにしたところ無事t=0で入力端子からの値が確定しています。
ただ、t=0の一回のみ実行のファンクションInitialConditionsやStartでは
入力端子からの読み込みはできないようで、結局Outputsファンクションで
block.CurrentTime==0のときだけ入力値から初期化するようにせざるを得
ないようです。Startで入力値で初期化できたらスマートだったのですが。
なお、ICはt=0のときのみ値を変えたい場合に利用できるようで、ひとつ勉
強になりました。
0856デフォルトの名無しさん2006/07/26(水) 23:30:18
>>852
xnにones()を掛ければ、ynと同じサイズ になるよw

あとは行ごとに列ベクトルに変換して、 cat()で Endかな?
0857デフォルトの名無しさん2006/07/27(木) 16:36:23
matlabで年間の利率5%で100万を10年預けたらいくらになるかって
プログラムどうやって作るの?
0858デフォルトの名無しさん2006/07/27(木) 20:24:42
>>857
^
0859デフォルトの名無しさん2006/07/28(金) 01:49:52
2つの信号のmagnitudeどうしとphaseどうしを
subplotで別のウィンドウに表示するには
どうすればいいか教えてください…
0860ど素人2006/07/28(金) 01:59:56
参考書にてわからない問題がありました。次のプログラムって日本語でどう説明できますか?
ぜひお願いします。
A=new Array(3, 8, 19, 20, 22, 24, 45);
i=0;
j=A.length-1;
a=19;
k=Math.floor((i+j)/2);
while(i<=j){
if(A[k] == a){
break;
}
else if(A[k] > a){
j = k - 1;
}
else{
i = k + 1;
}
k = Math.floor((i+j)/2);
}
if(i>j) k=-1;
document.write(a," ",k);

0861デフォルトの名無しさん2006/07/28(金) 02:42:56
>>860
なぜ matlab スレ?
0862デフォルトの名無しさん2006/07/28(金) 02:44:55
>>860
マルチ&板違い
死ね
0863デフォルトの名無しさん2006/07/28(金) 08:45:14
>857
1000000 * 1.05^10
0864デフォルトの名無しさん2006/07/28(金) 10:31:20
いまどき5%の利回りってありえないんだけど
0865デフォルトの名無しさん2006/07/28(金) 15:31:48
1000000 * 1.0025^10
0866デフォルトの名無しさん 2006/07/28(金) 23:12:24
>>859
悩み意味不明。
0867デフォルトの名無しさん2006/07/29(土) 15:21:30
ある無限ループの処理を実行させてて、ボタンを押したら
止まるというプログラムを書きたいのですが、
その場合、どの部分でも止めたらいいわけでなく、排他制御というか
ある箇所までは絶対に処理を行って欲しいのですが、
このようなプログラムはMATLABで可能ですか?
0868デフォルトの名無しさん2006/07/30(日) 05:06:17
>>867
ボタン押したときにフラグ立てて
終了したいところで判定すればいいんじゃない?
0869デフォルトの名無しさん2006/07/30(日) 05:09:17
わかった。
08708592006/07/30(日) 13:20:36
>>866
すみません、元の信号と、フィルタ処理をした後の2種類の信号があって、
周波数を横軸にしたmagnitudeのグラフを2種類並べたfigure1と、phaseのグラフを2種類並べたfigure2を別々に表示させたいんです。
1つの信号の周波数特性自体はfreq関数で表示できるのですが、上記のようにして利得と位相どうしを比較するfigureを作りたいです。
0871デフォルトの名無しさん2006/07/30(日) 14:38:02
>>870
hold と subplot の組合せで
08728592006/07/31(月) 19:05:09
レスありがとうございます。
holdだと重ねて表示されてしまいますね、縦に並べて表示したかったんですが…。
でもありがとうございました!
0873デフォルトの名無しさん2006/08/01(火) 00:29:36
subplotも教えてもらってるじゃん
0874デフォルトの名無しさん2006/08/01(火) 14:53:42
matlabでRのパッケージを使うことはできるでしょうか?
MATLAB R-linkでRの関数は使えるようになったんですが。
0875デフォルトの名無しさん2006/08/01(火) 15:07:58
epsで保存したときに、画面上で見た状態と違う形(文字の場所など)で保存されるのは、仕様ですか?
0876デフォルトの名無しさん2006/08/01(火) 16:56:55
>875
仕様です。
画面表示と印刷(含EPS)では違う描画ルーチンを使っているようで、
グラフのグリッド幅なんかも違ってきますよね。
0877デフォルトの名無しさん2006/08/02(水) 20:49:02
Symbolic Math Toolでindicator fuctionって作れますか?

uをsymbolとして、
if u >= 1, a=1
else a=0
end
みたいなことをやりたいんですが。。。
こんな感じでやると「'>='は'sym'classには定義されてない」って怒られます。
0878デフォルトの名無しさん2006/08/05(土) 21:42:28
質問じゃぁないけど
forル−プ+textreadで、20Mのテキストデ−タを読ませたら
完了するまで約5Hかかった。(tic toc 計測)
即刻、forル−プはずして、textreadのオプション使用したら
約2minで完了。
MATLABのforル−プは怖っ。
0879デフォルトの名無しさん2006/08/08(火) 12:41:37
正規のライセンスじゃないとそうなります。
0880デフォルトの名無しさん2006/08/08(火) 20:22:38
嘘は言ってないが
正規のライセンスでもそうな(ry
0881デフォルトの名無しさん 2006/08/08(火) 21:07:05
ライセンスの問題じゃあない。

for...endはBigSizeのデ−タ処理には向かない。
PCのパフォ−マンスで改善はされるけど。
使わないのが賢明。
工夫。工夫。 さ。
0882デフォルトの名無しさん2006/08/11(金) 23:38:16
mexの作りかたの初心者向け解説を教えとくれ。とりあえずとり昔のcプログラムをmex化できればよい
0883デフォルトの名無しさん2006/08/15(火) 23:29:00
こことか?
ttp://wwwcs23.cs.kobe-u.ac.jp/~mori/Matlab/mexmemo.html
0884デフォルトの名無しさん2006/08/17(木) 11:42:19
MATLAB Compilerで
mcc -m xxxx.m
とコンパイルしたファイル群をMATLABのないPCで実行しようとすると
「MCLMCRRT74.DLLが見つかりません」
と言われるんですが、どうしたらいいんでしょう。
問題のDLLは見つかったんですが、同じディレクトリに入れて実行すると
エラーメッセージさえ出さずに異常終了します。
MNTALABは7.2.0.232 (R2006a)、MCCはV4.4 (R2006a)です。
0885デフォルトの名無しさん2006/08/17(木) 11:45:23
言い忘れましたが、コンパイル側も実行側もWInXPです。
0886デフォルトの名無しさん2006/08/17(木) 21:52:46
ガンガレ!!
ttp://www.cybernet.co.jp/matlab/support/techkwdb/search_view.php?id=1399
0887デフォルトの名無しさん2006/08/29(火) 15:04:23
Matlab初心者ですが。
Mファイルを人からもらってそのソースコードを見たいのですが、Editorで開いても文字化けして見ることができません。誰か教えて下さい。よろしくお願いします。
0888デフォルトの名無しさん2006/08/29(火) 19:51:52
ノートパッドで見れますん
0889デフォルトの名無しさん2006/08/29(火) 21:02:58
mccで作成したスタンドアロン実行ファイル実行時に展開される
*.mファイルは、暗号化されている。
0890デフォルトの名無しさん2006/09/02(土) 16:49:54
伝達関数からIIRフィルターの係数を直接求める方法知りませんか?

(s^2 + Xs + 1)/(s^2 + Ys + 1)みたいな伝達関数から

B=[なんたらかんたら]
A=[うんたらちんたらら]

みたいに一発でもとめたいんですけど。


0891デフォルトの名無しさん2006/09/02(土) 22:45:32
>>890
マルチポスト乙
0892デフォルトの名無しさん2006/09/03(日) 01:01:00
MATLABで演算子の定義ってできるんでしょうか。
例えばインクリメントの++をMATLABでも使えるようにするとか…
すでに存在するの2項演算子の「+」ならplus関数をオーバーライドすればいいみたいですが、
存在しない演算子を新たに定義することは可能なんでしょうか。
0893デフォルトの名無しさん2006/09/03(日) 18:56:03
>>891
答えられない香具師は書かなくていいです。わかりやすく書ける人だけ書いてください。
0894デフォルトの名無しさん2006/09/04(月) 01:13:17
sinc関数に窓関数がかかった波形の面積を積分して求めたいんですが、
何かいい方法はないでしょうか?
よろしくお願いします。
0895ららら2006/09/04(月) 01:26:44
>>890
そのまま分子分母の係数がフィルタ係数になるはずだが。
0896デフォルトの名無しさん2006/09/04(月) 01:38:23
>>893
お前自身も「答えられない香具師」じゃないか。ここに書かなくていいです。
0897デフォルトの名無しさん2006/09/04(月) 01:48:30
>>894
ヒント:
ttp://dl.cybernet.co.jp/matlab/support/manual/r14/toolbox/matlab/math/funfun14.shtml#381254

2重積分のところも読むといいかも。
0898デフォルトの名無しさん2006/09/04(月) 04:50:07
>>897
ありがとうございます。

でも、なんで2重なんですか??
0899デフォルトの名無しさん2006/09/04(月) 14:26:29
MATLABは医用ではどんなことに使われているんですか?
0900デフォルトの名無しさん2006/09/04(月) 22:02:32
>>898
関数の作り方が書いてある
0901デフォルトの名無しさん2006/09/05(火) 00:34:29
>>900
なんとかできました。
あと、数式じゃなくてfftして得られたグラフやデータを積分することもできるんでしょうか?
0902デフォルトの名無しさん2006/09/05(火) 01:32:48
式ではなくてデータを積分するには,数値積分という方法があります。

台形公式、ガウス積分,シンプソン法なんかでググれば出てくると思います。
0903デフォルトの名無しさん2006/09/05(火) 02:33:09
quadを使ってシンプソンの求積法で関数を積分するとき、
パラメータの刻み幅はどこで決まるんですか?
0904デフォルトの名無しさん2006/09/05(火) 02:34:47
quadを使ってシンプソンの求積法で関数を積分するとき、
パラメータの刻み幅はどこで決まるんですか?
0905デフォルトの名無しさん2006/09/05(火) 03:47:37
quadは刻み幅の指定は出来ないかと。

刻み幅を指定して積分を行いたいなら,自分で積分のルーチンを作るしかないと思います。
0906デフォルトの名無しさん2006/09/05(火) 03:58:13
quadはどれくらいで計算してるんですか?
0907デフォルトの名無しさん2006/09/05(火) 04:01:06
ブラックボックスだから何とも・・・
0908デフォルトの名無しさん2006/09/05(火) 22:57:02
MATLABってなに?
レス数が900を超えています。1000を超えると表示できなくなるよ。