• ベストアンサー

MATLABのfor文の使い方について

MATLAB(というかプログラム)初心者です 下記を教えてください よろしくお願いいたします 「つくりたいプログラム」 y1=[A B C] y2=[D E F] ・ ・ ・ y200=[AA BB CC] 上記のような200個くらいある行列に同じ操作をしたいです そこでいちばん簡単な構造を考えました ////////////////////// y1=[A B C] y2=[D E F] for i=1:2 Yi=yi*5 end ///////////// 成功イメージは Y1=[5A 5B 5C] Y2=[5D 5E 5F] となってほしいのですが回りません・・・ yiの定義のしかたがわからず困っております 初歩的な質問かもしれませんが教えてくださいよろしくお願いいたします

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

  • ベストアンサー
  • m0r1_2006
  • ベストアンサー率36% (169/464)
回答No.2

y1, y2 などを yi なんかで参照できません. セルを使って, y{1} = 行列; y{2} = 行列; とかいれて for i=1:2 Y{i} = 5*y{i}; end とか

masasi0101
質問者

お礼

m0r1_2006さま ありがとうございます できました! y{1} = [1 2 3] y{2} = [4 5 6] for i=1:2 Y{i} = 5*y{i} end 非常に勉強になります 私の質問に答えていただく時間をつくっていただき ありがとうございました これを基にプログラムを作ってみます

その他の回答 (1)

回答No.1

う~ん、良く分からん(笑)。 A、B、Cって何でしょ?実際は数値? 僕はMATLABなんて高価で買えないんで、互換ソフトと言われるOctave GNU Octave: http://www.gnu.org/software/octave/ 使って試してみたんですが、例えば、 octave> Y = [1 2 3; 4 5 6] Y = 1 2 3 4 5 6 とかなってれば、そのまま、 octave> 5 * Y ans = 5 10 15 20 25 30 となって目的達成される筈なんですけどね。繰り返し構文なんて使う必要無いですよ。 例えば、 octave> y1 = [1 2 3] y1 = 1 2 3 octave> y2 = [4 5 6] y2 = 4 5 6 なんて設定してたら、Yを作るには、 octave> Y = [y1; y2] Y = 1 2 3 4 5 6 とすれば済みますし。もうこれで5倍すれば良いのでは? 要素(と言うか行別)の取り出しは、 octave> Y(1, :) ans = 1 2 3 octave> Y(2, :) ans = 4 5 6 とすれば済みますしね。

masasi0101
質問者

お礼

cametan_42様 ありがとうございます GNU Octaveさっそくインストールしました これで部屋でもプログラムを勉強することができます 私も大学でMATLABを利用することになり 高価でとても個人では所有できません・・・ A B C等は実際には数値が入ります 参考のプログラムも書いていただきありがとうございました 非常に勉強になります

