Getting an error "Matrix dimensions must agree" in my matlab program.help

2 ビュー (過去 30 日間)
Virajan Verma
Virajan Verma 2018 年 10 月 18 日
コメント済み: Walter Roberson 2018 年 10 月 18 日
N(1)=0.5*(epsilon3*epsilon3-epsilon3); %%epsilon=natural coordinte
N(2)=(1-epsilon3*epsilon3);
N(3)=0.5*(epsilon3*epsilon3+epsilon3);
N_matrix = zeros(9, 27);
for i=1:9
N_matrix(3,1:9)=repmat(N, 3, 1) .* repelem(ez, 3, 1)(ERROR HERE)
end
Error using .* Matrix dimensions must agree.
Error in practisee2 (line 232) N_matrix(3,1:9)=repmat(N, 3, 1) .* repelem(ez, 3, 1)

回答 (2 件)

Torsten
Torsten 2018 年 10 月 18 日
repmat(N,3,1) has three elements, repelem(ez,3,1) has four elements.
So matrix dimensions don't agree.
Best wishes
Torsten.
  1 件のコメント
Walter Roberson
Walter Roberson 2018 年 10 月 18 日
Perhaps -- but the code appears to be derived from an different question in which Jan's suggestion with the for loop was intended to run with a column vector of N, not a row vector.

サインインしてコメントする。


Walter Roberson
Walter Roberson 2018 年 10 月 18 日
We do not know what size ez is?
We do not know if you have pre-defined N to be something other what is implied by this code?
This code implies N becomes 1 x 3: when you do not initialize a variable but assign multiple entries to it using linear indexing, then it makes a row vector.
repmat(N, 3, 1) would be 3 x 3. If the repelem(ez,3,1) were compatible for .* then the result would have to be 3 x 3. But you are trying to store that 3 x 3 into a 1 x 9 slot.
I speculate that your expectation was that assigning consecutive linear indices to a variable resulted in a column vector.
  5 件のコメント
Virajan Verma
Virajan Verma 2018 年 10 月 18 日
will repmat(N, 3, 1) .* repelem(ez, 3, 1) give the answer that i am expecting because i read about repmat and repelem. They were about repeating the value of an array. Is that related to my problem??
Walter Roberson
Walter Roberson 2018 年 10 月 18 日
repmat() of a 3 x 1 with count 3, 1, is going to give a 9 x 1 vector.
repelem() of a 1 x 3 with count 3, 1, is going to give a 3 x 3 array.
It is not valid to .* between a 9 x 1 and a 3 x 3.
Try
N_matrix(3,1:9) = (repmat(N(:), 3, 1) .* repelem(ez(:), 3, 1)).';

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by