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 :
9:2009/10/09(金) 16:42:17
matlabに触れたことがないので何もわからない状態です・・・
上記の入力部分とありましたが、使い方もわからずただpreview()とか書いてパソコンに表示
させただけです・・・
1からプログラミング内容を書いてもらえないでしょうか?
>>9 a <-これにイメージ情報が入っているとして、
a=a'
これで90度回転するよ
15 :
デフォルトの名無しさん:2009/10/13(火) 07:13:58
棒状のものを表示したいのですが、どのプロットが最適でしょうか?
wavファイル保存についてなんですが
ファイル名を(ファイル名)001〜ってどうやるんですか?
録音したものを連番で次々保存していきたいんですが
>>16 初心者だけど、numに連番入れるとして
wavname = [ '(ファイル名)' num2str( num, '%03d' ) '.wav'];
こんなとか、
wavname = sprintf( '(ファイル名)%03d.wav', num);
こんな感じかな?
18 :
デフォルトの名無しさん:2009/10/15(木) 12:53:05
19 :
デフォルトの名無しさん:2009/10/23(金) 07:01:02
do-whileってmatlabに無いの?
マッチョラボだと入るのに勇気がいるよね( ・ω・)y─┛〜〜
>>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
タブとはそういうものだと思うが
初歩的な質問で申し訳ないんですが、
A=imread('test01.jpg');
で画像を取り込んで
image(A)
で表示するのはできたんですが、
表示された画像の任意の場所をクリックして、そのクリックされた座標を調べるにはどうしたらいいでしょうか?
やりたいことは、2点の点をクリックして座標を出し、その2点間の距離を求める ということです。
29 :
デフォルトの名無しさん:2009/11/09(月) 02:04:44
ランダムな行列から
○列目の値が△である行を全て抽出して
新たな行列を作るはどうしたらいいでしょうか?
誰か教えてください
30 :
デフォルトの名無しさん:2009/11/09(月) 03:18:13
なんかR2009bにしてからしょっちゅう固まる…何故だろう
> 29
ind = hogehoge(:,○)==△;
hogehoge2 = hogehoge(ind,:)
>>31 findが必要なんじゃないの?
ind = find( hogehoge(:,○)==△);
33 :
29:2009/11/09(月) 21:02:54
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が残ってしまいます。
正しくプロセスを終了させる工夫はあるのでしょうか??
>>34 trapzでいけるはずだ。台形近似で定積分できる。
tはサンプリング時間、wはその時点での値。tは等間隔じゃなくってもいける。
s = trapz( t,w );
個人的覚え書き
秀丸で、matlabの' 'を文字定数にしたい場合
'.*'では
アポストロフィー演算子の扱いに困るので前方不一致を使って
(?<!\))'
だと(1 2)'とかを避けてうまくいくようだ。
inputdlgから取得した文字列がanswerに格納されていると思うんですが
str2num(answer(1));
といった感じで文字列から数値に変換しようとすると
『文字列を入力してください』
といった類のエラーが出ます。
色々と試してみましたが解決できませんでした。
よろしければこの解決方、あるいは
この文字列を数値に変換する他のすべを教えて頂ければと思います。
40ですが自己解決しました
inputdlgの戻り値がキャラ型じゃないというだけでした
こんな簡単なことにも気付かなかったなんて……
ググレカスな質問をしてしまい、申し訳ありませんでした
(x,y)のような位置情報データをfigureにマップのように表示したいのですが、そのような方法はありますか?
ありますよ
44 :
デフォルトの名無しさん:2009/12/01(火) 23:22:40
マットラブ エックスポ 20009 行ってくるぜ
45 :
デフォルトの名無しさん:2009/12/04(金) 10:37:50
mexファイルを使おうとしてコマンドプロンプトでmex -setupと打つと、
1にはlcc
2にはNone
となってしまってVC++が選択できません。
VC++はインストール済みです。何が問題なのでしょうか?
>>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の辺りを変更するということでしょうか?
ただ、環境変数のパスのあたりをどう設定してよいか・・・
>>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
53 :
デフォルトの名無しさん:2009/12/08(火) 17:56:07
matファイルの中身(変数名やその値など)が全くわからないとき、
何かしらの方法で出力できませんか?
専用の閲覧エディタや出力するスクリプトなど・・・
MATLAB 変数名でググった4つ目
55 :
デフォルトの名無しさん:2009/12/10(木) 17:27:45
VC2008で作ったものをMatoabでMexしようとしたら、「windows.hが見つかりません」と出たので、パスを設定したつもりなのですができませんでした。
パスの設定方法は「ファイル→パスの設定」でやったのですが、やり方が違うのですか?
windows.hなんて必要ないんじゃないの?
57 :
デフォルトの名無しさん:2009/12/10(木) 18:22:00
説明少なくてすみません。
C++でDirectSoundで再生するものを作り、それをMexしようとしました。
そこでwindows.hをincludeしました
maxで最大値を出すことはわかるんですが
最大値の位置を求めるにはどういうコマンドを使えばいいのでしょうか?
例えば
A=[2 52 5 9 20 32];
B=max(A)
B=52
ここで位置を求めるコマンドを使って
A(1,2)が最大値だということが知りたいわけです。
maxのリファレンスを見ましょうね。
[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について繰り返したいのですが、どうしたら良いのか分かりません。
63 :
62: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という名前で保存されてしまいました。
やり方ご存じないでしょうか?
>63
cd FolderName
だとFolderNameが変数じゃなくてリテラルとみなされるようで
cd(FolderName)
だと変数として扱われるようです。
関数f(t)と時間反転した関数f(-t)の畳み込みって自己相関に等しいですよね?
matlab上で、
conv(f(t),f(-t)) と xcorr(f(t))
が等しくならないのはなぜでしょうか?
また、この方法が間違ってる場合、f(t),f(-t)を用いて自己相関を表現する方法があれば教えていただけないでしょうか
66 :
62:2009/12/19(土) 00:15:50
>>65 携帯からだから説明面倒だからしないけど、
とりあえずyahooで「MATLAB conv」で検索すれば法政の小林研究室の講義資料がトップに出てくるはずだから、それを読めば幸せになれるよ。
>>67 自分の頭では同じと書いてあるようにしか読めませんでした……
自己相関の場合conv(f(t),f(-t))でいいと書いてるようですが……
連投すいません
整数で試してみたら出来ました
今やってるのはデータが複素数なので、そのあたりに原因がありそうな気がします
70 :
デフォルトの名無しさん:2009/12/26(土) 18:40:21
MATLABについて質問なんですが、
私が今回作ったプログラムにかなり大きいfor文がありまして、いざデバッグしてみると、エラーも吐かずちゃんと動いてるのですが明らかにおかしい結果が出てしまうのです:
そこで、MATLABにはブレークポイントという便利な機能があるって聞いて、使ってみたらとてもすばらしい機能でした^^;
しかし、行が多くなるにつれてクリックするのがめんどい…w だれかこれを一気に全行に設定できる機能orコマンド知りませんか?
私の環境はWindows XP Pro MATLABR2006aです;
どうかご教授くださいー!;
全行にブレークポイント入れたら今度はデバッグ時に
更なるクリック連打になって余計面倒な気が…
ループごとにtest1、test2、test3...と変数の最後の数字を変更して変数を作りたいのですがどのようにすればいいのでしょうか?
>>73 ループでカウントアップする変数と
'test'って文字列をくっつけてevalすれば良いと思うよ
>>74 変数の中身をtest1...としたいのではなく、変数として宣言したいのですがそれもevalで可能ですか?
>>75 やじうまです。変数をプログラム実行中につくるわけですよね。で
それは、何に使うのでしょうか?配列とかでは代用できないのでしょうか?
>>76 配列でも代用は出来るのですが、すでに2次元配列になっていて3次元にするとややこしくなるかなと思いまして
使えれば便利だなと思ってる程度で、絶対に必要というわけではないですね、すいません
使い方としてはループごとに新しい変数に2次元配列を格納するといった感じでしょうか
1ループ目はtest1に、2ループ目はtest2に...といったイメージです
>>77 「matlab eval」でぐぐって最初のところ(これ、マニュアルかな)にある例をみると
代入文のevalもできるみたいですね。
>>77 それを文字列+ループナンバーで合成した新しい変数に
ぶっこむと、あとあとの処理を書くのが面倒くさくなる気がする。
変数名リストを作っておいて、まいどまいどeval、とか。
やたらと変数がとっ散らかって美しくないし。
3次元配列とか構造体でいいじゃない。
randを使って乱数を発生させているのですが、プログラムを実行するたびに同じ乱数を発生させてしまいます
実行するたびに違う乱数を発生させたいのですがどうすればいいでしょうか?知恵をお借りしたいです
>>80 会社じゃないとMATLABがないので確認できませんが
適当に検索したR13のマニュアルによると
「randは、実行するたびに異なる値を出力します。」
だそうです。
自分の記憶でも、そうなっていたような。
手元にあるFreeMat V3.6だと毎回違う出力になりますが、
なんの参考にもならないですね…
>>80 rand('state',0)で最初の状態にリセット
rand('state',j)でj番目の状態になる。
jを固定すれば、毎回、同じ一様乱数を発生する、だと思う。
乱数と言っても疑似乱数ですから、ある周期のどこかを取ってきているだけですので、こんな感じになるんだと思います。
84 :
デフォルトの名無しさん:2010/01/08(金) 02:35:26
randのアルゴリズムってどうなってんの?
85 :
80:2010/01/08(金) 16:40:07
rand('state',sum(100*clock));
と書くと毎回ランダムになると聞いたのでプログラムに追加してみたのですが、何も変わりませんでした
置く場所はrandを使う直前じゃないとダメとかそういう決まりがあるんですかね?
プログラムの内容が変わると違う乱数になるみたいですが、結局またその乱数で固定されてしまいます
>>85 > rand('state',sum(100*clock));
これを最初に1回だけ実行すれば、時刻で初期化されて違う系列の乱数に
なりそうですけどね。
やっぱり、ことばで説明するよりソースをあげた方が解決が早いかも。
87 :
80:2010/01/08(金) 18:01:12
rand('state',sum(100*clock)); の場所を変更したら毎回違う乱数を発生させてくれるようになりました
回答してくださった皆さんありがとうございました
初歩的なことで申し訳ないですが、方法が上手く検索できなかったので質問させてもらいます
たとえば20個あるデータをAとして、その平均を取るときは
mean(A)
でいいと思うのですが、
間の10番だけ飛ばして平均を取る、といったような事は出来るのでしょうか?
1〜9、11〜20を足して19で割り、平均したいのですが
mean(A([1:9 11:20]))
こんな感じかもしれない
>>89 やってみたら出来ました!
そんなところに括弧つければよかったんですね、知りませんでした
質問です
Genetic Algorithm and Direct Search Toolboxで組合せ最適化問題を解きたいのですが、
整数であるという制約はどのようにしたらいいですか??
c<=0 ceq=0でしかできないのでどうしたらいいか困っています
よろしくお願いします
最適レギュレータで質問です。
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
デフォルト値はどのファイルに書けばいいのか?
配列の中の最大値は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
>>97 一度されていた質問をしてしまって申し訳ない……
しかし助かりました、ありがとう
100 :
デフォルトの名無しさん:2010/02/05(金) 19:06:49
101 :
デフォルトの名無しさん:2010/02/07(日) 21:31:10
質問です.
行列を返す関数の要素にそのままアクセスする方法を誰かご存知でしょうか?
たとえば, size(A)の第2要素をアクセスするのに
S = size(A)
elem_2 = S(2)
といった書き方をもっと短い書き方(イメージで言うと (size(A))(2)のような表記 )
でやる方法ってありませんか?
できません
一部の関数では
elem_2 = size(A, 2)
のように書ける
>>102, 103
ありがとうございます。基本無理だけど一部引数にとるものもあるんですね。
105 :
デフォルトの名無しさん:2010/02/10(水) 01:31:23
matlab超初心者です。
1*1*512の変数を1*512の変数に置き換えるには
どうしたらいいんでしょうか?
ほんと初歩的な質問で申し訳ないです。
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
離散系のBode線図を描くと-180[deg]で折り返してくれない(-300degとかになる)です、何か解決法はありますか?
入力信号をフィルタに通し出力するとき
出力波形の周波数振幅特性の図を出力したいのですが
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工夫をすればよいのでは
>>112 アナログで0〜8000[Hz]までをプロットするというものなんですが
Fは周波数をそのまま入れればよいのか、それとも
F=0:8000;
と範囲を指定した方がいいのかどっちなのでしょう?
FFTの結果に対応するFになりますよ
116 :
デフォルトの名無しさん:2010/03/08(月) 14:15:58
MATLABで作った図をWordで読み込みたいんですが
どうセーブするのがいいのでしょう?
emf
epsも対応してるだろ
バージョンにもよるけど概ねeps最強
emfのほうがキレイに印刷できるような気がするんだけど
それって俺だけ?
線は太めのほうがきれいにみえるかも
121 :
デフォルトの名無しさん:2010/03/15(月) 17:58:21
ある時系列の移動平均をとりたいのですが
どうやればいいのでしょうか?
係数を定義してコンボルーションconvでおk
123 :
デフォルトの名無しさん:2010/03/17(水) 00:56:05
質問です。
mfilt.cicinterpでノーマライズ(0dB)する方法が分かりません。
ちなみにmfilt.cicdecimではノーマライズができるのですが、
mfilt.cicinterpでは0dBにノーマライズすることができませんでした。
分かる方がおりましたらご教授お願い致します。
124 :
デフォルトの名無しさん:2010/03/17(水) 16:30:18
125 :
デフォルトの名無しさん:2010/03/17(水) 16:39:55
126 :
デフォルトの名無しさん:2010/03/17(水) 17:34:25
>>124 移動平均なんだからどんな場合でも端の処理は面倒
行列のある要素の周囲から最小値を見つけそのインデックスを知りたいのですが、どうしたらいいでしょうか?
例えば、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に直す
でどう?
minでいいんじゃないの?
ちょっとかっこ悪いけど、これでできた
[x,y]=find(A=min(min(A)))
>>130 min(min(A))は min(A( : ))でいいだろう。(:)でマトリックスを縦ベクトルにするからね。
132 :
127:2010/03/27(土) 11:15:25
皆さんどうもです。
残念ながら
>>127の考え方自体があまり有効な方法じゃなかったことが発覚してしまったのですが、
今後使うかもしれないので参考にさせていただきます。
四分値を調べるコマンドはありませんか?
135 :
デフォルトの名無しさん:2010/04/10(土) 09:46:56
quartile.mっていうのでぐぐれ
MATLAB2008をインストールしたら、無線LANでネット接続ができなくなっちゃった。
原因わかる方いますか?
137 :
デフォルトの名無しさん:2010/04/21(水) 19:15:40
どういう設定なのかもわかんないのに、答えようがない
138 :
デフォルトの名無しさん:2010/04/23(金) 00:30:40
2008なんて、どうして今頃インストールするんだよw
GUIDEで、uigetfileを使って、csvデータを読み込むGUIを作ろうとしたのだが、
データをワークスペースに渡せず、消えてしまうのだが、なにかいい方法ないかな?
140 :
139:2010/04/29(木) 01:27:38
すみません。
自己解決しました。
globalで宣言しておけばおkでした
141 :
デフォルトの名無しさん:2010/04/30(金) 18:18:39
globalにしなくっても、引数で渡す手もあるよ
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
普通の返り値がある関数と同じじゃないの?
すみません、初心者です
質問させてください
for文(例えば x = 1:8)のなかで
末尾にその時のループの数字を付加した変数を使いたいのですが
x = 1 のとき y1
x = 2 のとき y2
...
x = 8 のとき y8
(↑のようにです)
xとyを使ってどのように記述すれば、思っているように
動作させられるでしょうか
>>144 eval使えば出来るけど、
それよりもYを1つの構造体にして、
for x = 1:8
[ y{x} を使った処理 ]
end
とすればやりたいこと実現できると思うよ。
146 :
145:2010/05/11(火) 00:49:12
構造体じゃなくてセル配列だった。
セル配列って、使ってて分かりにくくありません?
なんでも放り込めてしまうので、視認性の悪いスクリプトになるような気がします
自分はeval派ですね
evalよりまし
evalは慣れたら分かりやすいよ
アク禁なのでケータイから
mex foo.c bar.lib
こんな感じで答えになってる?
ヘルプのwritting s-functionsとかにwrapper s-functionsなんてのがあったと思うけど
152 :
デフォルトの名無しさん:2010/05/16(日) 18:11:52
本家で解説あるじゃん
音声の信号処理をしたいのですが、変なことでつまずいています
例えばなのですが、下を実行したときに結果の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になっていたりで
解決できませんでした
分かる方いらっしゃいましたら助力いただけると幸いです
>2ビット
2バイトの間違いでした、すみません
>>153 int16(((2^(16-1))-1).*y)でよくない?
細かいとこはwavwriteしたもんと比べて確認してくれ。
ところで、今のmatぁbは
ouble以外の型でも普通に演算できるの?
Ver6 R12の頃なんだけど、
intのままだとエラーになったんだよね。
int8->doubleに変換->計算->int8に変換
とかやった記憶があるよ。
メモリの節約の意味しかなかった。
mファイル用を秀丸で使いたいのですが、強調表示の設定ファイルありませんか?
157 :
デフォルトの名無しさん:2010/05/28(金) 07:38:52
電子雲のようなものを表現する方法を教えてください。
>>157 plot3
でもOpenDXとかの方がいいとおもうよ
>>158 ありがとうございます
ちょっと試してみます
>>158 plat3で'.'で表示してみましたが、どうも今市です。
具体的なコードを教えていただけませんか?
自己解決しました。
ありがとうございました。
plot3じゃ、雲のような表現は無理なんじゃない?
ふぅ、やっとr2010aダウソ終わったぜ
164 :
デフォルトの名無しさん:2010/06/02(水) 16:26:44
またアップグレードするのか、と思うと気が重いな
地図って書かせることできますか?
166 :
デフォルトの名無しさん:2010/06/03(木) 19:25:10
C言語におけるconst修飾子のように
変数の値の変更を禁止するような方法はありませんか?
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段のピラミッドをつくるというプログラムにしたいんです。
あと("/")ではなくて(" ")にしてもう一回教えてもらえませんか?
fid = fopen('hoge.csv');
ss = textscan(fid,'%s%s','delimiter',',');
fclose(fid);
てして,ss{i}{j}でアクセス
174 :
173:2010/06/06(日) 03:19:53
>>170 カンマ含む文字列があるなら,Excelみたく""でくくって
%qを使うといいぞ
175 :
169:2010/06/06(日) 09:01:31
そうだな、スレ違い。
MATABのSimukinkuを使ってOFDMのシミュレーションモデルを構築
したいのですが、何をすればいいのかさっぱりです。
基礎知識ってナニが必要ですか?フーリエやら微分方程式って習得
してなきゃまずいですか?
豚に真珠、猫に小判という言葉が思い浮かんだ。
>> 177
MATLABは人をバカにするきらいがある・・・
かく言う私はMATLABでバカになった.
バカな私でも使えるMATLABは素晴らしい.
>> 176
Simukinku(w
OFDM勉強すればフーリエ変換も勉強できるのでは.
常識だし,勉強するためのちょうどいいチャンスじゃないか.
3Dのグラフ描写について教えてください。
真円度計の測定結果のような極座標系の三次元グラフを描きたいと思い、悪戦苦闘しています。
持っている情報としては45゜毎thetaの半径rと高さzがあります。
rを使ってカラーマップを作りたいのでmeshやsurfですと上手くいきませんでした。
海外にはpolar3dやpolarplot3dといった.mファイルがあったのですが
使い方がいけないのか上手く使いこなせなかったです。
極座標系の三次元グラフは不可能ですか?
何かやり方があれば教えてください。
デカルト座標から極座標に変換すればいいだけのことでは?
すでに極座標系なのですが。。。理解不足ですかね。
極座標系でz軸を使えるものはないですかね。
初歩的な質問かもしれませんが、教えてもらえれば幸いです。
二値画像をモルフォロジーに基づくスケルトン化しました。
そのスケルトン化した画像を元の二値画像に戻すにはどのようにプログラムを組めばよいのでしょうか。
また、2次元での画像を極座標変換するにはどうすればよいでしょうか。
よろしくお願いします
自分もよく理解できてないからだろうけど、このところ質問の意味が分からん。
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にすれば
うまくいくと思います)でき、うまくいくでしょうか?
長くなりましたが、よろしくお願い致します。
いえいえこちらこそ宜しく御願いします。
あとは、お若い二人でごゆっくりと( ・ω・)y─┛〜〜
187 :
184:2010/07/10(土) 12:31:13
自己解決できましたので失礼します。
うむ
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
となります。これは計算誤差の問題ですか?
>>190 z=exp(x.^2 + y.^2).*(x.^2 + y.^2)
でOK?
>>192 ありがとうございます。うまくいきました。
.*で要素単位の乗算を意味するということで、
もっと勉強します。
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 コレスキー分解が使える条件は
正定値対称だと思います
ただ単純に知りたいだけです。
英語でもいいのでどこか載っているところを
知っている方がいれば教えていただければと思います
>d = eig(A)
>でもコレスキー分解で固有値を求めていると考えるのが妥当でしょうか。
Aが実対称正定値:コレスキー分解
それ以外:QZ分解
って書いてあんじゃん
フラグが明示されない場合は実対称正定値かどうかを内部で判定してるんでしょ
199 :
デフォルトの名無しさん:2010/10/08(金) 15:29:55
学生でmatlab初心者です。自分は64bitのPCを使用しているのですが、
mex-setupコマンドを打ったときコンパイラの選択肢が出てきません。
ネットで多少調べてみたところ、32bit版での方法しか見つかりませんでした。
64bit版でも使用可能なコンパイラはないでしょうか?
基本的な質問なのでしょうが、どなたかご教授お願い致します。
200 :
デフォルトの名無しさん:2010/10/08(金) 15:45:22
199です。OSを書き忘れてました。
windows7を使用してます。
正規ユーザならサポートに訊け
現在学士4年で修士に進学予定です.
StudentEditionを購入したのですが,インストール時に設定する卒業年は2011年でいいのでしょうか?
修士の二年を考えて2013年でしょうか?
だからサポートに聞けって
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に対して同様のプログラムを作成したいと思っています.
>>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));
とするとか。
>>205 ありがとうございますm○mできました!
なるほど,{}を使うとできるんですね
画像のサイズを端末上に表示する方法ってありますか?
サイズを変数として使いたいのでimfinfoではダメです
size関数しらないって本当にMatlab使いか?
行列のサイズではなくて画像の容量を表示させたいのです
画像のサイズってファイルサイズのこと?
それだったらdir関数で分かるけど。
a = dir('foo.jpg');
siz = a.bytes;
これでfoo.jpgっていうファイルのファイルサイズが
バイト単位でsizに保存される。
MATLAB-Simulinkについて質問させてください.
運動方程式をベースに現在モデルを作成しております.
ある入力変位に対する値を出力させるためにLook-up-tableを用いています.
添付画像のようなデータを読み込ませようとしています.
しかし,そのデータの中に不連続な値をとる部分があり(下図の5.5や-5.5と記してある箇所),
ここの値より大きな変異になると,出力する値が無限大になって出てしまいます.
どうしたら正しい値をとるようになるのでしょうか.
些細な情報でも結構ですので,手助け願います.
分かりづらい説明で大変恐縮ですが,ご存知の方おられましたらお願い致します.
http://2sen.dip.jp/cgi-bin/upgun/up1/source/up49199.png
すごい単純な質問なんだけど、
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
>>213 k = [
1 3
2 5
3 4];
for n=1:size(k,2)
disp( A(k(n,1), k(n,2)) );
end
かなぁ。
一服してくる( ・ω・)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)
ベクトル(1行の行列)
A=[ 3 5 2 4 7 6 ]
の成分をランダムに並べ替えるような関数ってありますか?
いろいろ調べてみたけど見つからない……
各要素は固定でってこと?
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
去年は弁当だったのに今年はパンでがっかりんこ
EXPOなんて行ってたのしいのか?
質問です。
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
230 :
229:2010/12/07(火) 14:09:29
スパース行列になるはずなんですけど
今のやり方はones()で同じサイズの行列作って条件に合うように要素を書き換えようとしてます。
for文でm,r,pを書いて、if文を条件に使ってるけど上手くいきません。
いいやり方などあったら教えてください
もしプログラム載せた方がいいなら載せます。
MATLABはパイプに対応していますか?
>>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);
失礼します。
初歩的な質問で申し訳ないのですが、
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自体が反応してないようです
なにか他に必要なものがあるのでしょうか
分かる方がいらっしゃったら教えていただけると助かります
よろしくお願いします
失礼します
初歩的な質問で申し訳ないのですが、
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自体が反応してないようです
なにか他に必要なものがあるのでしょうか
分かる方がいらっしゃったら教えていただけると助かります
よろしくお願いします
すみません、書き込み失敗とでて連投になってしまいました
お目汚し申し訳ないです
なんとか自己解決できました
やはり英語の解説でも
嫌がらずにちゃんと読まないといけないと思わされました
では失礼しました
M-ファイルを編集するときのショートカットで、
emacsでいうところの"Ctrl-l" (カーソルを中央に持ってくる) に
相当するようなショートカットは存在しますか?
octaveでもmexが動くんでしょうか
ggrks
昔Cのプログラムをmatlabから利用するにはmexしかなかったのですが
最近は、もっと便利なものがあったりするんでしょうか?
どこかのサイトでclassをそのまま読み込む方法見た気がするんですが
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文を使わない形にした方が、高速化できると聞いたのですが、
変形の方法が分かりません。どうか、ご教授下さい。何卒よろしくお願い致します。
min(sqrt(a.^2+b.^2))
.^2ってのは要素の2乗のこと。
sqrtは外に出したほうがさらに計算量減るね
mindist = sqrt( min(a.^2+b.^2) )
和をとるのを忘れてた
sqrt(min(sum( a.^2+b.^2 )))
247 :
243:2010/12/30(木) 11:48:39
>>246 aとbの要素数が異なるのですが、大丈夫なのでしょうか?
あと、a.^2、b.^2だとそれぞれのスカラを求めることになるので、
aとbの距離の計算にはなっていないと思うのですが。。。
全然勘違いしてたね。申し訳。
全ての組み合わせから最小距離を探すには2重ループしかないと思う
for使わなくて出来るって言った人に訊いてみたらいいんじゃね?
249 :
243:2010/12/30(木) 13:09:05
>>249のリンク先の話は
数百個のスカラデータの中から最小を探す話だから
2つの行列のすべての組み合わせに対する演算の話ではないな
251 :
243:2010/12/30(木) 19:01:30
>>250 やはりforループを使わないとダメなんですね。
ありがとうございました。
>>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で一般的に言えることで、
常にこの点を意識してプログラムを書くとよいと思う。
253 :
243:2010/12/31(金) 09:06:20
>>252 この方法は全く想像できなかったです。
コードまで組んでいただき、大変丁寧なご解説ありがとうございました!
かなり処理時間が短縮できたので、できることの幅が広がりました。
感謝しております。
>>252さんの例のように、なんでも行列演算にもっていくテクニック
について特にかれたサイトや本はありますでしょうか?
本家にあるTips等は読みました。
流れぶったぎってすみません。
自分のPCにインストールしているMATLABの、使用可能なツールボックスが何か
分からなくなりました。
確認する方法ご存じないでしょうか?
ver って打ってみろ
そもそもmatlabってCとかで組む前にさくっと動作確認をするための物じゃないの?
matlabで高速化頑張っても誰も褒めてくれないでしょ
お前がそう思うんならそうなんだろう、お前ん中ではな
質問です
matlabで理論値を出そうとしているのですが、そこで畳み込み符号を使用します
何度かやってみてはいるのですが、どうもうまくいきません
理論値を出す際に使用する畳み込み符号は、どのように書けばいいのでしょうか?
>>259 何の理論値なのかもっと説明しないと、自分の同業者にしか話が通じないよ。
>>260 dBの値を変化させて、そのBERを出すプログラムに組み込みたいのですが、
よく組み込み式と場所がわからず苦戦しています
ここはscilabの質問もおkでしょうか?
ちょっとforループと3次元プロットで詰まってるんですが、
MATLABとscilabはそこらへん同じなのかなあ…
プロット関連は実装が全然違うからアテにならないと思うよ
MATLABとOctaveですら同じコマンドでも同じ描画出来ないから
>>264 そうですか…
一応コードとか載せたりしてもいいですか?
コード載せてから聞いた方が早いだろ。
>>264 FreeMatだと描画関係でもそこそこ互換性あるぞ。
コード載せます
//サンプル点データ読み込む
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);
これでやると部分行列は正しくない定義ですって言われます
改行ひっかかった
エラー出るのはf(k,i,j)のところです
ガウス関数をサンプル点ごとに作っていってそれの重ねあわせで曲線を作る、という作業をしたいです
読み込みミスなどはいろいろ検証しましたが大丈夫でした
w(k)やx1(k)なんかに実際の数値をそのまま代入して3次元プロットしてもみたんですが
点が出たりするだけで思ったグラフを描いてくれないので、
多分fのところの記述の仕方が悪いと思ってるんですが…どう直せばいいか分からないです
scilabしらないけど、xx1とxx2がベクトルなのにfがテンソルだからエラーなんじゃない?
>>269 テンソルって何?と思って調べたら線形的とかそういうことか
ベクトルや配列で描くxとyの範囲を決めるのはscilabとoctaveだけなんですかね
MATLABは範囲さえ決めたら自動的になめらかに描いてくれるんですか?
これ以外にもxx1とxx2を行列にして計算する方法もあるんだけど
それだと不正な型:正方行列を想定しますって出てしまうんです…
fを足し合わせとかじゃなくxx1*cos(xx2)とかにしたらちゃんと描くので
読み込んだ点を使う事か、forで足し合わせる事が原因なのかなと思ってるんですが…
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ではそういう入力が可能なの?
>>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
これだと不正な型:正方行列を想定しますとエラーが出ます
自分がやりたい事は
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だとそんな感じなんですけど
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);
こうすべきなのではないか。
>>275 ありがとうございます
何とかエラー無しで動いたんですが何か真っ黒で見えないのは仕様ですかね?
277 :
デフォルトの名無しさん:2011/01/13(木) 00:25:17
FFTの返り値がよく分かんない
278 :
デフォルトの名無しさん:2011/01/14(金) 20:24:09
matlabで求めたグラフ上の点から接線を引く方法を教えていただきたいです.
微分すりゃ良いんじゃね?
>>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個のボールの反発係数、直径はすべて異なるものとし、ボールの運動は重力下の質点運動と考える。
といった問題なんですがどなたかやっていただけませんか?
>>281 以前別の言語で書いたプログラムが似たような内容だったのでテキトーに移植してみた。
ttp://codepad.org/ryuJFkdK 大きさと質量の異なる3個のボールが箱の中で重力の影響下で動く様子をアニメーションで描画している。
反発係数は考慮していない(完全弾性衝突)。
MATLAB は持っていないので GNU Octave でテストした。動かなかったらごめんね。
初心者です
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 質問しておきながら書き込み遅れてすいません。
どうもありがとうございました。
りかいできました。
C++に書き直すにはどうすりゃいいの?
C++を習得する
疑いようがない
292 :
デフォルトの名無しさん:2011/01/30(日) 22:25:02
A=[1,3,5];
みたいな行列があって、
BはAの最小値の要素のインデックスを受け取って、
[MinVal,MinInd] = min(A);
B=A(MinVal);
と表現するのを、
1行で書けるような気がするんだけど、パッと思いつかずモヤモヤしてます。
どなたかスカッとさせてくれませんか?
B = A(min(A)) じゃダメなん?
>>292 B=A(MinInd);
の間違い?
そうだとしたら、知らない。
でも、MinValはすでにBと同じじゃないの?
min じゃなく比較演算子で、たとえば
dat = dat(dat > 0);
みたいに書けることを「パッと思いつかずモヤモヤして」いるのだと想像。
プログラミングではなくエラーの質問です
突然あるfigファイルが開けなくなってしまいました
再起動しても治らず、原因不明で困っています
「開く」でそのfigファイルを指定すると、
error using --> open
Invalid argument. Type "help legend" more information.
と表示され、開くことができません
他のfigファイルは普通に開くことができます
解決法を教えてください
よろしくお願いします
ファイルのパス名のどこかに日本語が入ってるとかは?
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
ベクター画像だから重い。
何個かのfigureに分割して保存していって、
最後にビットマップ等にしてから張り合わせるのはだめ?
MATLABのほとんど
MATLABのほとんどの関数がマルチスレッド非対応で、せっかくのマルチコアが生かせない。
シングルスレッドで速いCPUに変えたいのだけど、何がお勧め?
行列のインデックス指定による書換をfor文でぐるぐる行う演算を多用していて、
C++化以外の方法でスピードアップしたい。
コードの最適化とかはもう限界・・・
あなたにmatlabは向いていない
mex化しかないだろ
>>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次元プロットをしたい場合にはどうすればよいですか
306 :
305:2011/03/09(水) 23:23:44.86
無理矢理自己解決しました。
検索もしているけど、少し聞きたいのだが?
MATLABの便利な所が分からない。
何故使っているの?
普通にCとかでプログラムすれば良いじゃない?
Matlabじゃなくては出来ない事って何?
>>307 ライブラリが豊富。というか、ライブラリ集の様なもの。外部とのIFも整ってるしね
インタプリタだからコンパイルしなくていいし、簡単なGUIなら1行ですむ。
>>307 比較ならCよりもFORTRANとの方が妥当だと思う
>>307 グラフィックまで持っていくのが楽。
3D表示がきれい。
画像処理、サウンド処理も楽。
アニメーションも可。
for文使わずに数式準拠でベクトル計算、行列計算ができる。
MATLABを仕事で使ってる社会人って多いんですか?
Adobeのソフトを使う人くらい理工系では常識的なツールなんですか?
313 :
デフォルトの名無しさん:2011/04/22(金) 17:48:50.64
3次元プロットのbar3関数についての質問なんですが
xticklabelを回転させるのってどうするんですか?
続き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間隔の時間をデータとして取得したいです。
続きB
*********
自分で考えてみたのは
長い16進数字羅列のうち
事前に心電図波形を見てR点がいくつ含まれているかを数え
数羅列を、そのR点の個数で分割し
|***R***|**R****|*****R*|
のような各区間でmaxの値を取れば可能かなと考えました。
R-Rの間隔については、比較した*の数×secでそうだなと。
続きC
******
ですが、常にR点は時間軸的に均等な幅で
計測されているわけでもないので
設定した区間にR点が含まれない場合、違った値(P波やT波やノイズ)を
検出してしまう恐れがあります。
また、波形データを入れるたびにR点の個数を入力しないとならないため
汎用性がないかなと思いました。(逐一中身を書き換えなければならないので)
続きD
****
どのようにしたらよいでしょう。
他の良い方法はあるでしょうか?
また上のような考えを実行するにはどのようにしたらよいでしょう?
当方MATLAB初心者ゆえ
具体的な関数や、より良いプログラム内容を教えていただけたらありがたいです。
よろしくお願い致します。
その図のとおりRだけが上に鋭いなら微分して符号が+から−に入れ替わる点の前後が急なところを探す
処理的には1つ前との差分を取って+からーに変わる点を抽出
さらにその前後の差分の絶対値が一定の値より大きいかどうかを確認
>>312 割と使う。でも必須でも無い(業界や職種や規模にもよるが)
使いこなせるのなら就職とかで有利な事は有利かも
ついでにAdobeのソフトもそれ程使わない気も
お尋ねします。
動画ファイルをaviファイルではなくmpegファイルで出力するmpgwriteという関数なのですが、
mpgwrite(M,map,'filename')と指示通り記述しても
「関数としてスクリプトmpgwriteを実行しようとしています」
とだけ出力されて、エンコードが実行されません。解説サイトなどに行ってもやはり
mpgwrite(M,map,'filename')
これで動くとだけ書いてあり、上のようなエラーは発生しないようです。原因としてはなにが考えられるでしょうか。
すみませんがよろしくお願いします。
323 :
322:2011/05/03(火) 19:35:14.49
すみません解決しました。
大変失礼しました。
Matlab/Simulinkについてお尋ねします。
今度Simulinkを使ってモデルべ-ス開発を行うことになりそうなりそうなんですが
お勧めのサイトや書籍ってありますか?
いままでCやJAVAなどはやってきているのですが、Matlabはほとんど触ったことがありません。
amazon等で探した本をちら見してもいまいちピンときませんでした。
ご教授願います。
処理が終了したらMSNメッセンジャーで
メッセージを飛ばすということはできないでしょうか?
>>324 オレもC軽くやってMatlabいったけど
関数を適宜ぐぐりながらやったらすぐ身に付いたよ
328 :
デフォルトの名無しさん:2011/05/11(水) 07:44:01.20
Cで書いて、引数を渡して実行し、結果をMatlabに返す方法を教えてください
M=3個の正規白色雑音時系列データを作成し、加算平均処理を行うスクリプトを
作成したいのですがだれか教えてください。
331 :
デフォルトの名無しさん:2011/05/16(月) 00:15:24.73
C言語と比べてMATLABの利点と欠点を教えてください!
利点:簡単
欠点:高い
333 :
デフォルトの名無しさん:2011/05/20(金) 11:53:33.34
画像に対して二次元フーリエ変換を行なって、
振幅スペクトルのグラフを描きたいんですが、
どのようにすればいいんでしょうか。
>>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関数(関数内でしか使わない関数は、同じファイルに定義可能)
>>335 MatlabはOctave以上に細かいことができると思う。
>>337 MatlabとOctaveはほぼ同じ
ライブラリやGUIやチャート描画関係が違うだけ
無料のOctaveの方がチープ
>>335 そんな頭悪い書き込みするなよ・・・
描画系はコマンド同じでもいくつかのグラフを重ね描きすると結果は全然違う
Matlabはちゃんと順番に描画されるがOctaveは軸やプロットそのものが消えたり不安定
340 :
336:2011/06/07(火) 09:34:37.27
関数ポインタ使えました。@を使ってできるみたいです。
クラスの使い方が未だにわからんwww
341 :
デフォルトの名無しさん:2011/06/18(土) 17:45:26.09
まず服を脱ぎます
画像のシステム、というわりに画像を拡大させければ教えてもらえるわけ無いじゃん
異常に小さい画像や文字でプレゼンテーションするタイプだな
見ている人全員に心の中で「読めねぇよ」と突っ込まれているという
346 :
345:2011/06/19(日) 07:33:03.27
347 :
341:2011/06/19(日) 19:32:35.15
クリックで拡大できると思ってました。
確かにこれじゃ小さくて見えないですね。
>>345 大変わかりやすいです。
本当にありがとうございます。
スレチかも知れないけど知ってる人いたら教えて下さい
Scilabで複数行にわたるコメントアウトの方法が知りたいです
ググってみたけどそれらしい情報が見当たりませんでした
349 :
デフォルトの名無しさん:2011/06/26(日) 20:33:48.74
MATLAB自体は良いのだが、
あの販売会社の殿様商売というか、
あからさまに”売ってやっている”というような態度は
いかがなものかと思っている。
350 :
デフォルトの名無しさん:2011/07/04(月) 22:50:34.03
アマゾンで売っているペーパーバック版は日本語でインストールできますか?
こちらの方が安く手に入るので気になっています
MATLAB日本語版?という意味なのか、日本語OSにインストール出来る?という意味なのか
352 :
デフォルトの名無しさん:2011/07/05(火) 07:26:29.38
日本語OSにインストールする際ということです
言語選択できるインストールパッケージなのでしょうか
mex内でマルチスレッドは出来たんだけど,別スレから,lapack呼び出すとなぜか落ちる.
別スレッドからmatlab関数は呼べないと書いてあったけど,lapackルーチンもダメなの??
だれかやってみた人いる?
>>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文を回すたびにかえたい
ほんとに困ってるんで、誰かお助けお願いします。><
>>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 そうです
海外で販売されているものでも日本語化または言語選択が可能なのでしょうか?
インストーラーの英語なんて超簡単なのに何をびびってるのやら
360 :
デフォルトの名無しさん:2011/07/10(日) 09:38:03.82
USBからの入力でリアルタイム処理をしたいのですが
これって可能でしょうか?
どこかにサンプルコードはないでしょうか?
USBから何のデータを入力すんだよ
文章を書けないバカ多すぎ
362 :
デフォルトの名無しさん:2011/07/10(日) 10:25:57.22
インストーラが英語でもいいんですが、matlab本体を日本語表示できるかということです
でもヘルプの最新版は英語。バージョンアップやらコミュニティサイト利用しようと思ったら全部英語。ライセンス管理も英語。
お前には無理だ。諦めろ。
365 :
デフォルトの名無しさん:2011/07/14(木) 01:33:50.12
マウスカーソルの軌跡の距離ってマトラボを使って出せますか?
>>365 とりあえず、できる。
難しさは、どの部分をどのように実装したいのかによる。
研究でマトラボ使うことになりそうなんですが、何から勉強すればいいかわかりません…
皆さんどうやって学び始めましたか?
>>367 自分の研究分野の公開されてるコードを探して読んで改造する
本当に初歩の初歩だったら何をみて勉強しても良いけど、そこから先は研究分野によって勉強しないといけないことがだいぶ違うから、先輩に聞いたり、その分野のコードを読んだりするのがいいと思う。
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を用いてまわしたいです。
どなたかお願いします。
m=10
d=1
sprintf('土浦%02d%02d',m,d)
って感じで
>>372 なるほど・・・
%を入れて変数にすれば良いわけですね。
明日学校でやってみます。
ありがとうございます。
お尋ねします.
mファイルを実行することでコマンドプロンプトを起動し,
さらに命令を与えることは可能でしょうか?
コマンドプロプトを起動することはできたのですが,
命令を与えることができません.
よろしくお願いいたします.
>>374 外部アプリ呼び出すだけなら system ファンクション一発で
何でもできると思うんだけど、具体的に何したいの?
376 :
デフォルトの名無しさん:2011/07/22(金) 05:00:37.82
障害物回避軌道の生成と運動シュミレーションの準備として、
MATLABにより任意形状の障害物を対話的に配置できるようなプログラムを
つくりたいのですがどのようにプログラムを書けばいいのか
わかりませんどなたか教えていただけにでしょうか。
よろしくお願い致します。
>>375 ありがとうございます.
外部アプリで計算を行わせたくて,そのために
外部アプリのコマンドプロンプト上で何回かコマンドを
与えたいのです.
>>377 具体的にその外部アプリの名前おしえて。
もし僕が持ってる奴なら検証してあげられるから。
引数の与え方やバッチ的な処理の流し込み方はアプリによって千差万別なので、
「外部アプリのコマンドプロンプト」だけだと明確な答えは得られないと思うよ。
>>378 ご親切にありがとうございます.
外部アプリは私的なものでして,具体的には
matlabで外部アプリのコマンドラインを呼び出し,
(!cmd.exeの状態とほぼ同じです)
さらに下記の命令を入力できるでしょうか?
load "ファイル名"
run
print <ファイル名>
exit
たびたびすみません.
>>379 それは Matlab 云々の話ではなくて、その外部アプリの仕様次第です。
たとえばその外部アプリが、引数として指定したファイルを読み込んで
バッチ的に処理してくれるような仕様なら、Matlab からでも実行可能。
382 :
Matlab でもクラス記述できるでしょうか: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
>>382 Mathworks のサイトにある Object-Oriented Programming のドキュメントは読んだ?
もちろん boolean のクラスを作って加減乗除させるくらいはできます。
しかし、積極的にクラスを使った Matlab コードは、確かにあまり見ないね。
個人的には、自分のプログラミングスタイルだと、クラスを使ったところで
Backward compatibility とコードの可読性が落ちる「だけ」というのが、
クラスを使わない主な理由だったりします。
>>382 matlabからmacaulay2呼び出せば良い
385 :
Matlab でもクラス記述できるでしょうか: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 みたいな物にならざるをえないのでしょ
う。
386 :
Matlab でもクラス記述できるでしょうか:2011/07/27(水) 07:05:57.71 BE:822017726-2BP(0)
>>384 ご意見ありがとうございます。382 です。
私の目的は Matlab でブール体係数多項式の加減乗除べき乗算+剰余体演算を実装で
きるかを知ることです。Matlab でブール体係数多項式演算を行うことではありません。
でも、384 さんも、そんな実装は無理だと思っているようです。参考になりました。
ありがとうございました。
こんにちは。
リンク先の「クラス定義の複数のファイルへの分配」に習って
メソッドを別のファイルに定義したいと思うのですが、
具体的にどう書けばよいかわかりません。
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 さらにそのページにある「別ファイル内のメソッド」リンクを辿った先に、
ずばり答えが書かれてます。
389 :
Matlab でもクラス記述できるでしょうか:2011/07/28(木) 05:19:06.70 BE:1233025463-2BP(0)
>>実装は可能というのが最終的な答えですよね? 実装するしないはともかくとして。
(P^5 + P^3+1)%(P^2+P+1)
のようにユーザー側で演算子に新しい意味を与えられるかは言語仕様による。演算子
の代わりに addBool(..) などの関数呼び出しで実装するのならば、可読性が犠牲に
なる。実装する意味がない。そんな実装をするより macaulay2呼び出しのほうがまし。
>>結局好みの問題になるかと思うのですが、
殆どの人間が Matlab のクラスを使わないのならば、Matlab のクラス仕様は糞だと言える。
>>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ではどのように表現すればいいでしょうか?
>>391 C の rand 関数を使った実装がそこまで具体的に分かってるなら
matlab の rand の help を見れば一発で解決すると思いますが、
より直感的に comp = randperm(3)(1); みたいなのもアリです。
>>392 helpを実行したら解決しました!
参考書を見ても載っていなかったんで、助かりました!ありがとうございますm(__)m
いちばんラクなのは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へと変化させた時の波形を出力しようと考えています。
しかし、独学のせいかプログラムが全く書けません(涙)
詳しい方やわかる方、教えて頂けると助かります。
>>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
>>395 形だけを確認したいんだったらMicrosoft mathematicsが便利
399 :
デフォルトの名無しさん:2011/08/06(土) 01:43:47.52
>>396 2重ループでxとθをそれぞれ変化させて、aとbの値を求め、
最後にx,a(もしくはb),θによる3次元のグラフを1つ出力するという方針
なのですが、plot3をどのタイミングで入れれば良いのかがよくわかりません。。
どなたかアドバイスお願いします・・・
>>399 全然違う
独学と言うが何という入門書を読んでる?
ほとんどの入門書に書いてあるはず
>>396の言うとおり、1つの本を決めて最初からサル真似して
打ち込んでいけばそのうち慣れる
401 :
デフォルトの名無しさん:2011/08/06(土) 02:29:54.36
>>400 「MATLAB ハンドブック」です。
>>399以外思いつく方法がなかったのですが・・・
やばいです。。
>>401 その本俺も持ってる。
ちゃんと真似て打ち込みながら読んでる?
全部やらなくても、Chapter 0, 1, 2,と
5の「グラフィックアニメーションテクニック」の部分だけで良い。
ちゃんとやれば1か月かからない
403 :
デフォルトの名無しさん:2011/08/06(土) 02:55:47.08
>>402 真似て打ち込んでいるのですが・・・
週明けには完成させないといけないので急いでいるのですが
詰まってしまいました。。
>>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) );
規制で携帯から
とりあえずこんなんでいいの?
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);
>>405 宿題を丸投げしているあたり、
>>395の独学というのは嘘でちゃんと習ったんだろ?
話を聞いていない自分の責任じゃないのか。
その本のchap.2までちゃんと読んで打ちこめ
holdコマンドをちゃんと調べる
このスレってインストールできない学生や宿題できない学生のたまり場になりつつあるな
夏休みだから仕方ない
410 :
デフォルトの名無しさん:2011/08/07(日) 12:44:35.87
>>406 ありがとうございます。
皆さん申し訳ありませんでした。。
411 :
デフォルトの名無しさん:2011/08/19(金) 04:55:25.23
MATLABって何て読むの?
まっとらぶ?
まとらぼ?
めいっとらぶ?
マットラボって読んでたんだが、間違いなのか・・・
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日間の期限が切れた。
時計を戻した。使えるじゃん・・・。
お巡りさん、こっちです
>>415 PCA で出せる loading と score の符号は arbitrary なので問題ない。
各アプリケーション間でバラバラな上に、
同一のアプリケーションの違ったバージョンでもバラバラだったりする。
419 :
デフォルトの名無しさん:2011/08/20(土) 21:19:39.91
>417
ハックしてるわけじゃないから、問題ないのでは。
タイムパトロールに通報しといた
421 :
デフォルトの名無しさん:2011/08/21(日) 19:05:58.91
>>419 多分民事ですね。マジメにお金払ってる人が騒ぎたくなる気もわかりますが。
それにしてもmatlab高いよ。本体とほんの数種類のtoolboxで150万円なんて。
これと比較したらあのAdobe CS 5.5ですら安くみえます。
そんなこと言うならOctave使えばいいじゃん。
423 :
デフォルトの名無しさん:2011/08/22(月) 00:05:09.44
残念ながらオクターブじゃ仕事にならないんだよ…。matlabのような統合開発環境が必要。
Scilabとかもあるな
仕事なら経費と思うしかない
金が無いなら数式見てゴリゴリ書け
FreeMatでいいじゃん
426 :
デフォルトの名無しさん:2011/08/22(月) 19:41:04.44
>>424 >>425 ま、経費なんで痛くも痒くもないんですが、20万超えると承認もらうのが面倒。
matlabのいいところって、グラフをGUIで直感的にガンガン加工したのちに、.mファイルに変換して、次からは自動で描画させる事ができることろだと思うんです。もしmatlabからその機能がなくなったらOctaveに移行します。
>>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
自己解決しました。
参照渡しとなるように以下のような書き換えが必要だったようです。
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
いずれも上手くいきません。。
分かる方、教えて頂けたら助かります。
>>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次元のグラフでしか表現できません。。
どなたか分かる方、教えて頂けたらうれしいです。
「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)));
のように虚数が含まれる場合はどのような手順で解を導けば良いのでしょうか?
課題や研究ではなく、単純に疑問に思いました・・・
>>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)のそれぞれの条件も出てくると思いますし。
>>436 まぁ少なくとも線形な方程式なら問題なくそれで解けるよね。
ただ複素数にして何を知りたいのかがよくわからないから
何とも言えないところではある。
438 :
デフォルトの名無しさん:2011/09/03(土) 19:27:45.28
>>437 線形でない場合は違うのでしょうか??・・・^^;
線形でない場合って・・・例えばどんな場合でしょうか・・・?
無知ですみません。。
>>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を走らせる前に、だいたいの計算時間みたいなのを知ることって出来ないんしょうか?
厳密でなくても、だいたいでも結構です。
やり方などわかる方、教えてください。
profile
tic toc
でループの中とか時間のかかりそうな部分を計測して
ループの回数をかけるとか
matlab使う前に基本的なプログラミングからやり直したほうがいいと思う。
マクロ・スクリプトとして便利だけどライブラリ任せになるとツール頼みになりますよ。
matlabやoctaveてインタプリタだからプログラミングしても遅いと思うけど。
インタプリタだと、極端な話、例えばN88BASIC互換のインタプリタ言語をPentium4-3Ghzで動作させたものと
25MhzのSH2-7125のC/C++コンパイラでベンチとれば、SH2にあっさり負けますよ。
場合によっては1/10以上の差がありますから数値計算でプログラミングできない人は致命的ですよ。
ちょっとした電卓代わりなら良いですが、便利だからとクラスタでインタプリタ動かそうとしてる人はリソースの無駄遣いで、
そんなもの幾ら高速のンピュータでもリソースは足りませんよ。
>>444 は、いまどき珍しい原理主義者だなぁ。
例に挙げてるのもホントに極端なものだし。
「インタプリタだから何でもかんでも遅い」っていうのは、
頭が固くて、なおかつ自分でベンチとってないお年寄りの念仏でしかないよ。
Matlab は、コードの可読性と処理速度のバランス面で、たいへん優れている。
Matlab で致命的に遅いのはグラフィックスまわり。描画の方。レンダリング重すぎ。
質問よろしいでしょうか?
mex -setup のコマンドを用いてコンパイラの設定を行おうとしたところ,
カスペルスキーから警告されました.そして,操作を許可したのですが,その
直後にMatlabが落ち,起動しなくなってしまいました.
mex -setup のコマンドが正しく実行されない理由についてお教え下さい.
宜しくお願いいたします.
C/C++でライブラリに頼らず書けってのか。
プログラミング初心者にそんなこと言ってたら
主眼の研究に取り掛かるのが
いつになることやら。
デバッガ、lint、プロファイラ、お手軽グラフィックが完備した
マトラボでさっさと研究を進めるべき。
マトラボでプログラミングに慣れて来たら、
Cなりアセンブリ言語なりCPUアーキテクチャなり
勉強すればよい。
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];
初歩的な質問で申し訳ないんですが
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
ないあるよ
ありますん
455 :
452:2011/09/14(水) 21:54:54.81
以下のコードで、
フィルタをとおさない場合、信号とそれ以外のスペクトルは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));
それはMatlabのせいじゃなくて、フィルタってそんなもん。
計算した結果を変数エディタやグラフにすると10^-4よりも小さい値は0になるのがデフォですか?
matlabで行列名に番号等を付けて、ループを使って自動的に回したり作成したいんですが、
どうしたら良いですか?
たとえばA1,A2,A3…A100などと100個の行列を作成したい場合、
行列の名前に数字等を付けて、
for i=1:100
A[i]={6,6,6}←ここの値、式はなんでも良いのですが・・・
end
とかにして、意図した数の行列を作成したりするなど、行列の名前につけた数字に対して
iなどの変数を用いたりすることは可能でしょうか?
またどういう表記にすれば良いのでしょうか?
初心者の質問ですみません。
もし本当に 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ではどんな感じで書くのでしょうか?
libpointer が使える環境なら、
それ使って C での実装をトレースすればよい。
でも原理的に連結リストを実現するために必要な情報さえ把握できていれば、
libpointer を使わずに自分で組む方法も自然と頭に浮かぶと思うけど。
463 :
461:2011/09/22(木) 17:58:37.61
>>462 レス有難うございます。
当方Cをほんの少し知っている程度の人間なのですが、
今後Matlabも少々扱わなければならなくなり
Matlabの入門書を読んでいて疑問に思った次第です。
libpointerを使わない場合は、
構造体のアレイや、クラスを使うのでしょうか?
>>463 そういう認識で良いと思います。
Matlab みたいに配列や行列の可視化が容易な環境の場合は、
変に C でのポインタの概念に縛られない方がよいかと。
465 :
459: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を計算しています。
どなたか分かる方、どの部分にどのようなコードを挿入すべきか教えて頂けると助かります。
これが馬鹿には見えないコードってやつですか
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
470 :
463:2011/09/22(木) 21:50:16.27
>>464 発想を切り替えなくてはならないということですね。
アドバイス有難うございました!
>>466 1. 連番のファイル名を作る ...
>>460 参照
2. Figure を保存する関数 ... saveas
3. Figure を消す関数 ... close
というわけで、help コマンドでこれらの関数の使い方を覚えて試行錯誤すべし。
あと、Figure のハンドルの概念を help gcf を実行して学んでおくと後々便利。
Figure を表示しない(隠す)というのは
>> fh = figure;
>> set(fh, 'Visible', 'off');
みたいにして Visible プロパティを off にすれば実現できるけど、
>>466 のやりたいことを推測する限りでは本質ではない気がする。
>>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かけるので
結局次数が倍になると理解していますが、合っていますでしょうか?
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 は複数のフィルタを合成する関数です。
決め打ちでフィルタの次数を倍にする訳ではなくて、その用途にも使える、ということ。
>>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さん
お返事ありがとうございます。
無事ファイルの保存が行えました。助かります。
保存先が現在デスクトップ上に勝手に保存されてしまうのですが、
特定の場所に保存したい場合はどうしたら良いのでしょうか?
u=a.^2+b.^2
v=c.^2+d.^2
479 :
デフォルトの名無しさん:2011/09/23(金) 21:52:50.49
やっぱり、MATLABの記法がすかん。
fortranやC++の方がまだまし。
インデックスが1から始まるのが不思議。Fortranもだっけ?
不思議に感じるのはC脳だからだろうか?
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)];
482 :
481:2011/09/24(土) 00:33:10.07
483 :
デフォルトの名無しさん:2011/09/26(月) 16:58:48.49
matlabって乗算とかの時に*じゃなくて.*とかって書くときあるけど、なんで?
深い意味あんの?
>>483 超大有り
* は行列の掛け算
.*は要素同士の掛け算
A=[1 ; 2]
A .* A = [1 ; 4]
A * A' =
[ 1 2
2 4]
これを間違えると超ハマる。
A^2は世界中で毎分、相当数のバグを生み出していると思われる
486 :
デフォルトの名無しさん:2011/09/28(水) 15:09:16.59
おすすめの教科書を教えてください
488 :
デフォルトの名無しさん:2011/10/01(土) 01:08:11.04
saveasをつかって画像を保存しようとしたら
Need a handle to a Figure object
って出たんだけど、直し方知らないですか?
>>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を使うと計算時間が遅くなったりすることはありませんよね?
プロファイラが標準でついてるんだからまず試してみるべき
493 :
デフォルトの名無しさん:2011/10/02(日) 18:50:42.53
自己解決しました
495 :
デフォルトの名無しさん:2011/10/04(火) 14:59:59.55
z平面に極をプロットしたグラフを
円グラフみたいに扇形で色分けしたいんですが
どうやってやればいいのでしょうか?
それは
借金をこさえてしまって貧乏なんですが
どうやって金持ちになればいいですか?
っていうくらい漠然とした質問だと思います。
せめて、何を試してどういう状態のグラフが手元にあるのか説明しましょう。
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平面にプロットしました。
>>497 zplane で出力したグラフを後から色分けしようとすると大変だと思うので、
kai の値を参照して、グラフ自体は pie で描画するというのはどうでしょう?
>>498 レスありがとうございました、助かります。試してみます。
500 :
デフォルトの名無しさん:2011/10/06(木) 15:13:16.29
>>498 pieのグラフとplotのグラフを重ねて表示させる方法を教えていただけないでしょうか;
重ねて表示するだけなら 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);
いつになったら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を削除すると、繰り返して座標を取得ができます。
どうすればできますか?
504 :
500:2011/10/10(月) 04:24:08.71
学校のPCでマトラボプログラミングをしていたところ、
license manager error -15
というメッセージが出て、
以降起動できなくなりました。
原因と解決策を教えてください。
トラブルシューティング読んでも良くわかりませんでした
>505
学校のPCの管理者に報告。
>>505 神の啓示だと思って
octaveに乗り換える
OctaveとかFreeMatは細かい所でMATLABと違うから困るよな
509 :
デフォルトの名無しさん:2011/10/12(水) 05:00:42.59
matlabは年に2回とか訳の解らんペースで更新するからなぁ
しかも結構コロコロ関数が変わるし…
それはそうとどなたか
>>503頼みます
>>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;
>>510 どうもありがとうございます! test.mはきちんと動きました。
でもguideを使った自分のやつに持ってくるとやっぱりダメだった(´・ω・`)
guide使うのって良くないの?
自分はmatlabのGUIは
>>503の時点でguideのチュートリアル見ながら始めて3時間の初心者なので
こういうユーティリティに頼らないと簡単なものでもGUIは難しいです
> axes1_ButtonDownFcn の最後にset(hObject, 'ButtonDownFcn', @axes1_ButtonDownFcn);
はエラーが出てうまく動きませんでした。(これもtest.mではきちんと動作する)
@って関数ポインタみたいなもの? 自身の中で呼び出すという行為の意味もまだ理解できてません。
これは意外と難しいものに手を出してしまったかな;
512 :
510: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いわゆる逆にオンになるとやれる事が増えるって聞いたんだけど何がどうなるの?
教えてもらえませんか??????
詳しくないけど、3進なら情報量は増える。
でも2進はその単純さからCPUやRAM、ハードディスクの
高速化・高集積化が可能になったのでは?
それに高電圧、中電圧、オフじゃなくて、
逆の電圧というのは回路が複雑になりそうだ。
電子工作をほんのちょっとやった経験からすると
といっても「中電圧」というのも難しい。
オン/オフなら、とにかく閾値を超えるか抑えるか
だけ考えればいいから
517 :
デフォルトの名無しさん:2011/10/14(金) 01:42:37.37
>>513 で書き込んだ者です。
saveを使ってworkspace内の変数(全て)をそれぞれ保存していく方針を立てました。
現在、走らせているmファイルはデスクトップ上に置いているのですが、
saveを使ってmatファイルを保存する際、
結構な数のmatファイルがデスクトップ上に出来てしまうため、
デスクトップ上のフォルダに保存させたいのですが、
保存先を指定するコード、もしくはコマンドを教えてください・・
その質問の本質は、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では非対称行列の固有ベクトル(特に固有値が重解をもつ場合)は
どうやって求めているんですか?
522 :
511:2011/10/14(金) 22:13:55.22
>>512 うーむ、なるほど。これはもっと勉強してから後で作り直すとして
今は別な方法でやってみるよ。ありがとうノシ
>>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などという表示はなかったので・・
どなたか原因がわかる方、教えてください。
>>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 ==> 〜〜」
っていう表示が出たんだけど,これって何?
何かマズイってこと?
matlab初心者です。
ゼロ行列の作り方です。ゼロ行列のサイズが大きいときにはスパース行列にしないとメモリーや計算測度がおそくなると思います。
通常ゼロ行列は関数zers()で作りますが,自動的にスパース行列として作られるのでしょうか。
もしそうでないならスパースゼロ行列をつくるコマンドを教えて下さい。
A=spconvert([N,N,0])でいいでしょうか。
>>529 whos という関数があるので、それを実行して
zeros によって出力された変数の正体を実際に自分の目で見て下さい。
スパースゼロ行列は sparse で簡単に作れます。
>> z = zeros(100);
>> sz1 = sparse(z);
>> sz2 = sparse(100, 100, 1);
>> whos z sz*;
531 :
stranger:2011/10/16(日) 16:28:08.00
はじめての訪問者です・・・
関数を定義した.mファイルと、メインの.mファイルを作って、
メインのファイルの中で、
for文で何百回か関数を呼び出すようにしてあるんだけど、
恐ろしく時間がかかった。
関数呼び出しって時間かかるの?
>>531 プロファイラ使って自分で確認するべし。
533 :
stranger: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.
って出る。
どうすれば??^^;
a=cell(10,1),b=cell(10,1)です。各セルにはN*Nの正方行列を格納します。
aとbのi番目のセルに格納されている行列の積を新しいセル配列に格納したいのですが,
for i=1:10
c
end
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
>>
なぜこのような誤差が出てしまうのでしょうか。
ヘルプの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
みたいな簡単なものをなぜ載せない
>>536 A'は複素転置、transpose(A)は行列転置だから内部の計算方法が違うかもしれない
こういう話はサポートにGO!
同じlapack使ってるOctaveやFreeMatのフォーラムでも聞けばわかるかもしれんな
>>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'];
この行で「添字による代入の次元が違います」と出てきたのですが、この代入の仕方ではだめなのでしょうか。
この記事を紹介してくださった方にメールを送ってみましたが返ってこなくてここで質問してみました。
初歩的な質問かもしれないですが分かる方いらっしゃいましたらよろしくお願いします。
>>541 その式中の変数それぞれのsize()は?
543 :
デフォルトの名無しさん:2011/10/21(金) 03:15:51.60
sinc関数を使いたいのですが、未定義の関数と出てしまいます、何が原因なのでしょうか?
>>543 Signal Processing Toolbox を買ってないからでしょう。
シンプルな関数だから自分で書くのも良し。
octave から丸ごと持ってくるのも良し。
545 :
デフォルトの名無しさん:2011/10/25(火) 04:06:20.39
matlabで数時間かかると思われる計算をさせる時、
走らせた後、しばらく(仮に1時間)経って、現在全体のどれくらいの割合まで計算が行われたか調べるにはどうすればいいですか?
一応、計算所要時間や開始、終了時刻はdispで最後に表示させるようにはしているんですが・・・
どなたかご存知の方教えてください。
数秒おきに進行状況を出力する
547 :
デフォルトの名無しさん:2011/10/25(火) 16:21:23.25
スクリプトscript内でユーザ定義関数ufuncを使って,scriptを実行するとエラーメッセージ「関数としてスクリプトufuncを実行しようとしています」がでます.
スクリプトフィルscript.m,関数ファイルufunc.mはサーチパス内に保存しています.
原因がわかりません.
script.m内の記述
…
y=ufunc(x)
ufunc.m内の記述
function y=ufunc(s)
%
y=x+…%計算内容
ちなみに簡単な場合はうまくいきます.
エラーが発生した実際の関数はかなり長い記述です.
よろしくお願いします
>>549 549です.
function y=ufunc(s)はfunction y=ufunc(x)の間違いです.
>>549 Matlab ではスクリプト内でユーザー定義関数を使えません。
それはいわば、Matlab のコマンドプロンプト上で
突如 function を使って関数を定義し始めようとするようなものです。
ユーザー定義関数を別途ほかのファイルに書くか、
スクリプト自体を関数に変更することで対処すべし。
>>549 which -all ufunc
の結果は?
>>551 549です.
ユーザ定義関数は別のファイル(ファイル名ufun.m)で定義し,スクリプトフィル内ではufuncを呼び出すだけです.
ですから,ご指摘のような状態ではないと思います.
>>552 which -all ufuncのufuncのところは私が定義したユーザ定義関数名をいれますか,それともこのままですか.
>>552 549です.
which -all の使い方がわかりました.
which -all ユーザー定義関数名
を実行すると,ユーザ定義関数名が,正しいフルパス付きで返されます.
何か解決策のヒントになりましたでしょうか.
>>555 誤解した、556は無視して。
「ユーザー定義関数名」を何か適当な他の名前に変えるとどうなる?
>>553 斜め読みしてすっごい勘違いしてた。ゴメン。
短い ufunc.m と長い ufunc.m が存在してて
長い ufunc.m を呼び出した時だけエラーが発生するということなら、
単に長い ufunc.m の頭から function y=ufunc(x) が抜けてて
関数がスクリプト扱いされてるんじゃないかという気がする。
>>555 which -all 関数ファイル名 in スクリプト名
はどうなる?
>>549 > script.m内の記述
>
> …
> y=ufunc(x)
の
「y=ufunc(x)」
を
「ufunc」
に書き変えてから、この行にプレークポイントを置いて、
F5でここでストップしたらF11すると何が開く?
>>559 正しいパス付のファイル名が返されます.
549です.
原因がわかりました.
恥ずかしながらおバカな間違いでした.
関数定義文のキーワードfunctionがfuncionとタイプミスしていました.
お騒がせしました.
ところでこのような間違いを自動的に検出しれくれるエディターの設定はないでしょうか.
VB.netのエディタでは自動的に発見されるのですが.
>>562 functin y=ufunc(s)
とすると付属エディタでの色が
hold on
なんかと同じだろう。
ufunc.mというスクリプトの先頭で
functin('y=ufunc(s)')
と関数が呼び出されていると解釈される。
その色でおかしいと気付く
>>563 562です。
ありがとうございました。
まだ使い始めで色違いに気づきませんでした。
>>565 Matlab 標準の機能としては無かったと思う。
fill でシコシコ関数を自作して、それらしく見せることはできた。
567 :
565:2011/11/01(火) 14:57:46.27
>>566 ありがとうございます.
fillで代替するように試してみます.
2次元のデータを引数として、2次元データの散布図をプロットする。
かつデータから求めた回帰直線をプロットする。戻り値として回帰直線 y=ax+b の a と b を出力する関数を作成する
手順がわからず困っています
どなたか上の問題について教えて下さい
>>568 ここは宿題丸投げスレじゃないぞ
検索したらすぐ出てきたが
>>569 検索しても出てこなかったんですけど…?
どこのサイトですか
回帰直線なんていくらでも出てくるだろ。MATLAB関係なしにちゃんと勉強しろ。
理解できなかったら今すぐ大学やめていいレベル。
2次元データのプロットもplotで一発だし。ヘルプ読めば頭使わなくて出来るだろクソが。
574 :
デフォルトの名無しさん:2011/11/03(木) 22:26:25.67
4等当たってledスタンドもらったWWW
575 :
デフォルトの名無しさん:2011/11/05(土) 14:07:52.77
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ってテキトーに決める以外,方法はなくないですか?
コマンド: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) )を比較できるグラフを出力する」ものです
このプログラムは合っていますか?間違っている箇所があれば教えてください
>>579 日本語が間違ってる。
内容を理解してないのがバレバレ
>>580 それでは、
>>579のプログラムが何なのか教えてください
これで合っているはずなんですが…
>>581 合っているはずなら、推定量の不偏性について調べる。
その後コードを読んで考える。
>>581 ちなみに合って無いからな。
宿題はちゃんとやれよ
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)
メモリに入りきらない大きさの行列を扱いたいのですが、
MATLABである程度効率よくOut-of-coreを実現する方法はありませんか?
OSのスワップを活用する方法は実用的ではありませんでした。
スワップを使うのが実用的でなかったというのは、速度的にということかな?
まぁ小手先の技は使えないでしょう。
Parallel Computing Toolbox 一択では?
>>584 ありがとうございます
今回の一件で自分のMATLABに対する未熟さを痛感しました
これを肥しに勉強します
知恵袋で質問しましたが、回答してもらえなかったのでどなたか回答お願いします。。。
入力するデータはx軸、y軸、z軸それぞれにつき1000点のデータ点で、
これをつかって3次元グラフに起こしてアニメーションにして動かしたいです。
具体的には出力結果は
http://beta-infinite.blogspot.com/2007/11/blog-post_11.html このブログに挙げられている感じにしたいです。
グラフを作った後、アニメをする所でつまずいてます。。。
関連書籍を軽く読んでみましたが、関数をアニメーションで動かすのは見つけましたが、プロットから動くグラフを作るのはありませんでした。
>>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さんの仰るように分散配列でメモリを増やせるのですが
貧乏なもので・・・
592 :
586:2011/11/12(土) 00:45:39.12
>>591 なんか、いちいちやってることが上級者すぎるんですが、
本当に西暦 20011 年から来たというオチではなかろうね?
演算が簡単だから、というのは分かるんだけど、
そこまで gigantic な行列を扱おうとしてるのなら、
そもそも Matlab を選ぶべきではないのでは。
何が目的なのか分からないけど、
むしろ自作のプログラムをキワキワの行列演算ライブラリとして商用化して、
そのアップデートをライフワークにした方が良いのでは?
> お金があれば、
>>586さんの仰るように分散配列でメモリを増やせるのですが
> 貧乏なもので・・・
これ、
「いやー、弁護士免許も医師免許も持ってるんですけど、
近所のスーパーでバイトしようと思って面接に行っても落とされるんですよね 」
って言われてるような違和感を覚える。
マジレスすると、仮にランダムアクセスがネックになっているというのが事実で、
なおかつシーケンシャルにスワップを操作する部分を Native C で書いてるのなら、
そのプログラムを mex で有効活用できるかどうか調べてみるのが先決な気がする。
593 :
584: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が変更された事を知らせ、すぐ反映してもらう方法はありますでしょうか?
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メーカーに見積もり出してみたら?
>>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の対角行列を作るにはどうすればよいでしょうか?
onesにaかけてdiagとか
a * eye(25)
604 :
591:2011/11/15(火) 20:18:22.98
みなさんありがとうございます。
>>592 >そもそも Matlab を選ぶべきではないのでは。
実際はそうですが、過去のコードを活かせたらいいなと思いまして。
>むしろ自作のプログラムをキワキワの行列演算ライブラリとして商用化して、
>そのアップデートをライフワークにした方が良いのでは?
商用Out-of-Coreライブラリは既にいくつか存在します。
mex化はもちろん検討したのですが、行列をディスクに置いてしまうと
ほとんどのmatlab関数を自分で作る羽目になって
matlab使う意味がほとんど無くなってしまいそうです。
>>597 行列1つのサイズが200ギガバイトなので、そんなには必要ないです。
>>598 サイズはその程度です。今は実用性の検証段階で、
密行列でやってます。
目的はあまり詳しくかけませんが、
大規模非線形システムのシミュレーションです。
x=[];
x(10)=0;
だと横ベクトルですよね。
そしてx(:)は縦。
どちらかに統一しないのはなぜですか?
> 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の対角行列を作りたいのですが、
作り方を教えてください。
blkdiag
610 :
デフォルトの名無しさん:2011/11/15(火) 22:45:11.14
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
長すぎ
>>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
>>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], : ) ;
を書き直したいのですが.
>>616 a = a([1:N-1, 1, N+1:end], :);
じゃないの?
quiverで表示させたベクトルの矢じりの大きさを統一するのってどうやるんでしょうか
620 :
619:2011/11/22(火) 01:34:37.42
訂正:
普通は
>>615の後者を使うんだけどなんで前者?
621 :
デフォルトの名無しさん:2011/11/22(火) 11:18:40.57
>>620 数式の中で使いたかったのと、代入文を省きたいと考えたので後者を選びました。
>>617 試してみましたが出来ませんでした。。
>>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 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 だと大丈夫です。
質問させてください。
一種類の画像を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
631 :
631:2011/11/25(金) 11:01:18.86
質問です。simulinkでシミュレーションする際に計測された値によってシミュレーションの挙動を制御するためのプログラムを作りたいと思います。
ここでS-functionブロックを使ってif文を使ったプログラミングに挑戦しました。
しかし、エラーがでてしまいます。そもそもS-functionでif文が使えるかも判りません。
以下にプログラムをさらしますので、まずいところを教えてください。
632 :
631: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);
633 :
631: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);
634 :
631: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)
として対角要素をとるしかありませんか?
対角要素取る方法では、巨大な行列の場合は遅くなる。
ぱっと思いついた2次元配列限定で汚いけど、対角取るよりはましな方法は
A((cols-1)*size(A,1)+rows)
確認はしていない。
>>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はトロイので却下) が一番だけどね
貧乏人本気でかわいそす・・・
最近はscalalaに興味出てきた
質問です。
mファイルで外部プログラムを呼び出して計算を行わせているのですが、
外部プログラムがファイルが作成するまでmファイルの計算を待機させる
何かいい方法はありませんでしょうか。
よろしくお願いいたします。
>>644 外部プログラムが ext.exe,
ext.exe が作るファイルを ext.dat とするなら
system('ext.exe');
while(~exist('ext.dat', 'file'))
;
end
disp('I found ext.dat.');
みたいな感じでいけると思う。試してみて。
>>645 できました!
助かりました。有難うございます。
647 :
デフォルトの名無しさん:2011/11/29(火) 17:17:06.45
matlab購入を検討しています。
用途は、大学院で信号処理の研究に使っているので家でも勉強できるように買いたいと思っています。
そこで質問なのですが、2011aと2011bの違いってなんですか?
amazonで2011aが割安で販売されていたので、機能としてほぼ変わらないのであればaを買おうかと考えています。
649 :
デフォルトの名無しさん:2011/11/29(火) 18:37:46.42
大学院にてmatlabを使用して画像処理を行う事になりました
そこで研究室にあったr2007bをインストールして起動しようとした所
一瞬だけmatlabのロゴだけが映る状態になりmatlabが立ち上がらない状態になりました
タスクマネージャーで確認したら一瞬だけ立ち上がっては消えるみたいです
管理者として実行しようとした所、発行元が不明になっていました
ウイルスソフトといったセキュリティ等に引っかかっているのでしょうか?
OSはwindows7の32bitオペレーションシステムを使用してます
>>649 きみはoctaveを使ったほうがいいよ
Fラン大学院でもMATLAB使えるのかよ・・・
明後日テストがあるのですが・・。
この問題がわかりません。
問1 総合環境であるMPLABはソースファイルの作成から、ビルド
そしてターゲットマイコンへのダウンロードといった一連の作業が
同一ソフトウェア上で可能でした。全く新しいプロジェクトを作成
する場合についてその作業を説明しなさい。(キーワードを仕様すること)
キーワードは:ウィザード、ソースファイル、ビルド、ダウンロード、PICKit2、接続
お願いします。誰か答えを教えてください。
>652
ここはMATLABスレ。それは別のスレどころか別の板だ。
>>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
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); % ブラック・ショールズ価格
沢山いると思いますし、僕でもできます。
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
お願いします・・・
simulinkを使って電力系統を模擬するのだけど、その中でソースブロックの値を変更する必要があると考えています。
頭が足りないので、いい知恵を貸してください。
一つはmatlabのコマンドを使ってsimulinkを起動させて、一定時間シミュレーション後に一時停止させて、変数を変える方式。
ただ、これはそんな一時停止できるようなコマンドを知らないのが問題です。
方法2
S-functionブロックを使って、simulink内で解決する。
S-functionの使い方が判らない。入力された信号を計算するようなプログラム文しか見たことがないので、このような『判断』を下す系の想像ができないのです。
申し訳ないですけど知恵を貸してください。
ググり方が悪いようで分からなかったので質問させてください。
ワークスペースに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
の方が、今後のバージョンでさらに引数の数が
ごちゃごちゃ変化した時に保守しやすい気がするんですが
あまり見かけないのは何か理由があるのでしょうか?
>>649 症状から見て、おそらく R2008 からフィックスされた有名なバグ。
bugreports/398525 を見て、ユーザー環境変数をいじれば、
改善される可能性大だと思う。
>>664 strtok, sscanf, strread など便利な関数があります。
>>665 好みの問題では?
プログラムの質問です。
位相によって1か0を出力するプログラムを組みたいです。
例えば位相0°〜120°の間は1を出力する。しかし、それが終わったら0を出力する。
しかし、matlabはラジアン表示です。更に言うのなら位相360°を超えた場合の問題が有ります。
位相360°=0°で考えますが、ラジアン表示ではただ増えていくだけです。
どのようにすれば、定期的に出力できるようになるのでしょうか?
>>667 まず紙と電卓で自分でとける?
例えば2000°ならどうやって手計算する?
そこから始める
>>667 計算機の替わりに小学生にバイトで計算させるさせると考える。
子供にも出来るよう計算の手順を丁寧に紙に書く。
計算機は小学生よりアホだからそれくらい丁寧に書く必要がある。
それが完成したらそこからコードにするのは簡単。
>>670 お前人に教える力ないな…とは言え
>>667がアホすぎてビックリではあるが。文系か理系Fランなんだろう
πは180°と同じことということも知らないんだろ
672 :
670:2011/12/08(木) 23:05:27.10
>>671はさぞかし教える力があるんだろうから、
教育の手本というものを見せてくれ。
逃げないでね
>>672 __、
,r´⌒ヽ,⌒ヽ,ヽ
(⌒)、 .人 λ\、 ._____
\. \ 、 ヽ./ ー ー\
|\ \ ヽ./ ( ●) ( ●)
| \ \ / (__人__) \ はいはい、どーもすみませんでした
|. \ | ` ⌒´ |
. |. |.\_ノ\ /
. |. | | \______/
. | ) .| . . ̄ ̄
. | | .|
| |.| .|
. | | .| .|
/ / / ヽ,
(__ノ ヽ、__つ
教える力とか言う以前に教える気がないと思うのだがw
πは180°は知ってたが、教える気が出ないほど教える力が無いんだろう
どなたか imwrite 関数を使って複数ページの tif 画像を single か double で書き出す方法を知りませんか?
uint16 などの整数値の画像なら問題なくできるのですが、浮動小数点値だとめちゃくちゃな数値で書き出されてしまいます。
MATLAB EngineのC#のいいラッパーないですかね
有名所のやつ、作り込んでくるとなんかメモリエラーが出始めるんで
678 :
デフォルトの名無しさん:2011/12/10(土) 02:11:57.34
>>675 以外と、「なぜπ=180度なのか?」を即答できるヒトは少ないんだよな。
大学の研究室に配属になった4年生に時々聞いてみているんだが。
min( . )の複素数型での最小(abs( . ))ってオーバーロードは普通なの?
最小(real( . ))の方が実数の変数に虚部のゴミが混入した時に安全な気がするけど。
という愚痴です。やっと寝れる
680 :
デフォルトの名無しさん:2011/12/10(土) 11:44:40.96
すみません,1次元の偏微分方程式の解を格納した
uというN×Mの行列があるのですが,
このuの1行目から最後の行までのそれぞれの行ベクトルを
順に表示させたいと考えています.
つまり,アニメーションのように時間発展を表示させたいと考えています.
(今までは単にwaterfallなどを使って表示していました)
やり方などわかる方おられれば教えてください.
また,出来ればそのアニメーションの様子をavi形式などにして,
動画ファイルとして保存したいと思っています.
よろしくお願いします.
>>680 figure(1)
for j = 1:size(u,1)
plot(u(j,:))
pause(1)
end
みたいなもので足りる単純な話ではない感じ?
>>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行目
って感じで・・・
687 :
デフォルトの名無しさん:2011/12/11(日) 13:35:23.22
688 :
デフォルトの名無しさん:2011/12/11(日) 15:25:25.98
surfとかwaterfallで表示された結果はについてなんだけど,
matlabのウィンドウならzoomとか回転とか出きると思うんだけど,
当たり前だけど画像形式で保存するとそういう操作はできなくなってしまう
保存後,保存先でもzoomとか回転とか出来るようにするには
どういう保存の仕方がいいのだろうか・・・?
690 :
デフォルトの名無しさん:2011/12/11(日) 23:38:54.45
あ
symbolic mathつかってるんだが、一部のパラメータをスライドバーで変えながらプロットを見るのってできないかね?
例えば a*x^2+b*y^2-1=0 のaとbが可変、みたいな
シミュリンクじゃ、駄目なのか?
693 :
デフォルトの名無しさん:2011/12/13(火) 23:32:45.95
関数によって返された行列の一部分を使いたいのですが、
これは一度変数に入れなければならないのでしょうか。
例としては、
hoge=eye(10);
hoge=hoge(:, 8:10);
を一度hogeに入れずに一部分を抽出したいということです。
>>693 arrayfunやmat2cell/cellfunを駆使すれば出来る場合があるが、
Matlabにあまりそういうワンライナーを推奨していない気がする
696 :
デフォルトの名無しさん:2011/12/15(木) 22:33:17.71
Matlabの使い方をマンツーマンで教えてくれるような先生や、
バイトみたいに個人レッスンをしてくれる人を探すことはできますか?
初心者で時間もないのに、Matlabを使いこなさなければいけないようになりました。
そういう人やサービスあるなら東京近辺がいいです。。
mathworksが定期的にセミナーやってる
それじゃダメなんだろ
割れてるからなw
>>693 function part(array, varargin)
% Example: part(eye(10), ':, 8:10')
eval(['array(', [varargin{:}], ')']);
勧めないが
>>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
とする。
matファイルのバージョンを確認したら?
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
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
>>712 t=0:dt:t;
↑
これ、tに値を入れる前にtを使ってないですか?
714 :
デフォルトの名無しさん:2012/01/14(土) 21:04:32.91
>>713 返信ありがとうございます。
使っていないです。
使っていたとしてもtは書き換えられるので大丈夫かなとは思います。
>>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番目のグラフかわかるようにしたいのですがその場合
どうすればいいでしょうか?
タイトルつければいい
>>717-718 具体的には
for k=1:n
figure(k);
何か描画
title(sprintf('Figure %d', k));
end
とするといいんじゃないかな。
720 :
デフォルトの名無しさん:2012/01/19(木) 20:29:52.01
最短距離法により
ある点Aからある1本の線の一番近い座標を求めたいのですがどうすれば良いでしょうか?
ちなみに線は直線とは限らず曲線の場合もあります。ですから一番近い座標が複数あることもありえます。
最短距離法の式や使い方がわからなくて困ってます。
よろしくお願いします。
>>703,704,705
解決しました,ありがとうございます.
すいませんOctaveの質問なんですがMATLABでも同じかなと思って質問します
行列をsaveしたときに行頭にスペースが出来てしまうんですがこれを作らない方法ありますでしょうか
>>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で出すので、
ファイルが微妙に違う。
簡単な微分方程式
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) の値も変わってきます。
>>728 x'(t) = (x(t))^2, x(3) = 1 なら
解析解は x(t) = -1/(t-4)
diffeq は
xdot = x.^2;
じゃないの?
730 :
728:2012/02/24(金) 09:24:49.51
すみません、解析的な解は検算した時にx'(t)を計算した時にだした
式をまちがって書いてしまいました。
function diffeq のほうをおっしゃるとおりに書き直したらうまくいきました
ありがとうございます。
ここってscilabやxcosに関する質問もおk?
xcosで作ったモデルの周波数応答取りたいんだけど、なんかいい方法ない?
思いゆつくのは、一旦、応答をテキストに書きだしてfftすることぐらい。
他に方法あればご教示願います。
グラフでダブルYってどうやって出したらいいでしょうか
plotyyのこと?
それでした。どうもありがとうございました。
axisはどうやってやるんだろう?片面しか効かないけど・・・setとか使うのかな・・・
738 :
デフォルトの名無しさん:2012/04/23(月) 10:04:45.31
ステップ入力のグラフをかきたいのですが、どうやればいいですか?
力技だけど
x = [-1, 0, 0, 1];
y = [ 0, 0, 1, 1];
plot(x, y);
って感じでいけない?(今手元にMatlabなくて検証してないけど、できなかったらスマン(´・ω・`))
( ・ω・)y─┛〜〜
741 :
デフォルトの名無しさん:2012/05/01(火) 13:16:49.11
sin関数みたいに、ベクトルや行列を渡すとその要素に作用して結果を返す関数って
どうやって作るのでしょうか。
forやarrayfunで出来ることは出来るのですが、
並列化されないためか、遅いです。
関数内で .* みたいに要素ごとに処理する演算子を使えば普通にできる
745 :
デフォルトの名無しさん:2012/05/03(木) 17:24:56.72
GPUって簡単に使えるの?
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など、繰り返し文に入れるとエラーが起きてしまいます。
どうしてでしょうか?
自己解決しました!。
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初心者で窓掛け自体をしっかりと理解していないのもありますが
上手く次元を合わせられないのですがどう改変すればいいですか?
cos()の中にtone()が入っているので、なんか音が歪みそう。
ハミング窓をかけるのは、音圧をフェードイン・アウトさせる目的?
致違いで申し訳ございません。
どこにもこれから質問するものに関連するものがなかったのでここで質問させていただきます。
今現在研究で(大学生4年です)解析をしています。
解析手法としては線形加速度法という陰解法を使用していますが、
この手法の欠点としては、ステップ間隔を短くしなければなりません。
実際研究で使う地震波は、100秒もあり、扱う対象のものは
固有円振動数だけで330個、その中の最小のものより1/60程度にしなければ
なりません。そうしなければ、解は拡散してしまうからです。
そこで、0.0005秒間隔で100秒までとなると20万ステップしなければなりません。
構造解析のソフトウェアではそれにどれだけいったいかかるのか
図ったことはありませんが、最適化ですのでこれを少なくとも100回は回していかなければ
なりません。線形加速度法で扱う行列は、330行列。。。
この前0.0005秒間隔で20000ステップやるのですら、
1時間かかていました。。 20万ステップですから単純計算で
一回終えるのに10時間。これが最低でも100回回さなければならないため、
1000時間かかってしまいます。
そこで、解析手法を変えようと思っているのですが、
どの方法が適切でしょうか?何卒ご協力お願い申し上げます
シミュ板に書いたら
まず先生に相談しよう
それがダメなら海外の研究者にメールしよう
>>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) で確認すればよくわかる。
matlabをやめれば速くなるかもね。
>>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となるようなグラフは、どうすればかけますか?
a=sin(θ).*~(θは0からπ)
758 :
デフォルトの名無しさん:2012/05/17(木) 00:21:09.31
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;としました。
./ニYニヽ
r、r.rヽ. / (0)(0)ヽ
r |_,|_,|_,|/ ⌒`´⌒ \ で?っていう
|_,|_,|_,|_,| , -) (-、.|
|_,|_,|_人 (^ iヽ__ ノ l |
| ) ヽノ | `ー'´ /
| `".`´ ノ
入_ノ
\_/
/
/
761 :
デフォルトの名無しさん:2012/05/17(木) 18:53:15.98
格納の仕方を知りたいです。
何卒宜しくお願いします。
普通にイコール(=)演算子を使えよ
a = '加速度'
テキストファイル読みたけりゃdlmread関数とか
763 :
デフォルトの名無しさん:2012/05/17(木) 19:03:46.29
どのように格納すればよいのかまったくわかりません。。。
fprintが調べたら出てきたのですが、使い方も複雑な説明の仕方でわかりませんでした。
絶望的だなw
一つの変数に文字と数字を混在させるにはcellを使うが、もし意味がわからないなら
文字を入れるのは無理だから数字だけにしたほうがいい
ファイルの読み込みはcsvreadかdmlreadを調べて分からなきゃご愁傷様
小林乙
エクセル使え
文字列と数を1つの行列で扱うな
767 :
デフォルトの名無しさん:2012/05/18(金) 00:12:06.07
申し訳ございません。
dmlreadなどで調べなおしてきます。
また、自分がメモ帳といったのは、再度そのデータを
matlab上でグラフにするために必要だからメモ帳を選択しました。
メモ帳での書き出しはできます
matlabのテキストファイルの扱いはたいして融通がきかないから
saveでワークスペースを保存したほうがいい
770 :
デフォルトの名無しさん:2012/05/18(金) 13:09:58.18
なぜこの読み込みをしなければならないのかというと、
メモリー不足になってしまうからです。
上のような行列が3個もありそれらすべてを一回、ある行列に格納していって(for - next の中で)
そのあとにplotしていきます。
saveでも大丈夫なんでしょうか?
>>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 ]
と要素の高い順に番号をつけてくれる。。。というかんじです。
[Y,I] = sort(a)
で、Iを見ると良いよ。
774 :
デフォルトの名無しさん:2012/05/24(木) 02:19:56.75
だれかGPUつかってる人いる?
実際のところどうなの?
速くなるの?
3次元の位置[x,y,z]があって
3次元の図上でその各点の強度を色とかで表現する方法ってありますか。
うまい方法があれば教えてください。お願いします
meshとかsurf関数を調べろ
いや無理か
2Dに投影はできるんだが
779 :
デフォルトの名無しさん:2012/05/25(金) 18:27:01.81
たとえば、a=[ 1 2 ; 5 7 ; 5 6];という行列を
[1 2 5 7 5 6]
と行だけに変換する関数ってありますか?
宜しくお願いします。
782 :
デフォルトの名無しさん:2012/05/28(月) 00:38:30.23
突然失礼します。
線の色について非常に困っています。
x=[10×2000]の行列があって、
これを、tの軸と一緒にプロットしたいのですが、
plot(t,x)とやってしまうと、
どれが1,2,3と8,9,10行の成分なのかわからなくなります。
これは、1〜7番目までは違う色で、8番目からはまた同じ色が使われてしまうからです。
この問題を解決するためにどのような手段を講じればよいでしょうか?
何卒よろしくお願い致します。
holdするかlegend
カラーマップ変えるか自分で色を指定するか
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つ描かれてるグラフの色が同じになってしまいます。
どうすれば色を分けたまま保存することができますか?。
787 :
デフォルトの名無しさん:2012/05/30(水) 03:01:50.27
3Dのデータを扱っています。
smooth3はGPUで処理すれば速くなるのでしょうか?
788 :
デフォルトの名無しさん:2012/05/30(水) 07:01:23.43
VideoWriterのプロパティの設定の仕方を教えてください
まずマニュアル読め。そして自分の頭で考えよ。
それでどうしても無理だったら「ここまでやって、こうなっている」と報告の上、質問。
790 :
デフォルトの名無しさん:2012/05/30(水) 12:31:26.37
いやです
池沼は使わない方がいいよ
figureで名前をつけて保存ってやると,png以外,まともに保存されない.
文字化けしたり軸の数値がおかしくなる・・・
793 :
デフォルトの名無しさん:2012/06/05(火) 22:32:46.56
odeについて教えてください。
計算精度を保つように自動的に時間刻み幅を調整してもらえるのはありがたいのですが、
場合によってはちっとも計算が進まない、という事態になります。
このような場合、精度悪化を無視して、強制的に設定した時間刻み幅で
計算してもらえるような設定は不可能なのでしょうか?
[tini:dt:tend]とすればdtごとの出力を得られることは知っていますが、
計算の刻み幅は必ずしもdtでは無いようです。
ご存知の方、よろしくお願いします。
MATLABでそれなりの規模のプログラムを開発しているのですが、関数のファイルが増えすぎて
メインの実行ソースがあるディレクトリの中身がゴチャゴチャで管理が大変です
そこで子のディレクトリを作って関数のファイルをそこに隔離したいのですが
関数を呼び出すたびにcdでカレントディレクトリを移動するのは、あまりスマートなやり方には思えません
最終的な実行環境は別のPCなので、MATLABの設定を変更してパスを通す以外で何か良い方法はありますか
795 :
デフォルトの名無しさん:2012/06/06(水) 23:17:44.79
クラス化すればディレクトリ構造で管理できるでしょう
>>794 init.mとかを作ってaddpath()を羅列しちゃう
797 :
デフォルトの名無しさん:2012/06/07(木) 12:31:00.29
失礼します。
固有値を求めるeigという関数で、
例えば5*5の行列の固有値を求めるのは、大きいw^2から順に
対角に数字が入っているのですが、
300*300で見てみると所々、その順序が逆になっていることもあります。
eigで求めた場合、どのような順で並んでいるのでしょうか?
799 :
デフォルトの名無しさん:2012/06/08(金) 17:13:01.42
ありがとうございました!
800 :
デフォルトの名無しさん:2012/06/12(火) 15:39:12.48
matlab student version使ってる方に質問です。
大学などの専門機関で研究目的には使っちゃだめってあって、卒論修論作成に
利用するのはおkらしいけど、博士論文作成だと論文投稿が必須なのに、
これってバカ高い通常版買えってこと?アカデミック版ですら単品で5万とか
するのに。
研究費で買えばいいじゃん
802 :
デフォルトの名無しさん:2012/06/14(木) 10:54:38.10
>>801 研究員の人が専用で使ってるので、学生にmatlab使わせる金がないんです。
金がないなら自分でコーディングしろや
>>802 大学なら学科か、最悪研究室レベルならどこか一つくらいサーバーライセンスがあるだろ
担当者に頼んで借りろ
ツールボックスなんか知らんけどな
>>800 GNU-Octaveでがんばれるだけがんばりましょう
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。
訳:そんなファイルねえよカス
809 :
デフォルトの名無しさん:2012/06/26(火) 21:31:53.09
ファイルちゃんとあるのに、エラーが出ます・・・。
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です。
数値計算システムだからしょうがないとあきらめて、
自分は「eps以下ならゼロとみなす」というようにやってます。
>浮動小数といっても、ゼロになって然るべき
>浮動小数といっても、ゼロになって然るべき
>浮動小数といっても、ゼロになって然るべき
>浮動小数といっても、ゼロになって然るべき
816 :
デフォルトの名無しさん:2012/06/27(水) 20:59:45.07
>>815 まちがっちゃいないよ。
A=rand(1,1);
A-A == 0は真
どうしても我慢できないなら数式処理のツールボックス入れれば良い
激遅だけどな。
819 :
デフォルトの名無しさん:2012/06/28(木) 14:05:09.31
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.
822 :
デフォルトの名無しさん:2012/06/28(木) 14:25:17.49
がっかり仕様だなー
例えばCでforループで数列を作れば一致するんだが
matlabはどうやって数列を生成してるんだろうね?
a:b:cはなるべく使わないようにしてる
bが整数以外の時は特に
そういう配列が欲しい時は
p = (x*y:x*z)/x;
って書いてる
今回で言えば
A = (10:1000)/10;
B = (10:10000)/10;
A = (100:10000000)/100;
B = 1:0.01:100000;
plot(cumsum(A<B).\cumsum(A>B)),shg
semilogxの方が見やすかった
827 :
デフォルトの名無しさん:2012/06/28(木) 20:25:40.89
>>821 保証がどうこうより、どういう実装だから
こんなことになってしまうかの方が気になる。
配列の第一要素を確定した後に逐次的にインクリメントするだけなら
こうはならない。
おそらく、途中途中でかけ算使ったりしてるんじゃないかな。
並列化のために。
そういう粗探しはマトラボコンパチのオープンソースでも調べたら
829 :
デフォルトの名無しさん:2012/06/28(木) 21:07:41.70
>>824 それどれくらいメリットある?
マトラボでそういう綱渡り的なコーディングは怖くて俺にはできんわ
浮動小数点演算で誤差があるの当たり前だろ
[0:0.1:1] - [0:1:10]/10
これですら全部0にはならないんだから
>>831 >>813とそれとでは全く次元が異なる問題
「誤差があるのが当たり前」と考えるのをやめるのは良くないよ。
>>833 3.14 == 3.14
でエラーやNaNを返すようにしろと?
配列の中身、ダンプしてみたら
電卓みたいに有効桁数で四捨五入とかしてくれないの?
勝手にそんな処理されたら困るw
え、切り捨てでいいの?
恥ずかしながら今日まで
>>813は真だと思っていた。
>>839 それほど恥ずかしいことではない。
古いmatlabだと0になるし。
>>839 フォローサンクスです。
多分昔書いたコードに真を仮定したものがあるような気がする・・・
indexingだけで変わるなら
>>834もありな気もしてきますが、
IEEEの規格なんかではどうなってんでしょうか
>>838 切り捨てっつーか、他の言語がIEEE丸めなのにmaltabだけ四捨五入だったら迷惑極まりない
844 :
841:2012/06/30(土) 23:34:17.98
また良く読んで無かった
>>824の例でうまくいくならindexingの問題じゃなくてn:a:mでの生成の問題なのか
なら昔のコードは助かった・・・
>>843 maltab使って、最終的に何するの?
計算する
グラフ書かせて終わりとか?
データ生成とか簡易な統計処理
matlabのグラフはどうも馴染めないんだよなー
gnuplotのラッパーがどこかにないものか
スクリプトの途中から呼び出したりできないと使いにくくてかなわんよ
>>850 ワークフローをひとつのソフトウェア(matlab一本)でやりたいってこと
連動してくれないとずっと見張ってなきゃならないし
いい加減グラフ関連は刷新して欲しいよな
特に3Dグラフは描画重すぎ
画面表示とEPS出力の再現性のなさもなんとかしてほしい。
Matlab 2012bからバージョン番号が8.0なんだけど、
figureについては見た目同じだった。
>855
同意
subplotの数を増やすと指数関数的に遅くなる問題、
ある程度増やすとplot自体がされなくなる問題もなんとかしてほしい。
そうそう増やすもんじゃない
1024×1024でplotとかしてたんだが、普通じゃないのか
>>855 画面表示でフォントサイズとか確認して最後にバッチで連番保存した後でズレに気づいた虚しさって誰しも一回は味わうよね
862 :
デフォルトの名無しさん:2012/07/03(火) 05:03:21.76
普通にpngなんかで出力するとタイトルや座標のフォントってギザギザですよね?
みなさんどうしてますか?
ai形式で出力してからイラレで出力すると
滑らからしいですがイラレ高い・・・
>>862 解像度上げまくってpng出力すれば、ギザギザじゃないよ。
投稿の締め切りが近いときはそうしてる。
時間があるときは調整してEPS
>>863 出力の設定に解像度があったのですね。
有難うございます。大変助かりました。
>>864 紙の上での図のサイズをMatlab上の用紙サイズに設定して、
あとは必要な解像度合わせれば割とうまくいく。
自分はEPSでベクトル出力したい派だけど。
macのlionについてなんですがxcodeをインストールしてもmexがコンパイルできません
どうすればよいのでしょうか?
mex -setupはできたか?
setupはできました
gcc-4.2とg++-4.2がありませんといすエラーがでます
ぐぐってもわらかんorz
r2011aなんですがpatch必要でしょうか?
まず、最新版にしようか
話はそれからだ
>>870 URIをR2011aに変えるとか、少し頭使えよ
なるほどxcode4.1なら使えるんですねありがとうございます
matlab.exe -nojvm
てWindowsでもふつうに動くよね?
ヘルプによるとUNIXのみとなってるけど
875 :
デフォルトの名無しさん:2012/07/06(金) 21:53:28.37
スクリプトファイル中の、あるセルのデバッグをするときにエラーの行番号を知りたいのですが、
該当以外のセルを評価してもらいたくない場合は他のセルをコメントアウトしてF5するか、または
該当のセルのみを新規ファイルにコピペしてF5しなくてはなりませんよね?
実はもっと手軽な方法があったりするのでしょうか?
876 :
デフォルトの名無しさん:2012/07/06(金) 22:04:21.32
選択部分のみ実行的なのがなかったっけ?
877 :
875:2012/07/07(土) 16:44:36.76
>>876 上から選択してF9していって該当行を見つけるという事でしょうか?
878 :
デフォルトの名無しさん:2012/07/07(土) 18:30:00.59
構造体をアレイにすると
「 s(1,2). 」
でtab補完してくれないのうちだけ?
(win7 64bit, 2012a)
879 :
878:2012/07/07(土) 18:33:48.53
コマンドウィンドウでは補完した。
エディタではしてくれないらしい。
つか構造体のアレイてつかいにくくない?
[ s.f(1:2, :) ]
とか
{ s.f(1:2, :) }
とかやるとベクトルになっちゃう
881 :
880:2012/07/07(土) 18:45:09.03
すまん
s(1:2, :)
の間違いです
882 :
デフォルトの名無しさん:2012/07/08(日) 01:30:26.06
どちらが正しいか自分で確認すればいいだろ
なんで困ってるのかわからん
884 :
デフォルトの名無しさん:2012/07/08(日) 10:00:00.86
すみません。それが、今matlabを使える状況じゃないので…(少なくとも来週の火曜日までは)
とりあえず2011bではブログの返り値のほうが正しい
しかしバージョン依存かもしれん
886 :
デフォルトの名無しさん:2012/07/08(日) 11:16:49.73
ありがとうございます。自分のバージョンは2009だったので、まだわからないですね。。。
ところで、3列目から数字を抜く方法はご存知でしょうか?
>>886 データは2行のヘッダと40行2列の数字じゃなかったの? 3列目?
「抜く」という表現の意味がわからないですね
excelの行列のサイズによらず、数字なら第2返り値の配列に入るはずだけど
888 :
デフォルトの名無しさん:2012/07/08(日) 15:31:43.70
説明不足で誠に申し訳ございません。
私が今行おうとしていることは、
エクセルの1行、2行は文字で、数字が始まるのはエクセルでいうと、
3行目からであるため、抜くのは、2行目からではなく、3行目からということです。
たとえば、
A3からB10まで8行2列の数字が入っていれば、そこの数字だけ抜き取りたいということです。
何卒よろしくお願いします。
>>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
は、どうやればいいか教えて下さい
お願いします。
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
or
num2str
895 :
デフォルトの名無しさん:2012/07/13(金) 01:48:54.88
for i=1:9
str=num2str(i);
text(1,2,3,'i');
end
でよろしいですか?今手元になくて確かめれません。。
それでよろしくないと思う
もうなんかとにかくそれは違う
>>895 octave等の無料のソフトを自宅のにインストールするべし
898 :
デフォルトの名無しさん:2012/07/13(金) 17:20:54.57
すみません。octaveをインストールしてやってみましたが、
895のやり方ではだめでした。。。
895の書式ならどのようにやればいいのでしょうか?お願いします。。。
fprintfやnum2strの解説を見ても本当にどのようにやればいかわかりません。
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
としたいわけです
c,zがワケワカ?
>>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)
でした;
エラー晒せやも読めないようだ
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と出ました。。
ちなみにa=[1 2 3 4 5];b=a;c=a;と事前に打ってあります。
すみません。書き間違えてました。。num2star(i)とやってみたらできました。。。
本当にすみません。失礼しました。
>>213 A(sub2ind(size(A), [1, 3], [2, 5]))
num2star
num2str
for文をどのようにして外に出せばよいのでしょうか?
(ex)
n=100;
for j=1:n:1
if 何かの条件をクリア
for文の外へ出す
end
end
ためには恐らくbreakを使うのだと思いますがどのようにして外に出せばよいでしょうか?
n=nan;
for j=1:n:1
if nan == nan || nan ~= nan
quit force
else
quit force
end
break
end
matlab方面でも
マニュアル読めません(読みません)系がやってるのけ
915 :
デフォルトの名無しさん:2012/07/14(土) 23:03:56.91
ブレークポイントつけても,スルーされることがある.
私だけ? 2011a x64 Linux
MATLABは研究とか仕事で必要に迫られて使うものだと思うんだけど、あまりに低レベルな質問する人って周りに使ってる人だれもいないのかね
どうしてそんな環境にMATLABが入ってるんだとw
MATLABですらまともに使えないのが日本のまともな研究者
棚に箱を飾っとくことに意味があるじゃね、その手の人には
たしかシール付いてくるぞ
>>916 本来は教わった・習ったのに覚えてないから聞くに聞けないってのが多い
922 :
デフォルトの名無しさん:2012/07/17(火) 09:15:08.63
GUIでPopupmenueの項目を選びプッシュボタンを押すとグラフが表示されるというものを作りたいのですが,
popupmenuの項目をどうやってgetするか
プッシュボタンのところで getした数字によってswitchするにはどうすればいいか
がわかりません.宜しくお願いします.
>教わった・習ったのに覚えてないから
記憶に頼るような時代じゃない
辞書引くみたいな
検索能力がないとか
ひと通りチュートリアルやるどころか、プログラミングすら初めてみたいな人がよく2chの板見つけて質問しようと思うよなぁ
>>1 チュートリアルはどっちもリンク切れてるな
むかしMathworksの日本語簡易マニュアルで勉強した覚えがあるんだが
今はそういうオンライン資料ないのかね
セミナーに来いってことか
すいません、質問なのですが…
∞
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 フーリエ級数を使うと計算出来るのでしょうか?
テキトーに
n=0
からでいいのけ?
はい、そうなんですが…
よかったら教えてください。
?=1/0!
>>932 此れを何処に入れれば良いのでしょう…?
え、マジで訊いてるの?
すみません、まだ全然分からなくて…。
もしかして?=1/0! のみでいい、ということですか?
悪かった
すみません…まったく的外れだったでしょうか…
行列指数関数ならexpmで一発
ありがとうございます。
もう少し、やってみます。
あ、
>>941さんもありがとうございます。
マクローリンではなく、テイラー展開のようですが…
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) と表されます。この値と上で計算した値を比較して下さい。
>>943 フーリエもコーシーもマクローリンもテイラーも
本質的には同じ
いやフーリエは違くないか
どうしてそう思ったのですか?
類似点はある
が、俺の知ってる範囲では、本質的に同じとはとてもじゃないが言えない
ビートルズもストーンズもスマップも
本質的には同じ
いやスマップは違くないか
どうしてそう思ったのですか?
952 :
デフォルトの名無しさん:2012/07/24(火) 15:36:16.36
スクリプトMファイルunko.mを実行して
「this file name is unko」とdispさせる事はできるのでしょうか?
フーリエとテイラーって本質的にどこが同じなん?
コーシーはローラン展開って言いたかったのだろうか・・・
フーリエは、任意の関数を三角関数で表現。テイラーも任意の関数を多項式で表現。ということで一応同じ、と考えられるのかも。
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だけど、問題点しっかり読んでなかった。absじゃ解決しないかも、すまぬ
>>954 つまり、
任意の三角関数を多項式で表現。
任意の多項式を三角関数で表現。
もできる訳ですね。わかります。
>>955 a(ismember(abs(a), max(abs(a)))).'
>>548より遅いし読みにくいし勧めしないが。
つか最近のマトラボは条件によってはループ速いど。
ベクトライズも度を過ぎると可読性が落ちるし、
今回のはあれだけど、ループ書くのを頭から否定しなくてもいい。
>>954,959
どもです。
>>955 b = max(a);
c = max(-a);
(b>=c).*b + (-1)*(b<c).*c
でいけない?
>>960とおなじようなもんだが
a(bsxfun(@eq, abs(a), max(abs(a)))).'
a(~(Inf>1./(repmat(max(abs(a)),size(a,2),1)-abs(a)))).'
a = rand(3,7)-0.5
sum(a.^((repmat(max(abs(a)), size(a, 1), 1)./abs(a)).^7777))
きたねえコードだな
どの括弧がどれと対応してるのか分かりにくいからせめて2行くらいに分けろ
ビルトイン関数がmファイルかコンパイル済みかはどうやって決めてるんでしょうかね?
968 :
デフォルトの名無しさん:2012/08/05(日) 17:03:36.13
dispを使って、変数の表示を以下のようにしたいです。
割合 n %
このnが変数です。何卒よろしくお願いします。
このスレ、結構な頻度で
したけりゃしろよ
っていうレス付けたくなる書き込みがあるね
>山梨弁乙
>>955 ind=find(max(abs(a)));
a(ind)
でいけないかな
>>968 fprintf('割合 %d%\n');
>>890 mae=mean((x(:)-y(:)).^2)
974 :
デフォルトの名無しさん:2012/08/22(水) 22:20:25.03
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なんですが
エディタで日本語のコメントって入ります?
見た目、入力はできてるんだけど、一回保存して再度開くと
日本語のところが全部「?????」って感じでハテナマークになってしまう。
OS X 10.8.1, Java 1.6.0_33, Matlab R2012a
普段から英語コメントしか使ってないけど、試してみたらちゃんと日本語コメント通ったよ。
みなさんデータが2次元から3次元になりそうなら
セルにしますか?3次元アレイにしますか?
>>978 どうゆうこと?具体例がないとちょっとわからない
980
>>977 ちなみにそいつをwindowsに持っていくと…?
982 :
デフォルトの名無しさん:2012/09/01(土) 10:48:11.92
>>977 > 普段から英語コメントしか使ってないけど
この部分は必要な情報なの?
windowsだとシステムロケール変えるとどのフォントでも文字化けするね
>>983 ですよねー
やっぱり米は英語でつけるしかない
ro-maji mo ii yo !
986 :
デフォルトの名無しさん:2012/09/01(土) 13:42:32.38
次々とコンソールに文字列(行末改行)を表示するプログラムで、
最初はコンソールが勝手にスクロールされていって、
最新の文字列が一番下に表示されていくのですが、
不明なタイミングでコンソールの自動スクロールが止まってしまいます。@2011a win64
解決法はありますか?
すみません
ステレオで収録されてるwavファイルを読み込んでフーリエ変換とかをする時って、2列まとめてやっていいんですか?
例えば、
チャンネル数が2のステレオのファイルexample.wav
x=wavread('example.wav');
でxに読み込んだら、xは○行2列になりますけど、これにfftをかけるとしたら
fft(x)でいいんですか?
それともfft(x(:,1))として別々にやってから統合するんでしょうか?
別々にやってから統合
いや、一気にやっても良いよ
たしか列ごとの○行2列の複素fftが返るだろ
そっちのほうが速いし