2012-01-22 3 views
0

Qをn(2次元)座標を含むnx2ベクトルとする。私はベクトル内のすべての整数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。

関連する問題