Help me understand!
5 次查看(过去 30 天)
显示 更早的评论
In the 3rd for loop , xloc(k) and yloc(k) are both vectors of length 6. And xp and yp are vectors of length 30 . If done alone the subtraction returns an error but here it doesn't. I wanna know what's so special here that it doesn't return an error?
if true
% xloc = [1,7,8,17,22,27] ;
yloc = [28,18,16,2,10,8] ;
V = [3,7,4,5,2,6] ;
best_loc_x = 31 ;
best_loc_y = 31 ;
min_cost = 1e+6 ;
anotherx = [] ;
anothery = [] ;
C = [] ;
for xp = 1:30
for yp = 1:30
for k = 1:6
d(k) = sqrt((xloc(k)-xp).^2+(yloc(k)-yp).^2) ;
cost(k) = d(k)*V(k);
end
loc_cost(xp,yp) = sum(cost) ;
if loc_cost(xp,yp) < min_cost
best_loc_x = xp;
best_loc_y = yp;
min_cost = loc_cost(xp,yp);
elseif (loc_cost(xp,yp)-min_cost) <=1
anotherx = [anotherx,xp] ;
anothery = [anothery,yp];
C = [C,loc_cost(xp,yp)];
end
end
end
end
6 个评论
采纳的回答
Walter Roberson
2019-5-27
for xp = 1:30 %so xp is a scalar
for yp = 1:30 %so yp is a scalar
for k = 1:6 %so k is a scalar
d(k) = sqrt((xloc(k)-xp).^2+(yloc(k)-yp).^2) ;
vector indexed at a scalar gives a scalar, so xloc(k) is a scalar and yloc(k) is a scalar. You subtract the scalars xp and yp from them, giving scalars for the sub-expressions. You square, add, square-root, giving a scalar output, which you store in a scalar location. No problem.
for xp = 1:30
does not make xp a vector of 30 elements: it tells MATLAB to iterate making xp hold each of the values 1:30 in turn, so at any one time xp is a scalar.
4 个评论
Walter Roberson
2019-5-28
If you start from the beginning of a vector and count 1 for the first element, 2 for the second element, and so on, then d(k) refers to the content of the element for which the count is the same as the value k. For example d(7) is the seventh element. It is not the first seven elements together, just the one.
更多回答(1 个)
另请参阅
类别
在 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!