• 締切済み

matlabを使用したfor文の計算

matlabのfor文を使用し,計算をしています. for文を使用し計算すると, ans= ans=   ・   ・   ・ のような形で結果が出て,そのままファイルに出力すると最後の演算の結果のみが出力されてしまいます. この結果を縦に並べて行列の形で格納しなおしたのですが,この場合どのような式を組んだらいいのを教えていただければと思います.

みんなの回答

  • Kules
  • ベストアンサー率47% (292/619)
回答No.3

三度Kulesです。 >sum(i+1:i+100,:); と >sum(m(y+1:y+100,:)) は全く意味合いが違いますよ? 前者はsumという変数のi+1~i+100行を全て 後者はmという変数のy+1~y+100行の列ごとの和(関数sumを使用) です。 書くなら正しく書いて下さいね。 ととりあえず苦言を呈しておいて。 回答としては前回私が書いたものと大体一緒です。 for y=0:100:900とすると 出力結果を格納するインデックスを指定しずらいので、 Idx=0:100:900を予め作っておき、 for n=1:length(Idx) とすることで出力結果のインデックスを直に指定できるようにしておくといいでしょう。 ただ、入力mが1000行複数列ということなので、 出力結果も行列になるはずなので、予め出力変数のサイズを確定させておいた方がよさそうです。 まあ最初何が入っててもいいんですが、とりあえず0埋めするってことで zerosを使うのがいいでしょう。 DATA1=zeros(length(Idx),length(DATA(1,:))); で、ループ内では DATA1(n,:)=【計算結果】 のようにすればいいと思います。 参考になれば幸いです。

  • Kules
  • ベストアンサー率47% (292/619)
回答No.2

再びKulesです。 「 for i =0:100:900 sum(i+1:i+100,:); end 」 補足要求です。 ・sumは変数ですか、関数ですか?(構文的に関数はあり得ないですが) ・和を求めるデータは一列ですか、複数列ですか? まあいろいろやり方はありますが、 forループの前でIdx=0:100:900 とでもしといて、 for n=1:length(Idx); A(n)=【計算結果】; end として、【計算結果】の部分に「正しい計算内容」を入れてやれば 所望の動作をします。 おそらく今のままではsumの使い方が不正です。 参考になれば幸いです。

kumagoro_1234
質問者

補足

回答ありがとうございます. まず,もとのデータが1000行4列のデータでそれを100行ごとに4列別々に合計していきたいと考えています. 構文ですが, m=DATA; for y=0:100:900 DATA1=sum(m(y+1:y+100,:)) end といったようにまず,mに元のデータを格納し(その前にも計算していますので),それを上記のように合計するイメージでした. ですので,自分としては関数のつもりだったのですが,,, 勉強不足なものでアドバイスいただけたらと思います.

  • Kules
  • ベストアンサー率47% (292/619)
回答No.1

forループ内で使ってるループ変数が何かわかりませんが、 例えば for n=1:10; みたいにしているなら、 A(n)=【計算結果】; みたいにすればやりたいことはできます。 (最終的にはもっといろいろ仕込みが必要ですが、これでやりたいことはできます) 参考になれば幸いです。

kumagoro_1234
質問者

補足

すみません。プログラムのないようですが, for i =0:100:900 sum(i+1:i+100,:); end といった感じで1000個のデータの100行ずつ和を求めるようなプログラムです。