• ベストアンサー

matlabにおける行列の格納

matlabにおける質問です。 (matlabもとよりプラグラミング初心者です。) 例えばx=[1 2 3;3 4 5]となっているとき for i=1:10 y(1)=i*x end のように、しても、y(1)とxの次元が合わないというエラーが 出ると思います 行列を、このように「i番目」といった添え字のついた変数に 代入するには、どうしたらよいのでしょうか。 初心者のため大変初歩的なことですが、どなたかご教授ください。 とても焦っております。。。

質問者が選んだベストアンサー

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

そうですね… そもそもy(1)とかy(2)というものには値が1つしか入らないので、 そこに行列を入れることはできないですよね。 他の方が書かれているように、多次元配列で解決する、というのが1つの手だと思います。 もう1つの手としては、セル配列を使うというものがあるでしょう。 セル配列は、言うなれば変数の「入れ物」からなる配列です。(変数の名前は保持されません) ですので、それぞれの配列に行列を入れることもできますし、 ある入れものには数値の行列を入れて、別の入れ物には文字列を入れて、なんてこともできますし、 入れ物の中に入れ物を入れることもできます(セル配列の1つの要素をセルにする) ということで、 y=cell(10,1); for i=1:10 y{i}=i*x; end とすることで1つのセル配列に全ての行列を入れることができます。 ただ、セル配列はそのあとの計算が面倒になるかも知れません。 例えば、多次元配列ならその全ての要素に1を足す、とか2倍する、という操作は簡単にできます(多分)が、 セル配列の場合は1つ1つのセルに対して操作してやる必要があります。 以上、参考になれば幸いです。

uni7
質問者

お礼

御礼が物凄く遅くなって申し訳ございません。 皆様にご回答いただく度にとても感謝していたのですが、 焦りすぎていて、御礼をするのを先延ばしにしてしまった結果 今更・・・という形になってしまいました。 心よりお詫び申し上げます。 ご親切にお答えくださって、本当にありがとうございました。

その他の回答 (4)

  • masudaya
  • ベストアンサー率47% (250/524)
回答No.5

yをもう一つ次元を上げて3次元の行列にすればよいかと思います. x=[1 2 3;3 4 5]; [xsize,ysize]=size(x); y=zeros(xsize,ysize,10); for i=1:10 y(:,:,i)=i*x; end つまり,最初の添え字は,行列をして,最後の行列は 番号を指定するような感じになります. 一応2009bですが動作は確認しました.

uni7
質問者

お礼

御礼が物凄く遅くなって申し訳ございません。 皆様にご回答いただく度にとても感謝していたのですが、 焦りすぎていて、御礼をするのを先延ばしにしてしまった結果 今更・・・という形になってしまいました。 心よりお詫び申し上げます。 ご親切にお答えくださって、本当にありがとうございました。 (ベストアンサーとさせていただけなく、申し訳ございません。 一つしか選べないのが心苦しいです。)

  • my3027
  • ベストアンサー率33% (495/1499)
回答No.3

多次元配列です。参考に。

参考URL:
http://www.mathworks.co.jp/help/ja_JP/techdoc/math/f1-86528.html
uni7
質問者

お礼

御礼が物凄く遅くなって申し訳ございません。 皆様にご回答いただく度にとても感謝していたのですが、 焦りすぎていて、御礼をするのを先延ばしにしてしまった結果 今更・・・という形になってしまいました。 心よりお詫び申し上げます。 ご親切にお答えくださって、本当にありがとうございました。

  • my3027
  • ベストアンサー率33% (495/1499)
回答No.2

>「添え字でy(1),y(2),y(3)、、、というように順々にyに異なる行列を格納していきたいが、y(i)では行列と次元が異なり不適切なのでどのようにyに添え字をつければ行列を格納できるのでしょうか」 ということです。文章がわかりにくく申し訳ございません。 少し分かりましたが、y行列のサイズがわかりません?もしxより大きければ、それをy内にどう配置するかというプログラミングになりますが、もしyがxと同じサイズで複数必要であれば3次元行列という方法を使わないといけません。y(i,j,k)のkでk種類のy行列が作れます。 >(matlabではあまりfor文を使わないほうがいいようなことを聞いたのですが、この場合for文を使わないとどうなるでしょうか。) 別にforを使って問題ないと思います。for使わないとwhileとかifで代用しますが、余計分かりにくくなると思います。

uni7
質問者

お礼

御礼が物凄く遅くなって申し訳ございません。 my3027さんは3回もご返答くださったのですよね。 本当にありがとうございました。 皆様にご回答いただく度にとても感謝していたのですが、 焦りすぎていて、御礼をするのを先延ばしにしてしまった結果 今更・・・という形になってしまいました。 心よりお詫び申し上げます。 ご親切にお答えくださって、本当にありがとうございました。 (ベストアンサーとさせていただけなく、申し訳ございません。 一つしか選べないのが心苦しいです。)

  • my3027
  • ベストアンサー率33% (495/1499)
回答No.1

xは3X3の正方行列ですか? >行列を、このように「i番目」といった添え字のついた変数に代入するには、どうしたらよいのでしょうか。 この文の意味が不明です。「i番目」といった添え字のついた変数とは何ですか? ちなみにプログラムだと、3X3の正方行列にiという整数(1~10)をかけて行列yに格納したいように読めます(y(1)は間違いですが)。その意図であってますか?

uni7
質問者

補足

xは2行3列です(xの大きさはなんでもかまわないのですが)。 おっしゃる通り、y(1)は間違いでy(i)と打ったつもりでおりました。 その意図であっております。 すなわち、 「添え字でy(1),y(2),y(3)、、、というように 順々にyに異なる行列を格納していきたいが、 y(i)では行列と次元が異なり不適切なので どのようにyに添え字をつければ行列を格納できるのでしょうか」 ということです。 文章がわかりにくく申し訳ございません。 (matlabではあまりfor文を使わないほうがいいようなことを 聞いたのですが、この場合for文を使わないとどうなるでしょうか。)

関連するQ&A