Getting an error "Matrix dimensions must agree" in my matlab program.help
1 view (last 30 days)
Show older comments
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)
0 Comments
Answers (2)
Torsten
on 18 Oct 2018
repmat(N,3,1) has three elements, repelem(ez,3,1) has four elements.
So matrix dimensions don't agree.
Best wishes
Torsten.
1 Comment
Walter Roberson
on 18 Oct 2018
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
on 18 Oct 2018
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 Comments
Walter Roberson
on 18 Oct 2018
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)).';
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!