X



MATLABプログラミング 質問箱 その4
0001デフォルトの名無しさん
垢版 |
2012/09/03(月) 17:35:08.97
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プログラミング 質問箱 その3
http://toro.2ch.net/test/read.cgi/tech/1254528108/
0002デフォルトの名無しさん
垢版 |
2012/09/05(水) 21:48:22.34
>>1
乙です。即死回避保守。
simulinkって制御に使う他に、
Scratchみたいなビジュアルプログラミング言語として遊べるかな?
0003デフォルトの名無しさん
垢版 |
2012/09/05(水) 22:44:16.55
windowsなんかでparfor使った場合、マルチスレッドと言えばいいのかな?マルチプロセス?
タスクマネージャ見ると1人のworkerは1つのプロセスみたいだけど
0004デフォルトの名無しさん
垢版 |
2012/09/06(木) 23:20:08.68
突然の質問失礼します。
if文を一つだけ抜けさせるbreak構文はどうしたらよいのでしょうか?

例えば、

for i=1:100
~
~
for j=1:1000
if ある条件
~
else
ここである条件で抜ける(Aへ)
~
~
end
end

@
end

A
0005デフォルトの名無しさん
垢版 |
2012/09/06(木) 23:21:51.61
上記のように@へ抜けさせたいのですが、break構文を使うと、
Aにいってしまい、終了してしまいます。。
breakで@へいって、再度iの続きをさせたいのですが、どのようにやればよいのでしょうか?
なお、for jからendまで数千行あるため、ある条件で@へ出させることができれば、
非常に効率が良いです。
0009デフォルトの名無しさん
垢版 |
2012/09/07(金) 11:50:31.38
すみません、質問なんですが3次元の疎行列とスカラーの積を求めようとすると
以下のようなエラーが出てしまいます。

p = 18 x 24 x 4 doubleの疎行列
wx = 0.95

a = wx * p

Error using .*
ND-sparse arrays are not supported.

この計算を行うにはどのように書けば良いでしょうか?
0010デフォルトの名無しさん
垢版 |
2012/09/07(金) 14:42:47.54
>>5
6のいうとおり、breakなら(1)に行くと思う。
(1)の前のあたりまで戻りたいのであればcontinueが使えるかも。
0014デフォルトの名無しさん
垢版 |
2012/09/12(水) 11:33:03.40
質問です.

uigetdir関数を用いてディレクトリへのパスを変数dir_pathに入力する関数Aを作成しました.
再度関数Aを使用する際,uigetdir関数のオプションにある,デフォルトのディレクトリを前回指定したdir_pathに設定する仕様にしたいと考えています.

しかし,関数Aの冒頭でdir_pathを読み込んだ場合,初実行の場合”未定義の変数”としてエラーを吐き出してしまいます.
何か良い方法はありませんでしょうか?
0018デフォルトの名無しさん
垢版 |
2012/09/21(金) 03:33:05.50
macにおいてMATLABを使用している者です
latexを使用するためにいろいろ設定したところプログラムが実行はできるもののずっと回帰せずにこまっています
参考にしたのが
http://osksn2.hep.sci.osaka-u.ac.jp/~taku/osx/install_xtexgsgv.html
なんですがこのページの(0.下準備)のところでターミナルでecho $shellを実行したら
/bin/bash
と表示されたので説明に従いコマンドを実行したのが原因かとおもわれます
macについてあまり詳しくないのでどうすればいいのか調べているところですがわかる方いましたらご教授おねがいします

0021デフォルトの名無しさん
垢版 |
2012/09/24(月) 11:42:33.60
>>14
mファイル実行なら自動的にdir_pathはワークスペース変数に保存されて
14が考えているようにできるんだが, 関数実行だとワークスペースに保存されないから
matlabのワークスペースに保存すれようにすればいい。保存場所は関数Aと同じ場所。
matファイルの保存方法はhelpを見てちょ。
0023デフォルトの名無しさん
垢版 |
2012/09/24(月) 12:00:23.39
>>4
皆が言ってるようにbreakで@に出るはず。

