2012-01-22 56 views
0

设Q是包含n(2维)坐标的n×2矢量。我想计算向量中所有整数i的i和i + 1坐标之间的距离,然后将其加起来。从矢量获得的值的总和

我想出了以下内容:

syms d 

symsum(sqrt(sum((Q(d,:)-Q(d+1,:).^2))),d,1,n-1); 

不过,我得到以下错误:

??? Error using ==> sym.sym>notimplemented at 2653 
Function 'subsindex' is not implemented for MuPAD symbolic objects. 

Error in ==> sym.sym>sym.subsindex at 1359 
      notimplemented('subsindex'); 

Error in ==> test4 at 4 
symsum(sqrt(sum((Q(d,:)-Q(d+1,:).^2))),d,1,n-1); 

或者我当然可以使用for循环,但我怀疑这可能是不是最快最快的解决方案。

回答

0

如果我正确读取这个,你只需要你的nx2矩阵中的点对之间的欧几里德距离。所以你所要做的就是这样:

>> Q = rand(10,2) %Define Q 

Q = 

    0.6557 0.7060 
    0.0357 0.0318 
    0.8491 0.2769 
    0.9340 0.0462 
    0.6787 0.0971 
    0.7577 0.8235 
    0.7431 0.6948 
    0.3922 0.3171 
    0.6555 0.9502 
    0.1712 0.0344 

>> distPairs = sum(diff(Q,1,1).^2,2); %Distance between adjacent coordinates 
>> totalDist = sum(distPairs) %Sum all of the pairwise distances. 

totalDist = 

    4.0486 
0

我认为这是你实施syms变量的方式。您正在使用符号对象d来引用向量Q(您的错误)中的“第d个”元素,然后使用(窃取)来自symsum的嵌入循环来遍历向量。

此外,符号对象也很耗时。只要做for/while循环,它会更容易和更快。

gl。