>>931 こぴられたw
>>930 時間変化しない3次元のデータだったらプロットの仕方はわかる?
それがわかれば、あとは一定時間で区切って再描画コマ送りするなり、
それをアニメーションとして保存するなり、お好きなように
Cソースで書くS-Functionで、複数のデータ型を含むバス信号を入力として
受け取りたいのですが、方法が見つかりません。
もしかして、S-Functionではデータ型が混在するバスやベクトル信号は
受け付けられないのでしょうか?
もし受け付ける方法があるなら教えていただけないでしょうか?
よろしくお願いします。
>>933 ポートをわけて渡さないとダメじゃないかなあ
>>934 やはりそうですか・・・
データ型を取得するマクロがポート単位のものしかないですもんね・・・
複数データ型のバスを受け取らなくても良い方法を考えることにします。
ありがとうございました。
>>932 その都度figureを立ち上げてコマ送りのように表示することはできたのですが、もう少しスマートにできないものでしょうか??
一定時間で区切りコマ送りする手法を教えていただきたいです。
938 :
デフォルトの名無しさん:2009/05/18(月) 01:03:00
差分方程式
x(n+2)+a_1x(n+1)+a_0x(n)=0 ,
x(0)=x_0 , x(1)=x_1 , n=0,1,2,∙∙∙
の階x(k)=0,1,2,∙∙∙,t_fを求めるプログラミングを作成せよ。また、次のデータについて実行せよ。
a_0=0.3 . a_1=-1.5 , x(0)=1 , x(1)=2 , t_f=10
のプログラムが作れません。誰か教えてください!お願いします!!
939 :
デフォルトの名無しさん:2009/05/18(月) 20:26:05
質問です
みなさんマトラボはいつ頃から勉強はじめました?
ぜひ教えてください
>>939 初めて触れたのは学部4年前期の制御工学の授業
941 :
デフォルトの名無しさん:2009/05/18(月) 21:29:00
>>938 久々のレスが宿題かよ!
x(n+1)+a_1x(n)=0, X(0)=X_0
なら作れる?
>>939 おれも940と同じ
943 :
デフォルトの名無しさん:2009/05/19(火) 10:26:37
ちょっと質問させてください。
assignin関数でfunction 内の変数をWorkSpaceに置きたいんですけど、
その際に変数名を配列で指定するとエラーがでて出来ません。
何か良い方法はないですかね?
こんな感じで書いてます。
function hoge
str =[ test1 test2 ]
for i=1:2
assignin('base',str(1,i), 2); ←ここでエラー
end
よろしくお願いします。
三つアドバイス。
1. エラーメッセージをしっかり読む
2. ブレークポイントを設定して、関数実行時の変数の中を見てみる
3. 文字配列とセル配列の違いと扱い方を体で覚える
function hoge
str = { 'test1' 'test2' };
for k = 1:length(str)
assignin('base', str{ks}, 1);
end
あと、matlab では i は虚数を意味する(i * i = -1)ので、
できるだけカウンタとしての使用は避けるべきなのだそうな。
標準的な関数群でも平気で i がカウンタとして使われているけれども。
ごめん typo があった。
function hoge
str = { 'test1' 'test2' };
for k = 1:length(str)
assignin('base', str{k}, 1);
end
>>945-946 素早く丁寧な返事をありがとうございます。
1と2に関しては実行しました。
エラー文は読んだのですが、不適切な文ですとしか出ず
str(1,i)を 'test1' におきかえると正しく動作したので、str(1.i)が
間違っているということはわかったのですが、そこから進まなくて・・・。
セル配列{}? と文字配列()の違いでエラーが出てたという事ですかね?
str(1,1)とコマンドラインに入れればtest1 が帰ってきたので、
eval(str(1,1))
などを入れてやれば解決するかなと考えたのですが、これでもうまくいかず・・・。
また、明日学校で試させてもらいます。ありがとうございました。
この例題なら自宅でOctave使って試すこともできるぜ
>>948 お勧めされたので早速やってみました。
実は質問外なので省いたのですが、最初の
str = { 'test1' 'test2' };
を取ってくる際にimportdataを用いてエクセルファイルのヘッダを取得しているのですが、
その辺りの関数がOctaveにはないようですね。
ただ、上記の関数がOctave上で正しく動くことは確認できました。ありがとうございます。
明日学校でMATLAB上でも正しく動くか検証してみます。
すごく初歩的な質問ですまんが
%f(x)=x^2-5
N0=100;
TOL=0.0000001;
XL=1;
XR=5;
i=1;
FXL=XL^2-5;
while (i<N0)
XM=(XL+XR)/2;
FXM=XM^2-5;
if (XM==0 | (XR-XL)/2<TOL)
disp(XM);
return;
end
i=i+1;
if (FXL*FXM>0)
XL=XM;
FXL=FXM;
else
XR=XM;
end
end
disp('解が得られない');
このプログラムを関数x^3-7x^2+14x-6で動かしたいんだけど、どこをどう書き換えればいいのかわからん
自分でやるといつもFXM=のところでエラーになる
教授から丸投げされて、もうお手上げ状態なんで誰かアドバイスください
>>950 学校のPCからじゃ書き込めないから携帯からになるけど
7行目を
FXL = XL^3-7*XL^2+14*XL-6
11行目を
FXM = XM^3-7*XM^2+14*XM-6
にすればいいのでは?
>>945,946
遅くなりましたがMATLABでも動作確認できました。
丁寧なアドバイスありがとうございます。
俺はmaximaに移行した
954 :
デフォルトの名無しさん:2009/05/28(木) 19:26:05
質問です。
データにフィルターをかけるとデータの最初の方が0に近い値になってしまうのですが、回避する方法はあるのでしょうか?
それとも、フィルターをかけた上で最初の方を切り取った方がいいのでしょうか。
使っているフィルターは3次のバターワースフィルタです。
すみません、sageわすれましたorz
位相遅れを無くしたいならfiltfiltを使えばいい
>最初の方が0に近い値になってしまう
これが何か問題になるの?
957 :
デフォルトの名無しさん:2009/06/01(月) 01:44:36
2次のルンゲクッタ法のホイン法と中点法でプログラムを作っています。
xx = [];
i=0;
for t=0:dt:tf
i=i+1;
xx(:,i)=x;
xt = x;
for j=1:2
f = A*x + B*u;
d(:,j) = f*dt;
x = xt + d(:,j)*0.5;
end
x = xt + (d(:,1) + d(:,2))/2;
end
t=0:dt:tf;
どこか違うとこありますか?あったら教えてください。
958 :
デフォルトの名無しさん:2009/06/01(月) 02:07:00
2次のルンゲクッタ法のホイン法と中点法でプログラムを作っています。
ホイン法
xx = [];
i=0;
for t=0:dt:tf
i=i+1;
xx(:,i)=x;
xt = x;
for j=1:2
f = A*x + B*u;
d(:,j) = f*dt;
x = xt + d(:,j);
end
x = xt + d(:,2);
end
t=0:dt:tf;
中点法
どこか違うとこありますか?あったら教えてください。
959 :
デフォルトの名無しさん:2009/06/01(月) 02:09:28
2次のルンゲクッタ法のホイン法と中点法でプログラムを作っています。
中点法
xx = [];
i=0;
for t=0:dt:tf
i=i+1;
xx(:,i)=x;
xt = x;
for j=1:2
f = A*x + B*u;
d(:,j) = f*dt;
x = xt + d(:,j)*0.5;
end
x = xt + d(:,2);
end
t=0:dt:tf;
どこか違うとこありますか?あったら教えてください。
2次のルンゲクッタ法のホイン法と中点法でプログラムを作っています。
中点法
xx = [];
i=0;
for t=0:dt:tf
i=i+1;
xx(:,i)=x;
xt = x;
for j=1:2
f = A*x + B*u;
d(:,j) = f*dt;
x = xt + d(:,j)*0.5;
end
x = xt + d(:,2);
end
t=0:dt:tf;
どこか違うとこありますか?あったら教えてください。
なんだこの馬鹿は
962 :
デフォルトの名無しさん:2009/06/07(日) 22:09:25
Student Editionてamazon.co.jpでも買える?
matlabにはfortrunでいうgoto文のようなものはありますでしょうか?
○○行から××行の間の処理を繰り返したいのですが、
結構な行数なので見辛くなってしまいまして。。
ご存知の方がいましたら教えて頂けると幸いです。
結論:無し
ついでに書くならmatlabはループが苦手
>>964 やっぱりないですよね。。
ご回答有難うございました。
uicotrol関数のプッシュボタンやトグルボタンを
他の形(丸や多角形)にできますかね?
プロパティをみるとpositionによる縦横長さを
弄る以外にはなさそうですが、何か手段はありますでしょうか?
デジタル信号の加速度時系列波形を
2階積分して変位の時系列波形を求めたいのですが、
どのように組めばいいのかがわかりません。
サンプルプログラムが載っていると
順を追えて理解がしやすいのですが、
何か参考となる本や文献があれば教えて頂きたいです。
968 :
デフォルトの名無しさん:2009/06/20(土) 15:31:18
FFTの勉強中でプログラムを実際に作ってみたんですが
データ数8までは成功するのにどうしてか16以上になるとできません。
XXには既に並び替えたデータが入っています。
処理された結果がYです。
phase=log2(N);
for m=1:phase
W=exp(-i*2*pi/(2^m));
for n=1:N/2^m
for k=1:2^(m-1)
K=k+2^m*(n-1);
Y(K)=XX(K)+W^(k-1)*XX(K+2^(m-1));
Y(K+2^(m-1))=XX(K)-W^(k-1)*XX(K+2^(m-1));
end
end
XX=Y;
end
969 :
デフォルトの名無しさん:2009/06/28(日) 20:18:52
質問させてください。
matlabでImageJと同等のリニアスケールのトゥルーカラー画像を表示させたいのですが、うまくいきません。
matlabでは明度がはっきりしない画像となってしまいます。
何か良い方法があれば教えてください。
970 :
デフォルトの名無しさん:2009/07/05(日) 07:03:38
Matlabで大きな画像(1000x4000)をimagescで表示させ、saveasで保存すると、
元の画像よりも小さくなってしまいます。。
元のピクセルサイズを壊さずに保存できる方法を、
もしご存知の方がいたら教えてくださいm(_ _)m
自己解決しました;;
imwrite(X, 'test.png');
のようにして解決しました。
972 :
デフォルトの名無しさん:2009/07/06(月) 21:01:14
拘束条件(壁)があるときの2自由度ロボットアームのシミュレーションをしたいのですが、
拘束条件をどのように設定したらいいのか分かりません;
漠然とした質問で申し訳ないのですが、教えていただけたら幸いです。
エスパーするとode+eventでなんとかなりそう
974 :
デフォルトの名無しさん:2009/07/07(火) 17:15:29
画像をR成分、G成分、B成分と段階的に表示するプログラムを作りたいです。
A=imread('画像のアドレス');
B=zeros(size(A,1),size(A,2),3);
for(a=1:1:3)
for(i=1:1:size(A,1))
for(j=1:1:size(A,2))
B(i,j,a)=A(i,j,a);
B(i,j,a)=B(i,j,a)/255;
end
end
imshow(B)
end
このプログラムだとimshowが三回実行されますが、
実行間隔が短いので最後の1回の結果しか確認できません。
それぞれの間に10秒ずつ時間を置きたい場合などはどうしたらよいですか?
自己解決しました。
pause(n)
でn秒プログラムの実行を停止できました。
画像を読み込み、読み込んだ画像情報をファイルとして書き出す際に、
連番をファイル名に付け様と思ったのですが、上手くいきません。
write = imread('lex.jpg');
for i = 1 : 10
imwrite(write, ['file_' i '.jpg'], 'JPEG');
end
使用したのは上記のプログラムですが、imwriteのところでjpegを書き出すためのファイルが開けない、
というエラーがでます。
これを改善するにはどうすればいいのでしょうか。
よろしければ誰かご教授のほどをお願いいたします。
977 :
デフォルトの名無しさん:2009/07/24(金) 13:09:36
int2str
978 :
デフォルトの名無しさん:2009/07/24(金) 13:10:50
int2str
質問です。
A = diag([1,1,1,0,0,0]);
eigs(A, 2, 'SM')
とすると
警告: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 0.000000e+000.
が出て、結果が NaN, NaN となります。
どう対処すればよいでしょうか?
なお、実際に使いたい対象はもっとでかい素行列で、
full したくない、という事情があります。
980 :
デフォルトの名無しさん:2009/07/31(金) 12:25:08
singularでない行列を放り込むしかないんじゃね?
>>980 実際、今は入力の行列に小さな摂動を加えて
singularではないようにして回避していますが、
どうにも筋が悪いように思い、質問した次第です。