Чтобы вычислить общую массу 2D структурной системы, я получил информацию о площади, свойствах (хранящихся в массиве "props" -структуры) и материале (сохраненном в массиве "mats -structure") каждого структурного компонента..
Я могу зациклить общее количество элементов и рассчитать массу индивидуально по площади * толщине * плотности, но хотел бы сделать это без использования цикла for.
% This is the database
area = [100 300 500];
props.shell(1).thic = 5;
props.shell(2).thic = 10;
mats.alu(1).rho = 10;
mats.alu(2).rho = 15;
mats.steel(1).rho = 20;
mats.steel(2).rho = 25;
Например, если я хочу вычислить массу элементов 1 и 3, определяются следующие справочные таблицы:
% beforehand computed field names and indices
a_idx = [1 3]
p_name = {'shell' 'shell'};
p_idx = [1 2];
m_name = {'alu' 'steel'};
m_idx = [2 1];
% this works
mass = 0;
for i = 1 : numel(a_idx)
mass = mass + area(a_idx(i)) * props.(p_name{i})(p_idx(i)).thic * mats.(m_name{i})(m_idx(i)).rho
end
Вот как я бы хотел, чтобы это работало:)
mass = sum(area(a_idx) .* [props.(p_name)(p_idx).thic] .* [mats.(m_name)(m_idx).rho])
Я уже пытался
mass = sum(area(a_idx) .* [props.(p_name{:})(p_idx).thic] .* [mats.(m_name{:})(m_idx).rho])
но, к сожалению, я не могу получить индексирование со строкой правильно ...