MATLAB:函数返回单个值而不是向量

时间:2015-09-02 12:29:15

标签: matlab function for-loop vector distance

我尝试在MATLAB中创建一个函数,它返回点(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 

但是这个函数不是带有距离的向量,而只返回最后评估的距离。

有什么问题?

谢谢!

2 个答案:

答案 0 :(得分:4)

看起来xy1是一个双列矩阵,其中每个点都是一行。然后您可以获得没有循环的结果,如下所示:

result = sqrt(sum((xy1([2:end 1],:) - xy1).^2, 2));

即:循环移位一行(xy1([2:end 1],:)),减去原始矩阵(- xy1),逐个元素((...).^2),沿每行求和({{1} }),取平方根(sum(... ,2))。

答案 1 :(得分:3)

那么,length(xy1)当然会返回向量的长度,例如7。

你的循环执行for j=n,因此适用于j=7。它不返回评估的最后距离,它返回唯一距离评估。

将for循环更改为for j=1:n