関数呼び出しに関するエラー

7 visualizzazioni (ultimi 30 giorni)
卓也
卓也 il 19 Mar 2023
Commentato: 卓也 il 20 Mar 2023
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')%エラーが発生する

Risposta accettata

Atsushi Ueno
Atsushi Ueno il 19 Mar 2023
> 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 Commenti
Atsushi Ueno
Atsushi Ueno il 19 Mar 2023
> file_nameが'sholder'の時は実行されるのですが,それ以外の時は「配列のサイズがこの演算に適合しません。」とエラーが出ます
string型の文字列同士を == 演算子で比較する事は可能です。
文字列のサイズが異なっていても問題ありません。
比較結果も1文字毎ではなく文字列全体の比較結果となります。
"elbow" == "wrist"
ans = logical
0
"elbow" == "elbow"
ans = logical
1
"elbow" == "shoulder"
ans = logical
0
卓也
卓也 il 20 Mar 2023
ありがとうございます.解決できました

Accedi per commentare.

Più risposte (1)

Atsushi Ueno
Atsushi Ueno il 19 Mar 2023
> 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 Commento
Atsushi Ueno
Atsushi Ueno il 19 Mar 2023
Modificato: Atsushi Ueno il 19 Mar 2023
> file_nameが'sholder'の時は実行されるのですが,それ以外の時は「配列のサイズがこの演算に適合しません。」とエラーが出ます
文字ベクトル同士を == 演算子で比較するには、比較対象が同一サイズである必要があります。比較結果も1文字毎の比較結果となります。
'elbow' == 'wrist'
ans = 1×5 logical array
0 0 0 0 0
'elbow' == 'wrbow'
ans = 1×5 logical array
0 0 1 1 1
'elbow' == 'shoulder'
Arrays have incompatible sizes for this operation.

Accedi per commentare.

Categorie

Scopri di più su 行列および配列 in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!