関連するQ&A

  • MATLABで次のようなプログラムをfor文で回したいです。

    MATLABで次のようなプログラムをfor文で回したいです。 Y = wavread('aaa.wav'); for N = 0:5:360 load(sprintf('SP%03d.dat',N)); eval(sprintf('F%d = SP%03d',N,N)); C = conv((sprintf('F%d',N)),Y); CNAME = sprintf('C%03d.wav',N); wavwrite(C,32000,16,CNAME); end このプログラムだと SP000~SP360をF0~F360へとすることはできるのですが、 そのF0~F360をそれぞれY(aaa.wav)と畳みこむことができません。 どうしたらいいか教えてください。

  • DBI、joinsした時の、出力構造について

    先日、 joinした際、同じidのものは 纏まってくれたらハッピーだと考えました。 あれそれ動かしてきたのですが、出力結果でゴニョゴニョ行うのではなく、 一発で 目的の出力結果にならないものでしょうか。 よろしくお願いします。 テーブル1 a___b___c_ 1___BB__CC 2___BB__CC 3___BB__CC テーブル2 d___e___f D___E___1 D___E___2 D___E___2 結合テーブル a___b___c___d___e___f 1___BB__CC__DD__EE__1 2___BB__CC__DD__EE__2 2___BB__CC__DD__EE__2 3___BB__CC__ 出力結果 $VAR1_=_[ __________{ ____________'a'_=>_1, ____________'b'_=>_BB, ____________'c'_=>_CC, ____________'d'_=>_DD, ____________'e'_=>_EE, ____________'f'_=>_1, __________}, ____________[ ______________{ ________________'a'_=>_2, ________________'b'_=>_BB, ________________'c'_=>_CC, ________________'d'_=>_DD, ________________'e'_=>_EE, ________________'f'_=>_2, ______________}, ______________{ ________________'a'_=>_2, ________________'b'_=>_BB, ________________'c'_=>_CC, ________________'d'_=>_DD, ________________'e'_=>_EE, ________________'f'_=>_2, ______________}, ____________] __________,{ ____________'a'_=>_1, ____________'b'_=>_BB, ____________'c'_=>_CC, ____________'d'_=>_, ____________'e'_=>_, ____________'f'_=>_, ___________}, よろしくお願いします。

    • ベストアンサー
    • Perl
  • 選択による表示の可否を含めた複雑な計算表について

    下記のような計算表を作りたいのですが… AA  1  2  3  4 BB  11  12  13  14  15     ※AAのチェックによって表示され、選択可能    <例>    ・AA-1を選択するとBB-11,12のみ表示して1つのみ選択可能    ・AA-2を選択するとBB-11,12,14のみ表示して   〃    ・AA-3を選択するとBB-11~15表示して     〃 CC  テキストボックスでユーザ入力 DD  テキストボックスでユーザ入力 EE  CC×DD×<AAのチェックとBBのチェックによる数字>     <例>     ・BBの<例>と同じ条件の元で      AA-1---BB-11→15(チェックにより掛ける数字)      〃 ---〃 12→18( 〃 )      AA-2---BB-12→22( 〃 )      〃 ---〃 14→27( 〃 )      AA-3---BB-13→31( 〃 )      〃 ---〃 15→35( 〃 ) FF  Aa  Bb  Cc  Dd  Ee       ※AAとBBの条件と連動して、表示され選択可能      <例>      ・AA-1を選択するとBB-11,12のみ表示し、1つのみを選択。FF-Aaのみ表示      ・AA-2を選択するとBB-11,12,14のみ表示し、   〃  。FF-Aa,Ccのみ表示      ・AA-3を選択するとBB-11~15表示し、    〃    。FF-Bb,Ccのみ表示 GG  セレクトボックスで4割~8割から選択 HH  a  b  c  d  e  f  g      BBの選択内容とFFの選択内容によって表示(選択は1つのみ) ※ 後の計算によって数字変更     <例>      BB-11---FF-A---HH-a~c(a:3,b:6,c:10)      〃 ---〃 B---〃 a,c,f(a:4,c:5,f:8)      〃 ---〃 C---〃 c~g(c:4,d:5,e:8,f:14,g:18)      BB-12---FF-A---HH-a~c(a:11,b:14,c:18)      〃 ---〃 B---〃 b,d,f,g(b:7,d:9,f:12,g:13)      〃 ---〃 C---〃 c~f(c:1,d:3,e:9,f:11) 「計算」ボタンと「リセット」ボタン  ※「計算」ボタンをクリックするとIIとJJ」に計算内容を表示  ※「リセット」ボタンをクリックすると、すべてリセットさせる。AAのみ表示を残す II  EE×GG JJ  (AAとBBとFFのチェックによる数字)×(20-HH)×II÷2    <例>    AA-1---BB-12---FF-A→12(掛ける数字)×(20-HH-a)×II÷2    〃1---BB-12---〃 B→17(掛ける数字)×(20-〃c)×〃÷2                     ・                     ・ -------- 計算が大きく2つに別れて計算という形になるのですが、 <<1>> -AA-1---BB-11---FF-A-|→EEで必要な数字15 | | |-〃12---〃 -|→     〃 18 | | -〃2---BB-11---FF-A, C-|→EEで必要な数字20 | | |-〃 12--- 〃 -|→   〃  22 | | |-〃 14--- 〃 -|→   〃  27 | | -〃3---BB-11---FF-B,E-|→EEで必要な数字28 |   |-〃 12--- 〃 -|→   〃  30 |   |-〃 13--- 〃 -|→   〃  31 |   |-〃 14--- 〃 -|→   〃  32 |   |-〃 15--- 〃 -|→   〃  35 |         ・ -         ・ <<2>> ※ < >の数字は掛ける時に必要な数字 -BB-11---FF-A---HH-a<3> | |   |  |--〃b<6> | |   |  |--〃c<10> | |   | | |   FF-B---HH-a<4> | |   |  |--〃c<5> | |   |  |--〃f<8> | |   | | |   FF-C---HH-c<4> | |   |  |--〃d<5> | |   |  |--〃e<8> | |   |  |--〃f<14> | |   |  |--〃g<18> | | -BB-12---FF-A---HH-a<11> | |   |  |--〃b<14> | |   |  |--〃c<18> | |   | | |   FF-B---HH-b<7> | |   |  |--〃d<9> | |   |  |--〃f<12> | |   |  |--〃g<13> | |   | -      ・ |      ・ ※ < >の数字は掛ける時に必要な数字 <例>AA-1---BB-12---FF-A<12>×(20-HH-a<3>)×II÷2 という感じになります。 大変分かりにくいとは思いますが、ご教授の程よろしくお願いします。

  • MATLAB 画像表示に関して

    卒業研究にてMATLABを使用しています。 MATLAB初心者です。 Aの画像とその他の画像を比べる評価実験を行う予定です。 Aの画像を細かく定義 Bの画像を細かく定義 Aの画像を表示させる 5秒たったら、画像をリセットして Bの画像を表示 画像をリセットして終了 というところまでは不格好ながらにもかけました。 これを、 A、B、C、Dの画像を細かく定義 Aの画像5秒間表示後、 リセット(真っ黒の状態に)して ランダムに(B、C、D、E)いずれかの画像を表示させる リセットして終了 という形に変えたいのですが、うまく行きません。 CDEの画像を定義した後、どのようにすればいいのでしょうか? ご教授いただきたく思います。

  • 3点を通る平面の方程式を行列式で表す

    行列式について勉強していたのですが、分からない部分があったので質問させてください。 一直線上にない3点 (a,b,c) (d,e,f) (g,h,i) を通る平面の方程式を求める、という問題です。 まず求める平面の方程式を    Ax + By + Cz + D = 0 …(1) と置きます。 この方程式は上の3点を通るので    Aa + Bb + Cc + D = 0 …(2) Ad + Be + Cf + D = 0 …(3) Ag + Bh + Ci + D = 0 …(4) の3条件を満たします。 上の4つの式について、A~Dは全て0ではない、つまりこれは非自明な解をもちます。 したがって行列式      |x y z 1|      |a b c 1|      |d e f 1|      |g h i 1| が0となります。 ここまでは分かったのですが、教科書ではこの(行列式)=0 が求める平面の方程式と述べています。 しかし(行列式)=0 はあくまで(1)~(4)が非自明解を持つ条件なので、そうなる理由が分かりません。 (1)~(4)の連立方程式を解き、その非自明な解(A,B,C,D)を(1)に代入した結果が求める方程式だと思うのですが… 分かる方いましたら回答よろしくお願いします。

  • matlab計算について

    matlab独学で進めていますが、時間がないのと頭が足りないので 質問させていただきます。 p1=0.1; p2=2.663*10^6; D= 1:10:1000; A=(log(D)+12.7)/1.1; f(D)=(1/power((2*pi),0.5)*1.1*D)*exp(-0.5*power(A,2)); Y=(p/pash*4/3*pi*power((D/2),3))*f(D) plot(D,Y) X軸がD、Y軸がf(D)のグラフを作成したいです。 内部行列の次元は一致しなければなりません。 とエラーが出ます。このエラーの原因を教えてください。 間違いだらけかもしれませんが...ご指摘よろしくお願いします。

  • 3つの連想配列を交互に代入して、新しい連想配列を作りたい

    PHP Version 5.1.6を使っています。 それぞれの連想配列を先頭から順番に交互に代入したいのですが、 どのようなプログラムでできるのでしょうか? $arr1 = array(a1=>"aa1", a2=>"aa2", a3=>"aa3"); $arr2 = array(b1=>"bb1", b2=>"bb2", b3=>"bb3"); $arr3 = array(c1=>"cc1", c2=>"cc2", c3=>"cc3"); 代入後 $new_arr = array(  a1=>"aa1",  b1=>"bb1",  c1=>"cc1",  a2=>"aa2",  b2=>"bb2",  c2=>"cc2",  a3=>"aa3",  b3=>"bb3",  c3=>"cc3", );

    • ベストアンサー
    • PHP
  • Matlabのspdiags関数

    Matlabのspdiags関数に関してわからないところがあります。以下はMatlabのヘルプWebページから持ってきた例です。http://dl.cybernet.co.jp/matlab/support/manual/r2006/toolbox/matlab/math/?/matlab/support/manual/r2006/toolbox/matlab/math/sparse4.shtml B = [ 41 11 0 52 22 0 63 33 13 74 44 24 ]; d = [-3 0 2];、m=7, n=4のとき A = spdiags(B,d,7,4) A = (1,1) 11 (4,1) 41 (2,2) 22 (5,2) 52 (1,3) 13 (3,3) 33 (6,3) 63 (2,4) 24 (4,4) 44 (7,4) 74 これに対応するフル行列Aは、つぎのようになります。 full(A) ans = 11 0 13 0 0 22 0 24 0 0 33 0 41 0 0 44 0 52 0 0 0 0 63 0 0 0 0 74 mやnというのはfull(A)がm行n列の行列であるというイメージの対応がわかるのですが、d = [-3 0 2]とfull(A)の行列の関係がわかりません。-3,0,2というのはfull(A)のどこを見れば良いのでしょうか。

  • MATLABではどうすればいいのでしょうか?

    MATLABで、 M = 10 C = 1 K = 10 T =0.01 A = [0 1;-K/M -C/M] B = [0;1/M] I = [1 0;0 1] という条件で、 E1 = I + Σ(1/N!)*(A*T)^(N-1)  (ΣはN=2から) F1 = I+(A*T)*E1 G1 = E1*T*B の計算を、 例えば、5項目までと6項目までの計算をして、 その差をとり、差が条件以下(例えば10^-5以下)なら終了、 それ以上なら、続けて、次に6項目と7項目までを計算して、 その差をとるといったような、プログラムを作るにはどうすればよろしいのでしょうか?

  • Google Chromeの同期について

    パソコンを2台使っていて、両方とも全く同じブックマークだった場合に同期をしたらブックマークは重複してしまうのでしょうか? PC1:A,B,C,D,E PC2:A,B,C,D,E を同期したら PC1:AA,BB,CC,DD,EE PC2:AA,BB,CC,DD,EE となりますか?

専門家に質問してみよう