• 締切済み

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

みんなの回答

回答No.4

こんな感じでしょうか? --------------------- 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);

kyousiga
質問者

お礼

結局、c言語ですることで解決しました.協力してくれた方々ありがとうございました.

回答No.3

>どうしてもn=3000の値が繰り返されてしまって。 もしかして…nの要素分(3000個)、sigmaの配列を作っていないとかw matlabの構文ははっきり知りませんが、そこから再度調べ直してみては如何でしょうか?

回答No.2

「補足」にあったプログラムをCに置き換えて実行してみましたが…この様な結果を欲しているのでしょうか? (下記URL参照)

参考URL:
http://fin215.hp.infoseek.co.jp/sample.txt
kyousiga
質問者

補足

はい。まったくそのとおりでございます。 どうしてもn=3000の値が繰り返されてしまって。

回答No.1

このfor文は繰り返されている間dsigの値は変化しますが「入力されている」だけ。よってsigmaの値は「n=3000のsigma」しか入力されません。

kyousiga
質問者

補足

少し、考えてこのようにやってみたのですが…。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