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(...)).