MATLAB:函数 returns 单值而不是向量
MATLAB: Function returns single value instead of vector
我试图在 MATLAB 中创建一个函数,它 returns 点列表中相邻点之间距离的向量 (x1,y1),...,(xn,yn)
。
也就是["distance (x1,y1) to (x2,y2)", ... ,"distance (xn-1,yn-1) to (xn,yn)","distance (xn,yn) to (x1,y1)"]
.
为此,我的想法是使用两个向量:
原来一个[(x1,y1),...,(xn,yn)]
和[(xn,yn),(x1,y1),...,(xn-1,yn-1)]
.
现在我构建了这个函数:
function erg = distVec(xy1)
n = length(xy1);
xy2 = cat(1,xy1(2:end,:),xy1(1,:));
% define snd vector
erg = [];
for j=n
erg = cat(2,erg,norm((xy1(j,:)-xy2(j,:))));
% norm(...) equals distance between two neighboring points
end
end
但此函数 returns 仅计算最后的距离,而不是具有距离的向量。
怎么了?
谢谢!
嗯,length(xy1)
returns,当然是向量的长度,例如7.
您的 for 循环执行 for j=n
,因此执行 j=7
。它不会 return last 距离评估,它 returns 唯一 距离评估。
将 for 循环更改为 for j=1:n
看来xy1
是一个两列矩阵,其中每个点都是一行。然后就可以不用循环得到结果如下:
result = sqrt(sum((xy1([2:end 1],:) - xy1).^2, 2));
即:循环移位一行(xy1([2:end 1],:)
),减去原始矩阵(- xy1
),逐元素平方((...).^2
),沿每一行求和(sum(... ,2)
), 并取平方根 (sqrt(...)
).
我试图在 MATLAB 中创建一个函数,它 returns 点列表中相邻点之间距离的向量 (x1,y1),...,(xn,yn)
。
也就是["distance (x1,y1) to (x2,y2)", ... ,"distance (xn-1,yn-1) to (xn,yn)","distance (xn,yn) to (x1,y1)"]
.
为此,我的想法是使用两个向量:
原来一个[(x1,y1),...,(xn,yn)]
和[(xn,yn),(x1,y1),...,(xn-1,yn-1)]
.
现在我构建了这个函数:
function erg = distVec(xy1)
n = length(xy1);
xy2 = cat(1,xy1(2:end,:),xy1(1,:));
% define snd vector
erg = [];
for j=n
erg = cat(2,erg,norm((xy1(j,:)-xy2(j,:))));
% norm(...) equals distance between two neighboring points
end
end
但此函数 returns 仅计算最后的距离,而不是具有距离的向量。
怎么了?
谢谢!
嗯,length(xy1)
returns,当然是向量的长度,例如7.
您的 for 循环执行 for j=n
,因此执行 j=7
。它不会 return last 距离评估,它 returns 唯一 距离评估。
将 for 循环更改为 for j=1:n
看来xy1
是一个两列矩阵,其中每个点都是一行。然后就可以不用循环得到结果如下:
result = sqrt(sum((xy1([2:end 1],:) - xy1).^2, 2));
即:循环移位一行(xy1([2:end 1],:)
),减去原始矩阵(- xy1
),逐元素平方((...).^2
),沿每一行求和(sum(... ,2)
), 并取平方根 (sqrt(...)
).