MATLABプログラミング 質問箱 その3
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/10/03(土) 09:01:48http://www.cybernet.co.jp/matlab/
MATLAB 本家
http://www.mathworks.com/
Yahoo MATLAB
http://dir.yahoo.co.jp/Science/Mathematics/Software/MATLAB/
MATLAB入門
http://feedback.mech.fukui-u.ac.jp/matlab/matlab0.htm
MATLAB チュートリアル
http://www-isys.eei.metro-u.ac.jp/~sho/pub/ttmatlab/Index.html
前スレ
MATLABプログラミング 質問箱 その2
http://pc11.2ch.net/test/read.cgi/tech/1163125702/
0412デフォルトの名無しさん
2011/08/19(金) 09:26:33.93マッチョラブ
0413デフォルトの名無しさん
2011/08/19(金) 11:33:40.59MathWorks日本語版公式サイトだと
ttp://www.mathworks.co.jp/products/matlab/
「MATLAB (マトラボ / マットラブ) 」と併記してるのでこの両方が公式
ただし「ソースを表示」等でHTMLファイルを見ないと書いてない
0414デフォルトの名無しさん
2011/08/19(金) 14:44:57.390415デフォルトの名無しさん
2011/08/19(金) 19:02:38.63Statistics 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
プログラミングの質問じゃない気がするけど、分かる方いたら宜しくお願いします。
サポートに連絡した方がいいのかな?
0416デフォルトの名無しさん
2011/08/20(土) 00:02:53.50時計を戻した。使えるじゃん・・・。
0417デフォルトの名無しさん
2011/08/20(土) 00:44:25.840418デフォルトの名無しさん
2011/08/20(土) 17:43:32.17PCA で出せる loading と score の符号は arbitrary なので問題ない。
各アプリケーション間でバラバラな上に、
同一のアプリケーションの違ったバージョンでもバラバラだったりする。
0419デフォルトの名無しさん
2011/08/20(土) 21:19:39.91ハックしてるわけじゃないから、問題ないのでは。
0420デフォルトの名無しさん
2011/08/21(日) 07:32:47.000421デフォルトの名無しさん
2011/08/21(日) 19:05:58.91多分民事ですね。マジメにお金払ってる人が騒ぎたくなる気もわかりますが。
それにしてもmatlab高いよ。本体とほんの数種類のtoolboxで150万円なんて。
これと比較したらあのAdobe CS 5.5ですら安くみえます。
0422デフォルトの名無しさん
2011/08/21(日) 20:26:32.620423デフォルトの名無しさん
2011/08/22(月) 00:05:09.440424デフォルトの名無しさん
2011/08/22(月) 09:12:01.37仕事なら経費と思うしかない
金が無いなら数式見てゴリゴリ書け
0425デフォルトの名無しさん
2011/08/22(月) 17:34:19.310426デフォルトの名無しさん
2011/08/22(月) 19:41:04.44>>425
ま、経費なんで痛くも痒くもないんですが、20万超えると承認もらうのが面倒。
matlabのいいところって、グラフをGUIで直感的にガンガン加工したのちに、.mファイルに変換して、次からは自動で描画させる事ができることろだと思うんです。もしmatlabからその機能がなくなったらOctaveに移行します。
0427デフォルトの名無しさん
2011/08/22(月) 21:20:22.64ありがとうございました。
んんー、なるほどー。
0428デフォルトの名無しさん
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
0429デフォルトの名無しさん
2011/08/24(水) 18:53:42.80参照渡しとなるように以下のような書き換えが必要だったようです。
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
0430デフォルトの名無しさん
2011/08/31(水) 07:05:05.01(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
いずれも上手くいきません。。
分かる方、教えて頂けたら助かります。
0431デフォルトの名無しさん
2011/08/31(水) 11:29:14.51surf(1:100, 1:100, u);
1:100のところは自分の好きなように変えるべし。
0:99でもいいし、linspace(-pi, +pi, 100)とかでもいい。
0432デフォルトの名無しさん
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次元のグラフでしか表現できません。。
どなたか分かる方、教えて頂けたらうれしいです。
0433デフォルトの名無しさん
2011/08/31(水) 21:39:56.88まず
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 でいいじゃないかとか
スペースとかインデントとか
0434デフォルトの名無しさん
2011/09/01(木) 10:46:31.94ありがとうございます。とても助かりました。
指摘も参考になりました。
数学的な質問になるかもしれないのですが・・・
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)));
のように虚数が含まれる場合はどのような手順で解を導けば良いのでしょうか?
課題や研究ではなく、単純に疑問に思いました・・・
0435デフォルトの名無しさん
2011/09/01(木) 14:00:42.44複素数ってのは描画するとしたら複素平面上にしかできないわけで、
xとtを軸とした3次元プロットは手書きしようとしてもできないでしょ。
自分は振動の分野の人間だから
複素数は時間領域の場合実部をとる。(結局u=sin(pi*x)になる。)
ちょっと問題設定がわからないからこれ以上はなんとも言えないな。
ちなみにsqrt(-1)はMatlabの場合1iで書けるよ。
u=sin(pi*x)+1i*cos(pi*x);
0436デフォルトの名無しさん
2011/09/02(金) 09:39:06.37ありがとうございます。
複素数を実部と虚部に分けて考えるべきでしょうか。
例えば
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)のそれぞれの条件も出てくると思いますし。
0437デフォルトの名無しさん
2011/09/02(金) 11:14:58.46まぁ少なくとも線形な方程式なら問題なくそれで解けるよね。
ただ複素数にして何を知りたいのかがよくわからないから
何とも言えないところではある。
0438デフォルトの名無しさん
2011/09/03(土) 19:27:45.28線形でない場合は違うのでしょうか??・・・^^;
線形でない場合って・・・例えばどんな場合でしょうか・・・?
無知ですみません。。
0439デフォルトの名無しさん
2011/09/04(日) 11:10:03.66単純な例として
線形: 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次式(線形)でない、という意味ね。念のため
0440デフォルトの名無しさん
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)
とした場合、
0441デフォルトの名無しさん
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について、それぞれ変化を見る・・・
何を知りたいのかは別にして、解析の流れとして
このように考えたのですが、おかしいでしょうか・・・?
0442デフォルトの名無しさん
2011/09/06(火) 23:10:27.46matlabでコードを作って計算させるときに、
計算時間がえらく長くかかることあるじゃないですか?
で、何十分もかけた割にはあんまり有益なデータが取れなかったりして・・・
実際にmatlabを走らせる前に、だいたいの計算時間みたいなのを知ることって出来ないんしょうか?
厳密でなくても、だいたいでも結構です。
やり方などわかる方、教えてください。
0443デフォルトの名無しさん
2011/09/07(水) 07:31:34.26tic toc
でループの中とか時間のかかりそうな部分を計測して
ループの回数をかけるとか
0444デフォルトの名無しさん
2011/09/07(水) 15:52:49.54マクロ・スクリプトとして便利だけどライブラリ任せになるとツール頼みになりますよ。
matlabやoctaveてインタプリタだからプログラミングしても遅いと思うけど。
インタプリタだと、極端な話、例えばN88BASIC互換のインタプリタ言語をPentium4-3Ghzで動作させたものと
25MhzのSH2-7125のC/C++コンパイラでベンチとれば、SH2にあっさり負けますよ。
場合によっては1/10以上の差がありますから数値計算でプログラミングできない人は致命的ですよ。
ちょっとした電卓代わりなら良いですが、便利だからとクラスタでインタプリタ動かそうとしてる人はリソースの無駄遣いで、
そんなもの幾ら高速のンピュータでもリソースは足りませんよ。
0445デフォルトの名無しさん
2011/09/07(水) 16:41:16.93例に挙げてるのもホントに極端なものだし。
「インタプリタだから何でもかんでも遅い」っていうのは、
頭が固くて、なおかつ自分でベンチとってないお年寄りの念仏でしかないよ。
Matlab は、コードの可読性と処理速度のバランス面で、たいへん優れている。
Matlab で致命的に遅いのはグラフィックスまわり。描画の方。レンダリング重すぎ。
0446デフォルトの名無しさん
2011/09/07(水) 18:01:15.48mex -setup のコマンドを用いてコンパイラの設定を行おうとしたところ,
カスペルスキーから警告されました.そして,操作を許可したのですが,その
直後にMatlabが落ち,起動しなくなってしまいました.
mex -setup のコマンドが正しく実行されない理由についてお教え下さい.
宜しくお願いいたします.
0447デフォルトの名無しさん
2011/09/08(木) 02:15:46.63プログラミング初心者にそんなこと言ってたら
主眼の研究に取り掛かるのが
いつになることやら。
デバッガ、lint、プロファイラ、お手軽グラフィックが完備した
マトラボでさっさと研究を進めるべき。
マトラボでプログラミングに慣れて来たら、
Cなりアセンブリ言語なりCPUアーキテクチャなり
勉強すればよい。
0448デフォルトの名無しさん
2011/09/08(木) 09:17:49.09学者や研究者がプログラミングも出来るにこしたことは無いけど、プログラマを目指す訳じゃないんだし、後回しで良いと思うけどね
つーかプログラミング出来るなら、自分でゴリゴリ数式書いたほうが良いし
>>446
カスペルスキーからどんな警告が出たのかくらい書け
とりあえず、カスペルスキーを外してから再度実行してみろ
0449デフォルトの名無しさん
2011/09/08(木) 11:32:55.02を参考にしながら、
δ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);
このようなエラーが出てしまいます・・・
どなたか、改良していただけると助かります・・
以下が作ったコードです・・
0450デフォルトの名無しさん
2011/09/08(木) 11:35:04.74m=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];
0451デフォルトの名無しさん
2011/09/10(土) 08:27:08.60surfグラフをhold onして2つの面グラフの色を塗り分けたいと思ってます。
colormap([1 0 0])っていうふうにセットしてるんですが
2つ目のグラフの色で両方のグラフが染まってしまいます。
どうにかなりませんか?
0452デフォルトの名無しさん
2011/09/14(水) 01:32:47.55forループをparforにして分散処理をさせる方法をとっています。
このとき例えば、
parfor n=1:5
tmp(n) = n;
end
ans = sum(tmp)/n
のようにparforループ内でparforループ変数ごとに求めた値をparfor外でまとめて計算したいのですが、
「テンポラリ変数tmpはparforループの後に使われますが、その値は確定性がありません」
とエラーが出て、プログラムを実行できません。
何か良い案はないでしょうか。
0453デフォルトの名無しさん
2011/09/14(水) 13:09:09.000454デフォルトの名無しさん
2011/09/14(水) 14:07:14.980455452
2011/09/14(水) 21:54:54.81ありがとうございます。
おかげさまで解決しました。
0456デフォルトの名無しさん
2011/09/16(金) 03:25:44.17フィルタをとおさない場合、信号とそれ以外のスペクトルは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));
0457デフォルトの名無しさん
2011/09/19(月) 21:40:16.710458デフォルトの名無しさん
2011/09/20(火) 10:30:56.560459デフォルトの名無しさん
2011/09/21(水) 11:56:36.78どうしたら良いですか?
たとえばA1,A2,A3…A100などと100個の行列を作成したい場合、
行列の名前に数字等を付けて、
for i=1:100
A[i]={6,6,6}←ここの値、式はなんでも良いのですが・・・
end
とかにして、意図した数の行列を作成したりするなど、行列の名前につけた数字に対して
iなどの変数を用いたりすることは可能でしょうか?
またどういう表記にすれば良いのでしょうか?
初心者の質問ですみません。
0460デフォルトの名無しさん
2011/09/21(水) 14:02:49.58「文字列の内容そのものを評価する」方法で、それを実現できます。
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 個の変数あるいはセルなどに収めた方がスマート。
0461デフォルトの名無しさん
2011/09/22(木) 16:25:54.53連結リストをつくるときなど、Cだとポインタを使うようなケースを、
Matlabではどんな感じで書くのでしょうか?
0462デフォルトの名無しさん
2011/09/22(木) 17:21:51.88それ使って C での実装をトレースすればよい。
でも原理的に連結リストを実現するために必要な情報さえ把握できていれば、
libpointer を使わずに自分で組む方法も自然と頭に浮かぶと思うけど。
0463461
2011/09/22(木) 17:58:37.61レス有難うございます。
当方Cをほんの少し知っている程度の人間なのですが、
今後Matlabも少々扱わなければならなくなり
Matlabの入門書を読んでいて疑問に思った次第です。
libpointerを使わない場合は、
構造体のアレイや、クラスを使うのでしょうか?
0464デフォルトの名無しさん
2011/09/22(木) 18:08:00.55そういう認識で良いと思います。
Matlab みたいに配列や行列の可視化が容易な環境の場合は、
変に C でのポインタの概念に縛られない方がよいかと。
0466デフォルトの名無しさん
2011/09/22(木) 20:49:45.08画像を数十個出力して、連番になるように保存したいのですが、
どのようにすればよいのでしょうか?
いちいち出力したあとに一個一個saveしていくのは非常に面倒です・・・
また、画像を1つ1つ表示させず、保存のみしていく方法を教えて頂けたら尚嬉しいです。。
コードは以下のように作りまして、testの回数毎にe,f,g,hという関数をグラフとして出力しています
二つめの・・・の部分でe,f,g,hを計算しています。
どなたか分かる方、どの部分にどのようなコードを挿入すべきか教えて頂けると助かります。
0467デフォルトの名無しさん
2011/09/22(木) 20:51:23.250468デフォルトの名無しさん
2011/09/22(木) 20:51:46.69for test=1:1:14
if test==1
epsilon = 0;
・・・
elseif test==13
epsilon = 0.013;
else
epsilon = 0.014;
end
・・・
0469デフォルトの名無しさん
2011/09/22(木) 20:52:04.07figure;
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
0471デフォルトの名無しさん
2011/09/22(木) 22:44:38.791. 連番のファイル名を作る ... >>460 参照
2. Figure を保存する関数 ... saveas
3. Figure を消す関数 ... close
というわけで、help コマンドでこれらの関数の使い方を覚えて試行錯誤すべし。
あと、Figure のハンドルの概念を help gcf を実行して学んでおくと後々便利。
Figure を表示しない(隠す)というのは
>> fh = figure;
>> set(fh, 'Visible', 'off');
みたいにして Visible プロパティを off にすれば実現できるけど、
>>466 のやりたいことを推測する限りでは本質ではない気がする。
0472デフォルトの名無しさん
2011/09/22(木) 23:43:10.92foldername=sprintf('test%f',test);
これをforのすぐ後ろに置いて
filename=sprintf('%s\\e_test%f.fig',foldername,test);
saveas(gcf,filename)
これをfigure毎に後ろに置くのはどうですか?
e_の部分をf,g,hにして各グラフ毎に。
0473デフォルトの名無しさん
2011/09/23(金) 00:14:16.15「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かけるので
結局次数が倍になると理解していますが、合っていますでしょうか?
0474デフォルトの名無しさん
2011/09/23(金) 00:40:11.09FILTFILT 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 は複数のフィルタを合成する関数です。
決め打ちでフィルタの次数を倍にする訳ではなくて、その用途にも使える、ということ。
0475デフォルトの名無しさん
2011/09/23(金) 08:58:57.39すいません、
引数が
filter(B,A,y);
filtfilt(B,A,y);
なので、
>複数のフィルタを合成
っていうのがよくわからないのですが。
聞きたい事は、
filter関数で出た結果と filffilt関数で出た結果は違う。
filtfilt関数の結果はfilter関数よりも次数が倍になっている
っていうのが合っているかどうかなんですが。
0476デフォルトの名無しさん
2011/09/23(金) 15:09:08.62for 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回のループで計算させるやり方を考えているのですが、どうも上手くいきません。
効率の良いやり方分かる方、ご指摘ください。。お願いします。
0477デフォルトの名無しさん
2011/09/23(金) 16:02:01.06>>472さん
お返事ありがとうございます。
無事ファイルの保存が行えました。助かります。
保存先が現在デスクトップ上に勝手に保存されてしまうのですが、
特定の場所に保存したい場合はどうしたら良いのでしょうか?
0478デフォルトの名無しさん
2011/09/23(金) 21:45:50.74v=c.^2+d.^2
0479デフォルトの名無しさん
2011/09/23(金) 21:52:50.49fortranやC++の方がまだまし。
0480デフォルトの名無しさん
2011/09/23(金) 23:56:05.46不思議に感じるのはC脳だからだろうか?
0481デフォルトの名無しさん
2011/09/24(土) 00:12:10.06ループの替わりにアレイの演算にするのは風変わりで面白い
他より優れているとまでは言わんが。
他所に書いたものだけど、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)];
0482481
2011/09/24(土) 00:33:10.07http://en.wikipedia.org/wiki/Array_programming
0483デフォルトの名無しさん
2011/09/26(月) 16:58:48.49深い意味あんの?
0484デフォルトの名無しさん
2011/09/26(月) 20:53:15.22超大有り
* は行列の掛け算
.*は要素同士の掛け算
A=[1 ; 2]
A .* A = [1 ; 4]
A * A' =
[ 1 2
2 4]
これを間違えると超ハマる。
0485デフォルトの名無しさん
2011/09/28(水) 04:50:03.250486デフォルトの名無しさん
2011/09/28(水) 15:09:16.590487デフォルトの名無しさん
2011/09/30(金) 05:16:51.69http://www.amazon.com/dp/0750687622/
かなり丁寧。プログラミング経験者ならくどいか
http://www.amazon.co.jp/dp/4798020419/
プログラミングは知っているという前提。
リファレンスとして使える
0488デフォルトの名無しさん
2011/10/01(土) 01:08:11.04Need a handle to a Figure object
って出たんだけど、直し方知らないですか?
0489デフォルトの名無しさん
2011/10/01(土) 10:18:58.14もうちょい詳しく。
saveas( )
のカッコの中を書いてください
0490デフォルトの名無しさん
2011/10/01(土) 22:49:07.80function 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で配列の中身を確認できないんですけど、
確認できるようにするにはどうすればいいでしょうか?
0491デフォルトの名無しさん
2011/10/01(土) 23:03:53.39配列に値を入れていくときに、linspaceとかを使うと計算時間の短縮に繋がると
思うんですが、その他に時間短縮でよく使えるものを教えてください。
あと、functionを使うと計算時間が遅くなったりすることはありませんよね?
0492デフォルトの名無しさん
2011/10/01(土) 23:32:59.870493デフォルトの名無しさん
2011/10/02(日) 18:50:42.53これはツールボックスが対応していないからなのでしょうか?
http://www.mathworks.com/matlabcentral/fileexchange/19
0494デフォルトの名無しさん
2011/10/02(日) 19:05:53.040495デフォルトの名無しさん
2011/10/04(火) 14:59:59.55円グラフみたいに扇形で色分けしたいんですが
どうやってやればいいのでしょうか?
0496デフォルトの名無しさん
2011/10/04(火) 15:51:33.45借金をこさえてしまって貧乏なんですが
どうやって金持ちになればいいですか?
っていうくらい漠然とした質問だと思います。
せめて、何を試してどういう状態のグラフが手元にあるのか説明しましょう。
0497デフォルトの名無しさん
2011/10/04(火) 16:07:45.88失礼しました。
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平面にプロットしました。
0498デフォルトの名無しさん
2011/10/04(火) 16:40:00.02zplane で出力したグラフを後から色分けしようとすると大変だと思うので、
kai の値を参照して、グラフ自体は pie で描画するというのはどうでしょう?
0499デフォルトの名無しさん
2011/10/04(火) 16:47:48.29レスありがとうございました、助かります。試してみます。
0500デフォルトの名無しさん
2011/10/06(木) 15:13:16.29pieのグラフとplotのグラフを重ねて表示させる方法を教えていただけないでしょうか;
0501デフォルトの名無しさん
2011/10/06(木) 15:37:36.06figure; 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);
0502デフォルトの名無しさん
2011/10/06(木) 21:24:43.670503デフォルトの名無しさん
2011/10/07(金) 21:14:41.98x軸とのなす角をクリックする度に求めたいのですが、
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を削除すると、繰り返して座標を取得ができます。
どうすればできますか?
0505デフォルトの名無しさん
2011/10/11(火) 13:44:14.67license manager error -15
というメッセージが出て、
以降起動できなくなりました。
原因と解決策を教えてください。
トラブルシューティング読んでも良くわかりませんでした
0506デフォルトの名無しさん
2011/10/11(火) 15:40:43.36学校のPCの管理者に報告。
0507デフォルトの名無しさん
2011/10/11(火) 21:30:17.06神の啓示だと思って
octaveに乗り換える
0508デフォルトの名無しさん
2011/10/12(水) 00:40:48.450509デフォルトの名無しさん
2011/10/12(水) 05:00:42.59しかも結構コロコロ関数が変わるし…
それはそうとどなたか>>503頼みます
0510デフォルトの名無しさん
2011/10/12(水) 10:55:21.29以下のコードで問題なく動いてる。
もし 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;
0511デフォルトの名無しさん
2011/10/12(水) 19:41:39.86どうもありがとうございます! test.mはきちんと動きました。
でもguideを使った自分のやつに持ってくるとやっぱりダメだった(´・ω・`)
guide使うのって良くないの?
自分はmatlabのGUIは>>503の時点でguideのチュートリアル見ながら始めて3時間の初心者なので
こういうユーティリティに頼らないと簡単なものでもGUIは難しいです
> axes1_ButtonDownFcn の最後にset(hObject, 'ButtonDownFcn', @axes1_ButtonDownFcn);
はエラーが出てうまく動きませんでした。(これもtest.mではきちんと動作する)
@って関数ポインタみたいなもの? 自身の中で呼び出すという行為の意味もまだ理解できてません。
これは意外と難しいものに手を出してしまったかな;
■ このスレッドは過去ログ倉庫に格納されています