あと、毎回言って得るんだが、matlabでforの2重ループはやらんほうがいい。
行列使うかreshapeで一次元化してやれ。
0024デフォルトの名無しさん
垢版 |
2012/09/24(月) 21:27:27.70
インタラクティブチュートリアルに登録するために必要事項を入力し、登録ボタンを押したのですが、
We're Sorry - an error has occurred
We apologize for the inconvenience. This error has been automatically reported to MathWorks.
We will fix this as soon as possible.
というエラーがかえってきてしまいます。
なぜでしょうか。
Chrome, Firefox, Safariそれぞれ試してみましたが、どれもダメでした。
OS X 10.7.3です。
0025デフォルトの名無しさん
垢版 |
2012/09/24(月) 21:55:47.90
え、おれ行列要素の操作に二重for使ってしまうんだけど、どうするのが正しいんだろう
0027デフォルトの名無しさん
垢版 |
2012/09/25(火) 16:22:50.95
あるディレクトリないのものでループさせるとき、
Bシェルでfor day in `ls dir`みたいに書くのをMATLABだとどういう風になるのか教えて下さい。
ちなみにあるディレクトリは日付のディレクトリです。
0028デフォルトの名無しさん
垢版 |
2012/09/25(火) 20:54:10.53
>>26
やってるのは画像処理だけど、たとえばxyの添字が共に奇数、共に偶数、それ以外、に分解するとか。
他には、各要素の上下の差と左右の差を求めて、差異が小さい方の平均値で置き換えるとか。
あともっと単純なのだと、各要素がある値より大きければその値で置き換えるってのもあったな。
適した機能があるか調べるよりループで書いちゃった方が早かったんで。
0029デフォルトの名無しさん
垢版 |
2012/09/26(水) 00:11:45.45
>>27
日付のアドレスのファイル名を取得したいということ?
files = dir('日付のアドレス');
filenames = {files.name};
for i = 1: length(filenames)
if strcmp(filenames{i},'.') || strcmp(filenames{i},'..')
filenames(i) = [];
end
end
filenames{:} %<-ファイル名表示

今, matlabないから動作確認はしとらん。
質問抽象的すぎ。
0031デフォルトの名無しさん
垢版 |
2012/09/26(水) 03:12:01.19
>>28
俺も画像処理だから多分こんな感じ
ひとつめ
I(1:2:end,1:2:end)=処理;

ふたつめ
conv2とfindつかったら?
みっつめ
I(I>0.5)=1;
画像処理でfor文は基本NG
てかmatlabはそういう使い方するもんじゃない
0032デフォルトの名無しさん
垢版 |
2012/09/26(水) 08:18:15.55
固定のフィルタではconv2を使っていたけど、条件によって処理が別れる場合
どうすればいいかわかんなかった。findでできるんであれば調べてみるよ。
3番目はそのまんまの機能があったんだな。
0033デフォルトの名無しさん
垢版 |
2012/09/26(水) 16:24:21.99
25です。29さん、ありがとうございます。
抽象的ですいませんでした。
具体的な質問は、DATEというディレクトリ内には120923、120924、
120925などというディレクトリがあります。
Bシェルだとfor day in 120923 120924 120925や、
for day in `ls $DATE`などとループを回していたのですが、MATLABでは
どのようなループになるか教えて下さい。
お願いします。
0034デフォルトの名無しさん
垢版 |
2012/09/26(水) 20:41:43.37
>>33
FOLDERZ = dir('DATE');
FOLNAMES = {FOLDERZ.name};
filenames = FOLNAMES(3:end);%必ず相対パス'.'と'..'が最初に来ると仮定すると
コマンドウィンドウ
>>filenames(:)%<-表示
ans =
'120923'
'120924'
.
.
.
>>filenames{:}%<-表示
ans =
120923
ans=
120924
.
.
.
てな感じ
>>29の訂正
FOLDERZ = dir('DATE');
FOLNAMES = {FOLDERZ.name};
FOLNUM = length(FOLNAMES);
FOLNAMENEW =[];
for i = 1:FOLNUM
if ~strcmp(FOLNAMES{i},'.') && ~strcmp(FOLNAMES{i},'..')
FOLNAMENEW = [ FOLNAMENEW ,{FOLNAMES{i}}];%あまり書き方よくない
end
end
0035デフォルトの名無しさん
垢版 |
2012/09/28(金) 17:17:35.05
34さん
ありがとうございます。
なかなかうまくいきませんが、
もう少しあがいてみます。
0036デフォルトの名無しさん
垢版 |
2012/09/29(土) 21:50:49.77
TV法ていろんなやり方あるけど導出をやってる論文で日本語のものありますか?
典型的なものから応用してるのまでどれでもいいです
0038デフォルトの名無しさん
垢版 |
2012/10/02(火) 22:42:54.28
現在 windows7 64bit で Matlab 2007b を使用しています。
mex -setup コマンドを試したところ、Noneしか出ずにコンパイラを選択することができません。
C++コンパイラを使用したいのですが、この場合何をインストールすればよいのでしょうか。
現在visual C++ 2008 express edition と 2010 express edition はインストール済みです。
0040デフォルトの名無しさん
垢版 |
2012/10/04(木) 15:48:19.23
どなたかOS:windows7 64bitを使用していてgetframeで問題が出てる人いませんか?
for文を回す中でgetframeで逐次ウィンドウをキャプチャしていくコードを組んでいるのですが
なぜか最初の1フレーム目のみを延々とループ回数分だけキャプチャしてしまいます
windowsXP32bitではこんなエラー出なかったのですが・・・

