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

12 Ansichten (letzte 30 Tage)
卓也
卓也 am 19 Mär. 2023
Kommentiert: 卓也 am 20 Mär. 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')%エラーが発生する

Akzeptierte Antwort

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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Atsushi Ueno
Atsushi Ueno am 19 Mär. 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 Kommentar
Atsushi Ueno
Atsushi Ueno am 19 Mär. 2023
Bearbeitet: Atsushi Ueno am 19 Mär. 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.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Resizing and Reshaping Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!