2016-07-07 7 views
0

1つの40×7の2つのデータセットに3つのデータセットがあり、これらを乗算して一定期間にわたって結果をプロットする必要があります。私の質問はそれをどうやって行うのかです。MATLABでのデータの乗算

私の試みは、データの3つの個々のセルにデータセットを分割し、オペレータa=[{A}]等を使用して(40×3とそれぞれ)ABCそれらを呼び出すことでした。
次に、.*a.*b.*cと時刻t=[0:40](これはx軸)を使用して、それらを互いに乗算しました。

次のエラーが発生し、何をすべきかわかりません。

Index exceeds matrix dimensions

誰でも手伝ってもらえますか?

commentにOPによって提供されるように

コード:

a = ans(:,1:3); 
b = ans(:,4:6); 
c = ans(:,7:9); 
A[{xyz}]; 
B=[{a}]; 
C=[{c}]; 
t=[0:41]; 
D=(A.*B.*C); 
plot(D,t); 
+0

正確にはどのようなエラーですか?あなたのコードをコード形式で投稿することができますか?あなたのデータセットは40x9で7ではなく、40x3の3倍が40x7であると仮定していますか? – KiW

+0

申し訳ありませんが、私は9 –

+0

を意味します。インデックスは行列の寸法を超えています。 –

答えて

0

だからあなたのコードを見て、それから、細胞を作成するために、不必要なようだ: ことができます。例:

ans=rand(40,9); 
a = ans(:,1:3); b = ans(:,4:6); c = ans(:,7:9); 
D=a.*b.*c; 
t=[1:40]; 
plot(D,t) 

または

ans=rand(40,9); 
    a = ans(:,1:3); b = ans(:,4:6); c = ans(:,7:9); 
    D=a.*b.*c; 
    t=[0:39]; 
    plot(D,t) 

あなたのTベクターは、あなたのinitalマトリックスと同じ長さを持たなければならない - あなたはt=[1:40]またはt=[0:39]

を行うと、tがあなたの場合はどちらかのように、あなたの行列は40行を持っていますが、t=[0:40]によって作成ベクトルが長い41のエントリですこれを行うには、あなたが正しい順序でそれをプロットする必要があり、x軸そうplot(t,D)代わりのplot(D,t)

+0

うーん、あなたのコードを試して、それは次のエラーを与えています:プロットを使用してエラーベクトルは同じ長さでなければなりません。 –

+0

tを0:39またはt = 1:40に変更しましたか? – KiW

+0

申し訳ありません、それは働いた。プロットは混乱のように見えますが、まだ何かを与えています –

1

一つの方法は、reshapepermuteを組み合わせて、第三の次元に沿って製品を取ることです。

あなたのデータは以下の通りです。あなたの場合は40x9になります。

rows = 4; cols = 6; N = 2; 
x = ceil(10*rand(rows,cols)) 
x = 
    9  6  1  6  5  8 
    6  9  9  5 10  6 
    10  9  7  9  6  3 
    7 10 10  3  9  7 

r = permute(reshape(x, rows, N, []), [3,1,2]) 
result = prod(r,3).' 
result = 
    54  6 40 
    54 45 60 
    90 63 18 
    70 30 63