Один из вариантов - переписать функцию, которую вы хотите применить, для векторизации , чтобы она вычислялась поэлементно (так же, как встроенная функция EXP работает для скаляра/ вектор / матричный ввод):
u = 1./(exp(-w)+25);
В противном случае, если вы предпочитаете цикл for, все, что вам нужно сделать, это пересечь многомерную матрицу ввода, используя линейные индексы (в мажорном столбце), примените функцию к каждому элементу, затем RESHAPE
результат вернется в ожидаемую форму:
u = zeros(numel(w),1);
for i=1:numel(w)
u(i) = 1 ./ ( exp(-w(i)) + 25 );
end
u = reshape(u, size(w));
Это в основном то, что функции ARRAYFUN
делают для вас:
u = arrayfun(@(x) 1./(exp(-x)+25), w);
В случае, если вам также необходим доступ к фактическим индексам при цикле по элементам матрицы, вы всегда можете получить их с помощью IND2SUB
(который преобразует линейные индексы в индексы) или даже сгенерироватьвсе они с функциями, такими как MESHGRID
и NDGRID
...