ママのスキンケアのお悩みにおすすめアイテム

matlabで数時間かかると思われる計算をさせる時、
走らせた後、しばらく(仮に1時間)経って、
現在全体のどれくらいの割合まで計算が行われたか調べるにはどうすればいいのでしょうか?

理想では、firefoxのダウンロードマネージャのように進捗割合や残り時間など
知ることが出来れば助かるなと思っております・・・

一応、計算所要時間や開始、終了時刻はdispで最後に表示させるようにはしているんですが・・・

どなたかご存知の方教えてください。 。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

ループ構造の部分で時間がかかっているのであれば


waitbarを使うとか?
http://www.mathworks.co.jp/help/ja_JP/techdoc/re …
ループ構造でないのであれば、ちょっとめんどくさいですが
スクリプトの各所にwaitbarを入れるとかですかね。

参考になれば幸いです。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qmatlabで計算終了

matlabで計算を終了させる方法を教えてください。

exitだとプログラム本体が落ちてしまい、
pauseだと一時停止状態となっていますが、
計算のみを停止させるにはどういうコードを使えば良いですか?

Aベストアンサー

特定の行以降の計算を終了したいのであればreturn
forやwhileなどのループから抜けたいのであればbreak(returnでも終われる)
ですかね。

参考になれば幸いです。

QMATLABで小数を整数にするには?

タイトル通りなんですがMATLABで小数の値を小数点以下切捨てなどで整数にする方法はありますか?

Aベストアンサー

floorとかroundを使えばいいんじゃないでしょうか?
正の数であれば、floorが切り捨て、roundが四捨五入です。

参考URL:http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/floor.shtml

QMATLABのCSV形式での書き込みについて

MATLABにて計算させた結果をCSV形式で出力したいのですが,
もともとCSVファイルに書き込んであるデータを消さずに,
追加書き込みとして,行と列を指定して書き込み出来るのでしょうか?

もしできるのであれば,
どのようなプログラムを組めばよいのでしょうか?
どなたかご教授お願いします.

Aベストアンサー

speedとpowerはdouble型の行列ですよね?

fwrite関数はバイナリ保存関数ですので、CSV形式(=テキスト形式)での保存はできません。
dlmwrite関数では小数点以下12桁までを指定して保存していますので、fprintf関数を使用すれば良いのではないかと思います。
なお、fprintf関数を使用する場合は、区切文字(,)や改行は自動で追加されませんので、以下のように記述する必要があります。

fprintf(fid, '%.12f,', speed);
fprintf(fid, '\n');
fprintf(fid, '%.12f,', power);
fprintf(fid, '\n');

ただ、この方法では各行の末尾にもカンマが出力されますので、それを抑止したい場合は、speedとpowerの各要素をループの中で保存してください。

■ fprintf関数
http://infoshako.sk.tsukuba.ac.jp/InfoRes/jdoc/MATLAB5/jhelp/techdoc/ref/fprintf.html


また、プログラムではfor文の中でfopenとfcloseを繰り返していますが、余り良いことではありません。見たところファイル名は一定のようですので、fopenとfcloseはfor文の外でするべきだと思います。そうすれば処理速度も向上しますし、別に追記でfopenする必要もありません。

fid = fopen('file1.csv', 'w');
for
fprintf(fid, ....);
end
fclose(fid);


最後に、この場合はファイルの出力方法を変更する以外に、speedとpowerをループ回数分保存するように変更する方法もあるのではないかと思います。

speedとpowerはdouble型の行列ですよね?

fwrite関数はバイナリ保存関数ですので、CSV形式(=テキスト形式)での保存はできません。
dlmwrite関数では小数点以下12桁までを指定して保存していますので、fprintf関数を使用すれば良いのではないかと思います。
なお、fprintf関数を使用する場合は、区切文字(,)や改行は自動で追加されませんので、以下のように記述する必要があります。

fprintf(fid, '%.12f,', speed);
fprintf(fid, '\n');
fprintf(fid, '%.12f,', power);
fprintf(fid, '\n');

た...続きを読む

QMATLABのsaveでファイル名を試行ごとに変えたい

