- instead of looping over the variable names loop over a separate string array of names (which can also includes characters that are not valid in variable names). Basic indexing makes this simple and efficient.
- use fields of a structure instead of separated variables, then simply loop over the fieldnames.
How could I possibly iterate over three 3D arrays and use their variable names iteratively in the title and axes?
3 次查看(过去 30 天)
显示 更早的评论
x = freq;
idx_phi = find((phi_vec) == 0);
idx_theta = find((theta_vec) == 0);
v_dx = {EField_h(idx_phi,idx_theta,:), EField_v(idx_phi,idx_theta,:),EField_a(idx_phi,idx_theta,:)}
for i = 1: numel(v_dx)
y = squeeze(abs(v_dx{i}));
plot(x,((y).^2)/50,'-')
title(num2str(v_dx{i})) % Here I want to iterate over the variable names: EField_h, EField_v, EField_a
xlim([fc-0.5 fc+0.5]);
xlabel('frequency');
ylabel(v_dx{i},''); % Here I want to iterate over the variable names: EField_h, EField_v, EField_a
end
采纳的回答
Jan
2022-9-16
编辑:Jan
2022-9-16
v_dx = struct('EField_h', EField_h(idx_phi,idx_theta,:), ...
'EField_v', EField_h(idx_phi,idx_theta,:), ...
'EField_a', EField_h(idx_phi,idx_theta,:));
Fields = fieldnames(v_dx);
for k = 1:numel(Fields)
value = v_dx.(Fields{k});
y = squeeze(abs(value));
...
This is called "dynamic fieldnames". The parentheses around the field name are important.
By the way, there is no need to include an array in square brackets. [] is Matlab's operator for concatenating arrays. [x] concatenates x with nothing, so simply write x.
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Structures 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!