ループ処理が途中までしかできない原因

6 ビュー (過去 30 日間)
知真 梶山
知真 梶山 2021 年 10 月 11 日
移動済み: Atsushi Ueno 2022 年 8 月 17 日
30個のマーカーが以下のように格子状に並んでおり、横に隣り合うマーカー間のベクトルを作成したいです。
(1-2,2-3,3-4,4-5,6-7,7-8....のように)
そこで、マーカーの三次元データから以下のループをつくりました。
%マーカ間距離の算出
%マーカ1からマーカ2のベクトルを作成
%位置XYX 配列の並び
% 1--2--3--4--5
% | | | | |
% 6--7--8--9-10
% | | | | |
%11-12-13-14-15
% | | | | |
%16 17 18 19 20
% | | | | |
m_vector_hor = zeros(md.Frame_No,3,24);
for j=0:5
for k=1:4
m_vector_hor(:,:,j*4+k) = [X(:,j*5+(k+1))-X(:,j*5+k),Y(:,j*5+(k+1))-Y(:,j*5+k),Z(:,j*5+(k+1))-Z(:,j*5+k)];
end
end
m_vector_hor(:,:,4)までは正常に動くのですが、m_vector_hor(:,:,5)以降から全て0の配列になってしまいます。
どこが間違っているのでしょうか。
  1 件のコメント
Atsushi Ueno
Atsushi Ueno 2021 年 10 月 17 日
移動済み: Atsushi Ueno 2022 年 8 月 17 日
> m_vector_hor(:,:,4)までは正常に動くのですが、m_vector_hor(:,:,5)以降から全て0の配列になってしまいます。
ここではmd.Frame_No=1780としましたが、問題が再現しません。m_vector_hor(:,:,5)以降から全て0の配列になりませんでした。恐らく質問者様の環境と質問文に提示されたデータに違いがあるのではないかと思います。
上図は左からX,Y,Zをプロットしたものです。全て31列~100列がゼロになっています。しかし下記演算においては、j=5,k=4の時の最大となるindexがj*5+(k+1)=30なので、値の入っている範囲しか演算に使っていません。
> どこが間違っているのでしょうか。
X,Y,Zそれぞれについて5列ずつ差分(diff)を取ってm_vector_horにまとめて3次元データとして格納しています。その通りの意図であれば、エラーもありませんし、特にどこも間違っていないと思います。
以上、恐らく既に自己解決していると思いますが、後から見る人の為にも回答致します。

サインインしてコメントする。

回答 (0 件)

カテゴリ

Help Center および File Exchangeループと条件付きステートメント についてさらに検索

タグ

製品


リリース

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!