重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

matlabにおける質問です。
(matlabもとよりプラグラミング初心者です。)

例えばx=[1 2 3;3 4 5]となっているとき

for i=1:10
y(1)=i*x
end

のように、しても、y(1)とxの次元が合わないというエラーが
出ると思います

行列を、このように「i番目」といった添え字のついた変数に
代入するには、どうしたらよいのでしょうか。
初心者のため大変初歩的なことですが、どなたかご教授ください。

とても焦っております。。。

A 回答 (5件)

そうですね…


そもそも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つのセルに対して操作してやる必要があります。

以上、参考になれば幸いです。
    • good
    • 1
この回答へのお礼

御礼が物凄く遅くなって申し訳ございません。
皆様にご回答いただく度にとても感謝していたのですが、
焦りすぎていて、御礼をするのを先延ばしにしてしまった結果
今更・・・という形になってしまいました。

心よりお詫び申し上げます。
ご親切にお答えくださって、本当にありがとうございました。

お礼日時:2012/03/07 04:16

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ですが動作は確認しました.
    • good
    • 0
この回答へのお礼

御礼が物凄く遅くなって申し訳ございません。
皆様にご回答いただく度にとても感謝していたのですが、
焦りすぎていて、御礼をするのを先延ばしにしてしまった結果
今更・・・という形になってしまいました。

心よりお詫び申し上げます。
ご親切にお答えくださって、本当にありがとうございました。
(ベストアンサーとさせていただけなく、申し訳ございません。
一つしか選べないのが心苦しいです。)

お礼日時:2012/03/07 04:18

多次元配列です。

参考に。

参考URL:http://www.mathworks.co.jp/help/ja_JP/techdoc/ma …
    • good
    • 0
この回答へのお礼

御礼が物凄く遅くなって申し訳ございません。
皆様にご回答いただく度にとても感謝していたのですが、
焦りすぎていて、御礼をするのを先延ばしにしてしまった結果
今更・・・という形になってしまいました。

心よりお詫び申し上げます。
ご親切にお答えくださって、本当にありがとうございました。

お礼日時:2012/03/07 04:18

>「添え字で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で代用しますが、余計分かりにくくなると思います。
    • good
    • 0
この回答へのお礼

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

心よりお詫び申し上げます。
ご親切にお答えくださって、本当にありがとうございました。
(ベストアンサーとさせていただけなく、申し訳ございません。
一つしか選べないのが心苦しいです。)

お礼日時:2012/03/07 04:20

xは3X3の正方行列ですか?



>行列を、このように「i番目」といった添え字のついた変数に代入するには、どうしたらよいのでしょうか。
この文の意味が不明です。「i番目」といった添え字のついた変数とは何ですか?

ちなみにプログラムだと、3X3の正方行列にiという整数(1~10)をかけて行列yに格納したいように読めます(y(1)は間違いですが)。その意図であってますか?

この回答への補足

xは2行3列です(xの大きさはなんでもかまわないのですが)。
おっしゃる通り、y(1)は間違いでy(i)と打ったつもりでおりました。

その意図であっております。
すなわち、

「添え字でy(1),y(2),y(3)、、、というように
順々にyに異なる行列を格納していきたいが、
y(i)では行列と次元が異なり不適切なので
どのようにyに添え字をつければ行列を格納できるのでしょうか」
ということです。
文章がわかりにくく申し訳ございません。


(matlabではあまりfor文を使わないほうがいいようなことを
聞いたのですが、この場合for文を使わないとどうなるでしょうか。)

補足日時:2011/07/06 19:07
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!