どなたか心当たりのある方いらっしゃいましたらご教授いただければと思います
よろしくお願いします
0041デフォルトの名無しさん
垢版 |
2012/10/04(木) 16:19:20.95
windows7で2012aを使っております。
mathworks製のツールボックスで使われているクラスにメソッドを追加したいのですが、
自分以外のユーザーに影響を与えないようにする方法はありますでしょうか?

具体的には、symbolicツールボックスのsymクラスにないmin()などを追加したい場合などです。
\toolbox\symbolic\symbolic\@sym フォルダに書かず、
C:\Users\ユーザー名 以下に書いたりできるのでしょうか?
004241
垢版 |
2012/10/04(木) 19:46:19.28
symをオレオレクラスに継承するしかないでしょうか?
004340
垢版 |
2012/10/09(火) 11:01:54.59
40です
解決はできていませんが原因は分かったので、一助になればと思いこちらに報告します
どうもgetframeで取得したい軸または図に
set(gca,'Facealpha',0.5)
などと透過率を設定してやると>>40の症状が発生するようです
どうぞご注意を
0044デフォルトの名無しさん
垢版 |
2012/10/10(水) 01:14:12.26
>> 40
Renderer変えると治るかも
OpenGLでダメだったことがあって、zbuffurとかに変えたら治った気がする

set(gcf,'Renderer','zbuffer')

みたいな感じだったと思う
0045デフォルトの名無しさん
垢版 |
2012/10/11(木) 06:39:47.61
>> 43
そもそもaxesプロパティでFacealpha設定できねーし。
patch かsurf の軸ハンドルを設定したんだろ。
try catchで囲ってエラー出なかっただけじゃね。
0046デフォルトの名無しさん
垢版 |
2012/10/13(土) 18:06:44.67
y=1/det(diag[exp(x),exp(2x),exp(3x)]^2)
(diagは対角行列,detは行列式)
(xは変数で1から10など好きに変化させる。)

このような物を計算し、x,y平面でグラフを書きたいのだが、
(本当はもう少し複雑な式ですが、簡易化してる。)

x=1:1:10
A=[exp(x) 0 0; 0 exp(2*x) 0; 0 0 exp(3*x)]
z=det(A)

としてもエラーが出てしまうんだよ

配列型のソフトだから上手くいかないのはあとでわかったのだけど、
上手く行列内に関数を入れることはできるのでしょうか?

できるのであればその定義の仕方を教えろください。
0047デフォルトの名無しさん
垢版 |
2012/10/13(土) 18:32:41.89
2次元正規分布の描画を平均ベクトル(2*1)と分散共分散行列(2*2)の値を代入した変数から行う
関数を作成したい
----------------------------------
function 2dim_Seiki(x,m,Cov)

[x,y] = meshgrid(linspace(-1,3,25)',linspace(-3,1,25)');

X = [x(:) ; y(:)];

Out = mvncdf(X,m,Cov);
surf(x,y,reshape(Out,25,25));

return;
-------------------------------
ここまでmファイルを作成しましたがエラーになってしまいます
やり方を教えてください。おねがいします!
0048デフォルトの名無しさん
垢版 |
2012/10/15(月) 21:13:51.28
age
0050デフォルトの名無しさん
垢版 |
2012/10/16(火) 01:45:18.76
>>49
変数先頭を修正しました。ありがとうございます
そして、どうかカスな私にやり方をおしえてください

あれから下のような関数を考え、実行しましたがエラーになってしまいます

