関数呼び出しに関するエラー
12 ビュー (過去 30 日間)
古いコメントを表示
file_nameが'sholder'の時は実行されるのですが,それ以外の時は「配列のサイズがこの演算に適合しません。」とエラーが出ます.
file_nameに'shoulder','elbow'を入力したときもプログラムが実行させるにはどこを変えるべきでしょうか
function markerdata = extract_marker(file_name,marker_name)
M = readmatrix(file_name);
M = fillmissing(M(6:end,3:end),"spline",1);
%名前に合わせてフレームごとのxyz座標を出力
if marker_name == 'shoulder'
markerdata = M(:,1:3);
elseif marker_name == 'elbow'
markerdata = M(:,10:12);
elseif marker_name =='wrist'
markerdata = M(:,19:21)
end
end
extract_marker('arm_right Cal 03','shoulder')%正常に実行される
extract_marker('arm_right Cal 03','wrist')%エラーが発生する
0 件のコメント
採用された回答
Atsushi Ueno
2023 年 3 月 19 日
> file_nameに'shoulder','elbow'を入力したときもプログラムが実行させるにはどこを変えるべきでしょうか
下記プログラムのコメント箇所を変更します
extract_marker('arm_right Cal 03',"shoulder"); % <======= 一重引用符を二重引用符に変更
extract_marker('arm_right Cal 03',"wrist"); % <======= 一重引用符を二重引用符に変更
function markerdata = extract_marker(file_name,marker_name)
M = readmatrix(file_name);
M = fillmissing(M(6:end,3:end),"spline",1);
%名前に合わせてフレームごとのxyz座標を出力
if marker_name == "shoulder" % <======= 一重引用符を二重引用符に変更
markerdata = M(:,1:3);
elseif marker_name == "elbow" % <======= 一重引用符を二重引用符に変更
markerdata = M(:,10:12);
elseif marker_name == "wrist" % <======= 一重引用符を二重引用符に変更
markerdata = M(:,19:21)
end
end
2 件のコメント
Atsushi Ueno
2023 年 3 月 19 日
> file_nameが'sholder'の時は実行されるのですが,それ以外の時は「配列のサイズがこの演算に適合しません。」とエラーが出ます
string型の文字列同士を == 演算子で比較する事は可能です。
文字列のサイズが異なっていても問題ありません。
比較結果も1文字毎ではなく文字列全体の比較結果となります。
"elbow" == "wrist"
"elbow" == "elbow"
"elbow" == "shoulder"
その他の回答 (1 件)
Atsushi Ueno
2023 年 3 月 19 日
> file_nameに'shoulder','elbow'を入力したときもプログラムが実行させるにはどこを変えるべきでしょうか
下記プログラムのコメント箇所を変更します
function markerdata = extract_marker(file_name,marker_name)
M = readmatrix(file_name);
M = fillmissing(M(6:end,3:end),"spline",1);
%名前に合わせてフレームごとのxyz座標を出力
if strcmp(marker_name,'shoulder') % <======= ここを strcmp 関数に変更
markerdata = M(:,1:3);
elseif strcmp(marker_name,'elbow') % <======= ここを strcmp 関数に変更
markerdata = M(:,10:12);
elseif strcmp(marker_name,'wrist') % <======= ここを strcmp 関数に変更
markerdata = M(:,19:21)
end
end
1 件のコメント
Atsushi Ueno
2023 年 3 月 19 日
編集済み: Atsushi Ueno
2023 年 3 月 19 日
> file_nameが'sholder'の時は実行されるのですが,それ以外の時は「配列のサイズがこの演算に適合しません。」とエラーが出ます
文字ベクトル同士を == 演算子で比較するには、比較対象が同一サイズである必要があります。比較結果も1文字毎の比較結果となります。
'elbow' == 'wrist'
'elbow' == 'wrbow'
'elbow' == 'shoulder'
参考
カテゴリ
Help Center および File Exchange で Resizing and Reshaping Matrices についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!