MATLAB Answers

0

構造体同士の計算

Asked by yuuya suzuki on 19 Jul 2019
Latest activity Commented on by yuuya suzuki on 22 Jul 2019
構造体、同士を簡単に加算、減算したいと思っています。
たとえば以下のような処理です
X.J1=20;
X.J2=20;
X.J3=20;
Y.J1=24;
Y.J2=10;
Y.J3=10;
Z=X-Y;  ←これがしたいができない
単純にフィールドごとに計算すればできるのはわかるのですが
フィールドが増えると面倒なので簡単な方法があれば教えてください

  1 Comment

yuuya suzuki on 22 Jul 2019
Thank you,

Sign in to comment.

Products

2 Answers

Answer by Kenta Itakura on 21 Jul 2019
 Accepted Answer

x=struct2table(X);
y=struct2table(Y);
C=x{1,:}-y{1,:}
他の回答者さまのやり方のほうが、汎用的で、いろいろなものに使えて優れているとは思いますが、
少なくとも、今回の計算では、このコードでも同様の結果が得られました。簡単な演算のみならこのような方法でも良いかもしれません。

  3 Comments

madhan ravi
on 21 Jul 2019
Also struct2array() would suffice.
Kenta Itakura on 21 Jul 2019
certainly, seems better
yuuya suzuki on 22 Jul 2019
Thank you, everyone. It was helpful.

Sign in to comment.


Yoshio
Answer by Yoshio
on 19 Jul 2019

こんな方法ではどうでしょうか。
X.J1=20;
X.J2=20;
X.J3=20;
Y.J1=24;
Y.J2=10;
Y.J3=10;
Z = MySub(X,Y)
function z = MySub(x,y)
fields = fieldnames(x);
n = length(fields);
z = x;
for i = 1:n
fld_name = fields{i};
z.(fld_name) = x.(fld_name)-y.(fld_name);
end
end

  2 Comments

yuuya suzuki on 22 Jul 2019
ご回答ありがとうございます
やってみたのですが以下のエラーが起こってしまいます。
'struct' 型の入力引数の演算子 '-' が未定義です。
エラー: DivStructures (line 24)
OutPut.(fld_name) = x.(fld_name)-y.(fld_name);
yuuya suzuki on 22 Jul 2019
すみません解決しました

Sign in to comment.