Subscripted assignment dimension mismatch
2 次查看(过去 30 天)
显示 更早的评论
Below is my code. When my program tries to calculate D, it gives me the error as stated in the title. the Varibles N, Eab, den, and V all produce a matrix of 1x47 values. I have tried removing the dot (.) from the equation's multiplication and divisons, but I still get errors (inner matrix dimnesions must agree). Any help is appreciated. Thank you.
row = 0;
col = 0;
for row = 1:1:420
for col = 1:1:420
N = No - No.*exp(-linavg*d);
Eab = E.*(lin./linavg);
D(row,col) = (N.*Eab)./(den.*V);
No = N*exp(-linavg*d);
end
col = col +1;
end
row = row+ 1;
3 个评论
Aquatris
2020-3-4
编辑:per isakson
2020-3-4
First of you do not need to specify col = col+1. When you define for col = 1:100, the for loop will increment the col variable every iteration
Secondly, do you want D to be a 3D matrix? If so,
D(row,col,1:47) = (N.*Eab)./(den.*V);
采纳的回答
per isakson
2020-3-5
编辑:per isakson
2020-3-5
See for loop to repeat specified number of times and note especially, "[...]Avoid assigning a value to the index variable within the loop statements. The for statement overrides any changes made to index within the loop." Thus, inside the loop the for-statement totally controls the value of the index.
Try
D = nan( 47, 420, 420 ); % Pre-allocate D before entering the for-loops
for row = 1:1:420
for col = 1:1:420
N = No - No.*exp(-linavg*d);
Eab = E.*(lin./linavg);
D( :, row, col ) = (N.*Eab)./(den.*V);
No = N*exp(-linavg*d);
end
end
By putting the result of the inner loop in the first dimension of D the 47 values are adjacent in memory, which gives a (small) performance gain.
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!