MATLABを使ってるんですが,変数を保存するとき,
saveコマンドで,
save 'filename.txt' A -ASCII -TABS
で,Aのデータがfilename.txtに保存されますよね.
で,このfilenameの名前を試行ごとに変えたいのですが,やりかたが分からないので教えてほしいです.
想像だと,
save 'filename%d.txt' ~
みたいな感じで毎回違う数字をファイル名に入力できるかと考えたんですが,書き方がわかりませんでした.

もしくは,ファイルを出力するフォルダを指定する方法などもわかるとうれしいです.

お願いします.

Aベストアンサー

自分で作ったプログラムソースから抜粋しました。

自分は画像処理を行って、画像330枚をひとつのディレクトリに
書き出しています。

d = dir('cars/*.jpg');

こうすることで、カレントディレクトリにあるcarsというディレクトリ
のファイル(.jpg)の情報を全て構造体として d に書き出します。
あらかじめcarsを作っておきます
構造体の中身は
d.name 'car0004.jpg' //ファイル名
d.data '25-9-2008...'//日付
d.byte '4996' //バイト
d.isdir '0'
d.num 7.4e^...
といった情報が入っています。実際に試してみてください。

maisu=1;
kakidashi=['kensa330/' d(maisu).name];

これでkensa330というフォルダの位置と名前を指定することができます。
workspaceには kakidasi='kensa330/car0004.jpg'となります。

maisuをfor文などでまわすことでcar0001.jpg car0002.jpg ...
と順次新しく変換されます。

あとはがんばってください。

自分で作ったプログラムソースから抜粋しました。

自分は画像処理を行って、画像330枚をひとつのディレクトリに
書き出しています。

d = dir('cars/*.jpg');

こうすることで、カレントディレクトリにあるcarsというディレクトリ
のファイル(.jpg)の情報を全て構造体として d に書き出します。
あらかじめcarsを作っておきます
構造体の中身は
d.name 'car0004.jpg' //ファイル名
d.data '25-9-2008...'//日付
d.byte '4996' //バイト
d.isdir '0'
d.num 7.4e^.....続きを読む

Qmatlabで複数条件のif文を行列計算で行うには?

matlabで複数条件のif文を行列計算で行うには?

matlabではfor文などは行列計算で回したほうが高速化できると聞きました。
for文でのやりかたはわかったのですが、複数条件でのif文ではどのように書けばよいのでしょうか?

自分のプログラムは以下のようなものです


for i=1:100
for j=1:100
theta_kari=atan(abs(B(j,i))/abs(A(j,i)));
if A(j,i)>=0&&B(j,i)>=0
theta(j,i)=theta_kari;
elseif A(j,i)<0&&B(j,i)>=0
theta(j,i)=theta_kari+(pi/2);
elseif A(j,i)<0&&B(j,i)<0
theta(j,i)=theta_kari+pi;
elseif A(j,i)>=0&&B(j,i)<0
theta(j,i)=theta_kari+(pi/2*3);
end
end
end

よろしくお願いします

matlabで複数条件のif文を行列計算で行うには?

matlabではfor文などは行列計算で回したほうが高速化できると聞きました。
for文でのやりかたはわかったのですが、複数条件でのif文ではどのように書けばよいのでしょうか?

自分のプログラムは以下のようなものです


