10 views (last 30 days)

Show older comments

I have a cell array FS which contains a function handle at each cell. I want to multiply the output of each cell with each other (giving each function handle the SAME input). The function handles in each cell are identical except for the i value stored in them.

Define array as:

N = 5;

for i=1:N

FS{i} = @(x) x+i;

end

i can obtain my desired result by a simple loop:

x = 3;

P = FS{1}(x)

for i=2:length(FS)

P = P * FS{i}(x)

end

However, I wish to define this operation as a new function handle, performing the same action:

b = @(x) FS{1}(x) * FS{2}(x) * FS{3}(x) ... * FS{N}(x)

but this should of course be flexible for any number of elements (FS).

Walter Roberson
on 26 Sep 2018

b = @(x) prod(cellfun(@(F) F(x), FS))

This assumes that the output of each handle is scalar even if x is non-scalar.

If you really do mean * as in algebraic matrix multiplication, which assumes that the results of each function handle will be either a scalar or a matrix whose number of columns is the same as the number of rows of output of the next function handle (e.g., square matrices work well) then

b = @(x) fold(@mtimes, cellfun(@(F) F(x), FS), 1);

Georgios Koutsakis
on 4 Oct 2019

Hi, interesting approach.

Could you please share the final working version of the code?

I tried to replicate it from by end, but something doesn't seem quite right.

Thanks

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!