- 締切済み
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
- みんなの回答 (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
お礼
結局、c言語ですることで解決しました.協力してくれた方々ありがとうございました.