for i=1:100
for j=1:100
theta_kari=atan(abs(B(j,i))/abs(A(j,i)));
if A(j,i)>=0&&B(j,i)>=0
theta(j,i)=theta_kari;
elseif A(j,i)<0&&B(j,i)>=0
theta(j...続きを読む

Aベストアンサー

matlab的に一番速いのは

theta = atan(abs(B./abs(A)) + (A<0 & B>=0)*pi/2 + (A<0 & B<0)*pi + (A>=0 & B>=0)*(pi/2*3);

ですかね。

Q偏微分の記号∂の読み方について教えてください。

偏微分の記号∂(partial derivative symbol)にはいろいろな読み方があるようです。
(英語)
curly d, rounded d, curved d, partial, der
正統には∂u/∂x で「partial derivative of u with respect to x」なのかもしれません。
(日本語)
ラウンドディー、ラウンドデルタ、ラウンド、デル、パーシャル、ルンド
MS-IMEはデルで変換します。JIS文字コードでの名前は「デル、ラウンドディー」です。

そこで、次のようなことを教えてください。
(1)分野ごと(数学、物理学、経済学、工学など)の読み方の違い
(2)上記のうち、こんな読み方をするとバカにされる、あるいはキザと思われる読み方
(3)初心者に教えるときのお勧めの読み方
(4)他の読み方、あるいはニックネーム

Aベストアンサー

こんちには。電気・電子工学系です。

(1)
工学系の私は,式の中では「デル」,単独では「ラウンドデルタ」と呼んでいます。あとは地道に「偏微分記号」ですか(^^;
その他「ラウンドディー」「パーシャル」までは聞いたことがあります。この辺りは物理・数学系っぽいですね。
申し訳ありませんが,あとは寡聞にして知りません。

(3)
初心者へのお勧めとは,なかなかに難問ですが,ひと通り教えておいて,式の中では「デル」を読むのが無難かと思います。

(4)
私はちょっと知りません。ごめんなさい。ニックネームは,あったら私も教えて欲しいです。

(2)
専門家に向かって「デル」はちょっと危険な香りがします。
キザになってしまうかどうかは,質問者さんのパーソナリティにかかっているでしょう(^^

*すいません。質問の順番入れ替えました。オチなんで。

では(∂∂)/

QMATLAB(マトラボ)とcsvファイルについて

マトラボで、文字列を含む、csvファイルを読み込み、データをプログラムに使用したいのですが、どうしたらいいですか?
csvread('filename')ではできませんでした。
どなたか、ご教授くださいませ。

Aベストアンサー

Excelで読み込んで、xlsファイルにセーブして、
xlsreadでmatlabに読み込むとか。
http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/xlsread.shtml

Qmatlabで条件をみたしたデータの総数を数えることは可能ですか?

matlabで条件をみたしたデータの総数を数えることは可能ですか?

例として2×5の以下の行列

1 3 0 2 0
1 0 1 2 1

の一行目で0以上の値を持ったデータの総数を知りたいとき(答えは3)

初心者なのでわからないことだらけで困っています。

よろしくお願いします。

.

Aベストアンサー

三度Kulesです。
なるほど、そういうことでしたらANo.2さんの書かれたsumを使う方法がよいでしょう。
sumは合計を出す次元を指定することができますので、
sum(A>0,2)とすれば行ごとの要素数が出ます。
ちなみに列ごとの要素数を出したければ
sum(A>0,1)とすればよいです。

繰り返し、と書かれていますが、Matlabの場合各関数の使い方をよくみてみると
forループなどのループ構文を使わなくても書ける場合が多いです。

以上、参考になれば幸いです。

QMATLABで行列を配列に格納する方法

MATLAB初心者で大変申し訳ありませんが、行列の格納の仕方がわからないので、投稿させていただきました。

for k = 1:1:10
k=k;
t(:,:)=load(sprintf('test%5.5i.txt',k));
end
具体的に言いますと、上記のプログラムで、test00001~test00010.txtというファイルを任意の行列t(:,:)で読み込んでいるのですが、このt(:,:)をkと対応させて、例えばk=1の場合のtをt[1]、k=2の場合のtをt[2]などの配列に格納し、それを自由に呼び出し、計算を行いたいと考えております。
基礎がわかっていないためにどうしていいかわかりません。
宜しく御願いします。

Aベストアンサー

構造体を使うのが一番スマートでしょうか。

for k = 1:10
 FILE_DATA(k).t(:, :) = load(sprintf('test%5.5i.txt', k));
end

これで、FILE_DATA(1)~FILE_DATA(10)それぞれに行列tが格納されます。

QMatlabでforやifを使わずに条件に合う行番号の抜き出し方

仮にA=[1 0 1 0 0 1]の行ベクトルがあったとします。
forやifを使わずにAにおいて1が入っている行番号(この場合では1,2,5)を抜き出すにはどうしたらいいのでしょうか。よろしくお願いします。

Aベストアンサー

index = find(A == 1);

で大丈夫かと。


人気Q&Aランキング