2011-12-15 21 views
0

私は、特定の数学的関数を実行するための短いMatlabコードを書こうとしています。コードは、1,2、または3のいずれかのエントリー(および他の要因に依存するサイズ)を持つベクトルHを生成します。 (私の考えでは)数字1,2および3は3つの特定のマトリックスに対応しています。私のプログラムがHを計算すると、そのエントリで表されるすべての行列を掛け合わせることができるようにしたいと思います。明確にするために、H = [1 2 3 2]ならば、私のコードでA * B * C * Bを計算したいと思います。これを行う最も簡単な方法は何ですか?私は行列であるエントリを持つベクトルを作成することを考えました、そしてベクトルのエントリーの積を与える関数を使用しましたが、それを働かせることができませんでした。 MATLABの新機能)行列の 'ラベル'をMatlabの行列に変換する

理想的には、残りのコードを書き直すのではなく、私がこれまで行ってきたことをうまく活用する方法があれば、それは素晴らしいことでしょう。私は滑らかなコーディングとは対照的に機能性を探しています - それが機能する限り、不器用であれば問題ではありません。

答えて

2

@zuloos答えは行列のサイズが同じ - 特に行の数が異なる場合。行列をセルに入れるとうまくいくはずです。私は、正確なコードのための私のMathWorks社のMATLAB構文のスキルをリフレッシュする必要が

matrices = {A,B,C,D}; 

result = matrices{H(1)}; 
for i=2:numel(H) 
    result = result * matrices{H(i)}; 
end 
+0

ありがとう - これは動作します。中括弧{}はなぜ使用されていますか? –

+0

中括弧は "セル"用です。行列とは異なり、セル内には何かを置くことができます - あなたの場合は必要かもしれません。 @ zulooのように保存する場合は、すべての行列のサイズが同じである必要があります。 – bdecaf

0

あなたのすべての行列を別のマスチスに入れたら、右の行列を選択するためのキーとしてHの値を使うことができますmatices = [A, B, C, D]Hを1つずつ実行し、最後の操作の結果を掛けます。あなたは、他のマトリックスと同じ次元の対角MATRICEから始めて、それがここに理にかなっている場合、私は知らないH

matrices = [A, B, C, D] 
// d is dimension of your matrices (i guess they are square) 
erg = diag(d) 
for i=length(H):1 
    // supposed your matices are 2d 
    erg = matrices(H(i),:,:)*init 
end 

の値にcoreesponding matricesにMATRICEとループの各ラウンドでこれを掛けますあなたがOpenGLで行うのと同じように、左から各ステップを掛けることができますが、これはステップで操作を分割することができると考えています(OpenGLで行われたような)。

+0

私は理解してかなりわからない – zuloo

+0

...これは、いくつかの分かかる場合があります。 H(i)= 1の場合 i = 1の場合:size(H) の場合: 行列(i)= Aなど? –

+0

あなたの行列を新しい "配列"に入れてmatlabでmatriceとし、Hをループして対応するmatriceを取得し、最後のステップの結果と乗算します。あなたの結果を対角行列で初期化しなければならないでしょう(X * DIAG = X) – zuloo

関連する問題