Pdf = 1/(sqrt(2*pi)).^-2.*sqrt(det(Cov)).^-1.*exp(-5.*(X-m).'.*inv(Cov).*(X-m));
0051デフォルトの名無しさん
垢版 |
2012/10/16(火) 16:02:23.90
>>50
エラーならエラーを書け。
長い式は一時変数を使ってどんどん分解していけば人に聞く前に
アホでも気付く。
ここは宿題丸投げスレじゃない。

それに式自体あっちこっち間違ってる。
正定ならcholつかう。
ベクトル化する前に、スカラ出力が正しいかするのが先。
0052デフォルトの名無しさん
垢版 |
2012/10/16(火) 22:40:45.87
>>51
ありがとうございます。一度、一時変数を使用します
エラーは"行列の次元は同じである必要があります"と表示されます
何度か修正しましたが、改善されず上と同じエラーは出ます

現在下のような形になってます
Pdf = 1/(sqrt(2*pi))^(-2/2)*sqrt(det(Cov))^(-1/2).*exp(-(X(:)-mu)'*inv(Cov)*(X(:) - mu)/2);

間違っている個所についてヒントで十分ですので、どうかご教授をおねがいします
0053デフォルトの名無しさん
垢版 |
2012/10/17(水) 12:25:40.55
>>52
それだけ見ても分からん。変数の次元が違うなら次元が違うわけで各size()は?
Xは(:)しちゃあかんでしょ。 データの数xデータの次元 なんじゃ?
0057デフォルトの名無しさん
垢版 |
2012/10/20(土) 17:47:01.04
age
0058デフォルトの名無しさん
垢版 |
2012/10/21(日) 04:03:31.73
GPUを使ってみたけど、遅くて非常に後悔
0060デフォルトの名無しさん
垢版 |
2012/10/21(日) 20:05:53.95
>>56
できない
0068デフォルトの名無しさん
垢版 |
2012/10/26(金) 01:20:01.08
質問です
guideで作成したツールのウィンドウを閉じたときに処理を追加したいのですが
どうすればいいのでしょうか?
0069デフォルトの名無しさん
垢版 |
2012/10/29(月) 23:15:26.44
質問です
Matlabで画像とか絵の傾きを検出する方法ってありますか?
0072デフォルトの名無しさん
垢版 |
2012/10/31(水) 23:13:15.23
何を基準に傾きを出すのかしらんけど、MATLABじゃなくて画像処理全般の話題だろ
幾何モーメントとか勾配ヒストグラムとか方法は色々ある
0073デフォルトの名無しさん
垢版 |
2012/11/05(月) 12:58:08.85
MATLABを用いて時系列データに対して、
周波数領域でバンドパスフィルタをかけたいのですが
ネットで探しても時間領域でのフィルタについてしか
でてきません。どなたか教えていただけますか?
0074デフォルトの名無しさん
垢版 |
2012/11/05(月) 14:12:42.75
>>73
周波数カットするのに時系列のフィルターは使えないってことみたいだけど、
時系列のフィルターかければ周波数カットされる
FFT解析で周波数分かるから、フィルターかける前と後で比べてみれば良いと思う
FFTはググって
質問の意味が違ってたらすまん
0075デフォルトの名無しさん
垢版 |
2012/11/06(火) 00:24:50.25
>>73
MATLAB helpや参考書など大量に情報はあるぞ。デジタルフィルターを学ぶと確実に書いて有ること。
単に周波数領域というかデジタルフィルターを理解してないのでは?
コマンドだと、fft、ifft の使い方がわかれば理解できる
0076デフォルトの名無しさん
垢版 |
2012/11/06(火) 02:19:59.58
>>74
×時系列のフィルター
○時間領域でのフィルター
だった。

代行書き込みなので、書き込みが遅くなったらすまん
0077デフォルトの名無しさん
垢版 |
2012/11/10(土) 19:14:30.94
フーリエ変換に関する質問なんだけど
Simulink上で0~n*Ts(n:サンプリング数,Ts:サンプル時間)の間実行して
得られたデータをfftかけるわけだけどもこの時時間軸のデータ個数は(n+1)個あるので一番初めの0秒のときのデータを削ってるんだけど合ってるのか不安
シミュレーション時間を長めにとったほうがいいんだろうか?
0078デフォルトの名無しさん
垢版 |
2012/11/15(木) 21:06:33.55
用途次第なのでなんとも
定常のときはデータ数多いほうが安定になる
0080デフォルトの名無しさん
垢版 |
2012/11/17(土) 21:31:17.10
>>78
おいおい

>>77
fftの周波数分解能はシミュレーション時間で決まる
別にt=0を削っても問題はないけど、もうちょっと調べてから使うべきじゃないか
0081デフォルトの名無しさん
垢版 |
2012/11/18(日) 10:34:11.62
最近workspaceの画面サイズを変更すると2分くらい固まるようになりました。

設定をいじったことが原因な気がするのですけど、何か原因に心当たりないでしょうか?
0082デフォルトの名無しさん
垢版 |
2012/11/18(日) 11:57:33.23
>>80
> fftの周波数分解能はシミュレーション時間で決まる
> 別にt=0を削っても問題はないけど、もうちょっと調べてから使うべきじゃないか

ばかかおまえ
0085デフォルトの名無しさん
垢版 |
2012/11/18(日) 14:31:50.82
>>83
メモリは8G積んであるのだけど、スワップが起こってるんでしょうかね?
ひとまず再インストールしたら快適になったので、様子見してみます。

また同じ症状が起こったら原因特定して報告したいところ。
0086デフォルトの名無しさん
垢版 |
2012/11/18(日) 15:09:36.13
各変数a~fにそれぞれ数字1~6を割り当てたくて下のように二行に分けてるけど
もっとスマートに一行で書く方法ないですか?
変数の名前に意味もたせてるから変数を配列にするのはナシで。

temp = num2cell(1:6);
[a,b,c,d,e,f] = deal(temp{:});
0088デフォルトの名無しさん
垢版 |
2012/11/26(月) 16:00:13.28
スマートに書く必要ないとおもうが
0089デフォルトの名無しさん
垢版 |
2012/11/28(水) 12:03:01.85
matlabで微分したいのですが

syms x y z

A=x^2+y^2+z^2

B=diff(A,x) %Aの式をxで微分

実行 → ans=2x

だと通常通りできるのですが↑式を


A=(x(1))^2+(x(2))^2+(x(3))^2

としてx(1)で微分して
実行 → ans=2x(1)
と言う風に引数でしたいのですが symsで宣言できなかったりします。
どうすればよいでしょうか?教えてください。
0092デフォルトの名無しさん
垢版 |
2012/11/28(水) 19:34:03.46
matlabで画像処理をしています
画像の各画素の青の値に常用対数をとり、その平均値を出したいのですが
その値が-infになってしまいます
どうしたらよいでしょうか?よろしくお願いします

A = imread('image.bmp');
blue = A(:,:,3);
blueD = double(blue);
bLog = log10(blue);
baverage = mean2(bLog);
0093デフォルトの名無しさん
垢版 |
2012/11/28(水) 22:53:41.90
>>92
そういった経験がなく画像の常用対数の平均値を出すことの意義が分からないのではっきりした解決策は出せませんが
常用対数を出した時点
bLog=log10(blueD);
で青の信号が0の要素は-infになってしまいます。
-infが混じった平均をとると結果も-infになります。
なので常用対数をとる前にblueDの0の要素だけ例外処理するなりしないといけません。
ただ、例外処理の先をどう扱うか(例えば-1扱いにするか平均から除外するか)で結果も変わると思います。
相対値だけが問題なのであればblueDの全要素に+1するという手もありますが。
前者の場合はif文使うぐらいしか思い浮かびません。
もっと上手い手もあるかもしれませんがこれぐらいでご勘弁を
0094デフォルトの名無しさん
垢版 |
2012/11/29(木) 10:35:15.79
>>92
対数で-Infがでるときは
min(blue)
max(blue)
まずこれを確認する

回避策としては0をNaNで置き換えて(findを使う)
対数をとって
NaNで置き換えた要素に何かを入れる(何を入れるかはその後の処理に依存)
0095三宅祐輔
垢版 |
2012/12/07(金) 18:06:19.69
MATLAB Corder使っている方いませんかMATLAB言語からC/C++コードを直接生成したいのですが、お値段が高く・・買えないです。
一部のブログラムだけ変換していただけないでしょうか。
こちらのほうに連絡していただければプログラムを送信しますのでよろしくお願いします。
uerihufour@yahoo.co.jp
skypeID:yusuke-0727

図々しい質問をしているのはわかっていますが本当に困っているのでよろしくお願いします m(__)m
0096デフォルトの名無しさん
垢版 |
2012/12/13(木) 20:49:50.23
simulinkモデルからreal-time workshopでコード生成してみたけど、出来たコード重くてあかん。最適化のチェックはいれてるんじゃが。なんかコツがあるのかな。
コツご存知の方、ご教授ください。
0097デフォルトの名無しさん
垢版 |
2012/12/30(日) 00:27:05.07
微分方程式を解いたあとに特定の時間の値を求めるのはどうすればよいのですか?
0098デフォルトの名無しさん
垢版 |
2012/12/30(日) 23:40:04.62
>>81ですが、近頃また調子が悪くなってきていました。
先ほど、警告: com.mathworks.mde.explorer.Explorer を作成できません。
というエラーが出たためググったところ

http://www.mathworks.co.jp/support/solutions/ja/data/1-H9I9LH/index.html?product=ML&;solution=1-H9I9LH

このページがヒット。載っている通りにリネームしたら一気に軽くなったので、
>>81も何かファイルが破損していたのが原因だった可能性が高そうです。
レスを投稿する


ニューススポーツなんでも実況