- 締切済み
matlab制御文での値の格納?
現在matlabを使用してfor文で1から3000まで繰り返し、sigmaを求めるというプログラムを作っているのですが、うまくいきません。これだとn=3000のsigmaの値しかでてきません。sigmaにfor文で繰り返し求めたすべての値を格納したいです。初心者で低レベルな質問ですみません。どなたか教えていただけませんか。 sigma=0; for n=1:3000, if n <=300 dsig=1; elseif n <= 950 dsig=-1; elseif n <= 1700 dsig=1; elseif n <= 2550 dsig=-1; elseif n <= 3000 dsig=1; end sigma =sigma + dsig; end
- kyousiga
- お礼率25% (1/4)
- その他(プログラミング・開発)
- 回答数4
- ありがとう数4
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- kenkenyaya
- ベストアンサー率0% (0/1)
こんな感じでしょうか? --------------------- function getsigma1() fid = fopen('sigmaout.csv','w'); fprintf(fid,'Steps,dsig,sigma\n'); sigma = 0; for n = 1:3000 if n <= 300 dsig = 1; elseif n <= 950 dsig = -1; elseif n <= 1700 dsig = 1; elseif n <= 2550 dsig = -1; elseif n <= 3000 dsig = 1; end sigma = sigma + dsig; fprintf(fid,'%d,%f,%f\n',n,dsig,sigma); end fclose('all'); -------------------------------- function getsigma2() sigma = 0; for n = 1:3000 if n <= 300 dsig = 1; elseif n <= 950 dsig = -1; elseif n <= 1700 dsig = 1; elseif n <= 2550 dsig = -1; elseif n <= 3000 dsig = 1; end sigma = sigma + dsig; if(n ~= 1) sigma(n) = sigma(n-1) + dsig; else sigma(n) = dsig; end end fprintf('%f\n',sigma);
- Tsukasa0215
- ベストアンサー率22% (280/1257)
>どうしてもn=3000の値が繰り返されてしまって。 もしかして…nの要素分(3000個)、sigmaの配列を作っていないとかw matlabの構文ははっきり知りませんが、そこから再度調べ直してみては如何でしょうか?
- Tsukasa0215
- ベストアンサー率22% (280/1257)
「補足」にあったプログラムをCに置き換えて実行してみましたが…この様な結果を欲しているのでしょうか? (下記URL参照)
補足
はい。まったくそのとおりでございます。 どうしてもn=3000の値が繰り返されてしまって。
- Tsukasa0215
- ベストアンサー率22% (280/1257)
このfor文は繰り返されている間dsigの値は変化しますが「入力されている」だけ。よってsigmaの値は「n=3000のsigma」しか入力されません。
補足
少し、考えてこのようにやってみたのですが…。if文のなかにいれてやればと考えたのですが。これだとsigmaとnの要素数が違ってしまうからだめなんですよね。要素数を合わせるのにはどのようにすればよろしいのでしょうか?すみません。 sigma=0; for n=1:3000, if n <=300 dsig=1; sigma(n) =sigma + dsig; elseif n <= 950 dsig=-1; sigma(n) =sigma + dsig; elseif n <= 1700 dsig=1; sigma(n) =sigma + dsig; elseif n <= 2550 dsig=-1; sigma(n) =sigma + dsig; elseif n <= 3000 dsig=1; sigma(n) =sigma + dsig; end end
関連するQ&A
- Matlabについて質問です
Matlabについて質問です。 長さがdataの数のデータがあり次のように分類したいのですが、データの中の-0.0074などが1になってくれません。 どこに原因があると思われますか?よろしくお願いします! recd=zeros(length(data),1); for n=1:length(data) if data(n)<-0.01; recd(n) = 0; elseif(-0.01<=data(n)<0); recd(n) = 1; elseif(0<=data(n)<0.01); recd(n) = 2; else recd(n) = 3; end end よろしくお願いします!!
- ベストアンサー
- C・C++・C#
- matlabで複数条件のif文を行列計算で行うには?
matlabで複数条件のif文を行列計算で行うには? matlabではfor文などは行列計算で回したほうが高速化できると聞きました。 for文でのやりかたはわかったのですが、複数条件でのif文ではどのように書けばよいのでしょうか? 自分のプログラムは以下のようなものです for i=1:100 for j=1:100 theta_kari=atan(abs(B(j,i))/abs(A(j,i))); if A(j,i)>=0&&B(j,i)>=0 theta(j,i)=theta_kari; elseif A(j,i)<0&&B(j,i)>=0 theta(j,i)=theta_kari+(pi/2); elseif A(j,i)<0&&B(j,i)<0 theta(j,i)=theta_kari+pi; elseif A(j,i)>=0&&B(j,i)<0 theta(j,i)=theta_kari+(pi/2*3); end end end よろしくお願いします
- ベストアンサー
- その他(プログラミング・開発)
- MATLAB 波形切り出し格納
MATLAB 波形切り出し格納 脳波波形の切り出しと格納をMATLABで行いたいのですが、波形が150(uV)を超えたところから、1秒間(1000ポイント)切り出し、新しいXというフォルダに格納するのを繰り返したいのですが、プログラムが分かりません。よろしくお願いします また波形のプロットまではできていてeditを用いてfor文で繰り返しを表現したいです。よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- プログラムについて(matlab)
matlabで以下のプログラムを実行しているのですが、 グラフが表示されません。 何故でしょうか、、。 ----------------------------------------- t=10 for r=400:1:2000 %波長 if 400<= r <700 y= 18*t.^(0.75); elseif 700<= r <1050 y= 18.*t.^(0.75).*10.^(0.002.*(r-700)); elseif 1050<= r <1150 y= 90*t.^(0.75)*1*1; elseif 1150<= r <1200 y= 90.*t.^(0.75).*1.*10.^(0.018.*(r-1150)); elseif 1200<= r <1400 y= 90*t.^(0.75)*1*8; elseif 1400<= r <1500 y= 5600*t.^(0.25); end plot(r,y) end ------------------------------------------------------ お詳しい方よろしくお願いします.
- 締切済み
- 情報工学
- IF文 教えてください (BASIC)
1, 2, 3, 4 のいずれかの値を取る3つの乱数 x, y, z を同じ行に表示させ,さらに x=y=z=1 のときは「大当」, x=y=z≠1 のときは「当」, x, y, z のうち2つだけが一致したときは「惜」, 上記以外の場合は「残念」 と表示するプログラム ELSEIF文を用い,IF文およびEND IF文は1回で済ませる。 乱数x,y,zを表示することと IF文が分かりません。 RANDOMIZE FOR n=1 TO 3 PRINT INT (RND*4)+1; NEXT n
- ベストアンサー
- 情報工学
- matlabのfor文について
matlabについて基本的な質問があります. たとえば a1 = 11 a2 = 32 a3 = 53 a4 = 63 for i = 1:length(a1) ○○○ end for i = 1:length(a2) ○○○ end for i = 1:length(a3) ○○○ end for i = 1:length(a4) ○○○ end の時に,for文を一つにまとめるにはどうすればいいですか?
- 締切済み
- その他(プログラミング・開発)
- MATLABでのデータ保存(for文等で)
初めて質問させていただきます。 MATLABで以下のようなfor文で1000回まわすとします。 for i=1:1000 c=rand(1000,1); fid=fopen('data1','wt'); fprintf(fid,'%f\n',c); end このままでは、最終的に1000回目のcの値だけがdata1に保存されます。 そうではなく、1~1000回目のcの値をそれぞれ別のファイルとして保存したいと思っております。(できればdata1~data1000という形で) 参考書などを読みあさったのですが、どう組めばいいのかわからず困っています。 for文等で、保存するファイル名の名前を、繰り返す度に変える方法などご存知の方おりましたら教えてください。よろしくおねがいします。
- ベストアンサー
- その他(プログラミング・開発)
- MATLABで行列を配列に格納する方法
MATLAB初心者で大変申し訳ありませんが、行列の格納の仕方がわからないので、投稿させていただきました。 for k = 1:1:10 k=k; t(:,:)=load(sprintf('test%5.5i.txt',k)); end 具体的に言いますと、上記のプログラムで、test00001~test00010.txtというファイルを任意の行列t(:,:)で読み込んでいるのですが、このt(:,:)をkと対応させて、例えばk=1の場合のtをt[1]、k=2の場合のtをt[2]などの配列に格納し、それを自由に呼び出し、計算を行いたいと考えております。 基礎がわかっていないためにどうしていいかわかりません。 宜しく御願いします。
- ベストアンサー
- その他(プログラミング・開発)
- matlabにおける行列の格納
matlabにおける質問です。 (matlabもとよりプラグラミング初心者です。) 例えばx=[1 2 3;3 4 5]となっているとき for i=1:10 y(1)=i*x end のように、しても、y(1)とxの次元が合わないというエラーが 出ると思います 行列を、このように「i番目」といった添え字のついた変数に 代入するには、どうしたらよいのでしょうか。 初心者のため大変初歩的なことですが、どなたかご教授ください。 とても焦っております。。。
- ベストアンサー
- 科学
お礼
結局、c言語ですることで解決しました.協力してくれた方々ありがとうございました.