Subscripted assignment dimension mismatch

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 件のコメント

per isakson
per isakson 2020 年 3 月 4 日
編集済み: per isakson 2020 年 3 月 4 日
What are the statemets
row = 0;
col = 0;
col = col +1;
row = row+ 1;
supposed to do?
Pre-allocate D before entering the for-loops
D = nan(420,420);
Left hand side of
D(row,col) = (N.*Eab)./(den.*V);
is a scalar and the right hand side is a 1x47 vector. That doesn't agree. What do you want to achieve with this statement?
Kira Bruce
Kira Bruce 2020 年 3 月 4 日
Row and col are ment to set the for loop so that it will do the calculation within the for loop for 420 rows and 420 columns, row and col respectively. Col = col + 1 will allow for the for loop for keep going, as will the row version, until it goes through the values I want.
I want D(row,col) to be a vector of 1x47 values. I want the value produced in each for loop to be stored in a matrix so it can be used in other calculations involving the variable D.
Thank you,
Kira
Aquatris
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
per isakson 2020 年 3 月 5 日
編集済み: per isakson 2020 年 3 月 5 日

0 投票

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 件)

カテゴリ

ヘルプ センター および File ExchangeCreating and Concatenating Matrices についてさらに検索

製品

リリース

R2017b

質問済み:

2020 年 3 月 3 日

編集済み:

2020 年 3 月 5 日

Community Treasure Hunt

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

Start Hunting!

Translated by