フィルターのクリア

How to solve issue of "Error using horzcat"?

10 ビュー (過去 30 日間)
Asyran Abdullah
Asyran Abdullah 2018 年 9 月 27 日
コメント済み: Guillaume 2018 年 9 月 27 日
Hi, i have 1 problem as follow:
Error using horzcat
Dimensions of matrices being concatenated are not consistent.
Error in Untitled10 (line 464)
distMatrix(counter,:) = [i,j,dist ];
The code:
counter2 = 1;
for i = allTier2PCH
counter = 1;
distMatrix = zeros(1,3);
for j = allTier1PCH
x1 = node(j).x;
y1 = node(j).y;
x2 = node(i).x;
y2 = node(i).y;
dist = sqrt((x1-x2).^2+(y1-y2).^2);
distMatrix(counter,:) = [i,j,dist ];
counter = counter + 1;
end
end
The i,j and dist value is:
dist = i = 26 j = 4
22.022715545545239
25.000000000000000
How can i solve this problem? I have try some solution, but i could not solve it. Thanks
  2 件のコメント
madhan ravi
madhan ravi 2018 年 9 月 27 日
allTier1PCH ?
Asyran Abdullah
Asyran Abdullah 2018 年 9 月 27 日
Here the value of allTier1PCH.
>> allTier1PCH
allTier1PCH =
4 5 6 14 16 20 25

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

回答 (1 件)

Guillaume
Guillaume 2018 年 9 月 27 日
i and j are scalar, dist is a column vector with 2 elements. As the error message tells you, the dimensions are not consistent. Everything must have the same number of rows.
We have no idea what you intended to do, if you want to replicate i and j for each row of dist:
distMatrix(counter,:) = [repmat([i, j], size(dist, 1), 1), dist];
Or possibly, there's a bug in your code and dist should also be scalar.
  2 件のコメント
Asyran Abdullah
Asyran Abdullah 2018 年 9 月 27 日
Yes sir, i know that the dimensions of i,j and dist is not consistent. I just want to make this three input(i,j,dist) have a same element.
I try to replicate i and j as your code, but it contains some error,
Subscripted assignment dimension mismatch.
Error in Untitled10 (line 465)
distMatrix(counter,:) = [repmat([i, j], size(dist, 1), 1), dist];
Thanks sir.
Guillaume
Guillaume 2018 年 9 月 27 日
That new error is because the number of rows in distMatrix does not match the number of rows of dist. And indeed you declare distMatrix as a 1 row by 3 column array, whereas you tell us that dist has 2 rows.
There are actually many things wrong with your declaration of distMatrix:
  • it is created inside the i loop, so each time you go to the next i, you complete discard what you put in it in the previous step.
  • it is declared with just 1 row, but it appears that dist has 2 rows
  • it is declared with 3 columns but will ultimately contain at least 7 columns (exactly size(allTier1PCH, 2) columns and if you fix the reset for each i, exactly size(allTier1PCH, 2)^2 columns). This won't cause an error, Matlab will automatically grow the matrix but it is silly to predeclare a matrix the wrong size if you know its ultimate size
Note that if the number of elements in x and y varies per node, your code cannot possibly work (since the number of rows in dist will vary) and you need to rethink your algorithm. So first thing, are x and y always vectors with 2 rows?

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

カテゴリ

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