问题
I'm looking for a very simple method to sum structures
which have identical substructure hierarchies.
Note: This began with an attempt to sum bus structures in Simulink.
MWE
Assume I have 2 structures red and blue.
Each structure has subfields a, b, and c.
Each subfield has subfields x1 and x2.
This is drawn below:
red. [a, b, c].[x1, x2]blue.[a, b, c].[x1, x2]
Does a function exist such that a mathematical operator
may be applied to each parallel element of red and blue?
Something along the lines of:
purple = arrayfun( @(x,y) x+y, red, blue)
回答1:
Realizing that dynamic code which does support arbitrary structs and supports code generation is impossible (afaik), the best possibility to simplify coding is a function which generates the code:
function f=structm2(s)
e=structm3(s);
f=strcat('y.',e,'=plus(u.',e,',v.',e,');');
f=sprintf('%s\n',f{:});
end
function e=structm3(s)
e={};
for f=fieldnames(s).'
f=f{1};
if isstruct(s.(f))
e=[e,strcat([f,'.'],structm3(s.(f)))];
else
e{end+1}=f;
end
end
end
You call structm2 inputting a struct and it returns the code:
y.a.x1=plus(u.a.x1,v.a.x1);
y.a.x2=plus(u.a.x2,v.a.x2);
y.b.x1=plus(u.b.x1,v.b.x1);
y.b.x2=plus(u.b.x2,v.b.x2);
来源:https://stackoverflow.com/questions/35853450/matlab-sum-structures