Еще одна попытка, придерживаясь очень близко к вашему описанию, вы можете использовать функцию arrayfun
.
Сначала определите функцию, которая отображает значение x
на желаемый результат.
fn = @(x) a(b(x), x);
Затем вызовите эту функцию для каждого входа в векторе i
.
i = 1:3;
v = arrayfun(fn, i);
Или все это можно сделать в одной строке очевидным образом:
v = arrayfun(@(x) a(b(x), x), 1:3);
Этот arrayfun
является просто сокращением для следующего цикла:
for ixLoop = 1:3
v(ixLoop) = a(b(ixLoop),ixLoop);
end
Связанные функции arrayfun
, cellfun
и structfun
имеют аналогичное использование и странным образом расширяют возможности. Эта статья Джоэля убедила меня быть верующим.