Function to find max value from function cell array

Hi there,
I have a 3 elements cell array:
A{1} = @(y) {1*y};
A{2} = @(y) {2*y};
A{3} = @(y) {3*y};
And I want to create a function that will output the maximum value of all 3 elements of A. The below is not working for y=3 or any value of y:
B = @(y) cellfun(@(x) max(x), A{1,:}(y), 'UniformOutput', false);
B(3)
any ideas?
Thanks in advance

6 Comments

Assuming vx is an array of inputs to apply each function to something more like this, off the top of my head:
B = cellfun(@(func) max(func(vx)), A, 'UniformOutput', false);
Hi Adam I had a typo there I meant to type y in that line not vx. I am sorry for the confusion.
Adam
Adam on 10 Jun 2019
Edited: Adam on 10 Jun 2019
Ok, but where is y coming from? Is it known at the time you call this or is it another variable input? If it is variable at the time you call the cellfun then I don't think you can use cellfun for this as you would be essentially running over two-dimensional inputs to create the answer. If it is known then just replace vx with y in the code I wrote.
Unfortunately it is not known that is why I want to create B as a function of variable y.
The idea is that B would be an objective function for an optimizer.
Well, actually that should be fine:
B = @(y) cellfun(@(func) max(func(y)), A, 'UniformOutput', false);
should work. As y is just passed as a fixed variable to the cellfun rather than one that the cellfun itself is trying to operate over.
I tried that already. Is this working for you?
A{1} = @(y) {1*y};
A{2} = @(y) {2*y};
A{3} = @(y) {3*y};
B = @(y) cellfun(@(func) max(func(y)), A, 'UniformOutput', false);
B(3)

Sign in to comment.

 Accepted Answer

I see to possible answers depending on what you want:
If you want to obtain the maximum value (for the three functions) for each y:
A{1} = @(y) 1*y;
A{2} = @(y) 2*y;
A{3} = @(y) 3*y;
B = @(y) arrayfun(@(y) max(cellfun(@(func) func(y), A)),y);
y = [1,2,3,4,5]
B(y) =
ans =
3 6 9 12 15
If you want the maximum value of each separate function for all values of y the answer is the one given by @Adam:
B = @(y) (cellfun(@(func) max((func(y))), A, 'UniformOutput', false))
y = [1,2,3,4,5]
B(y) =
ans =
1×3 cell array
[5] [10] [15]

More Answers (0)

Categories

Community Treasure Hunt

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

Start Hunting!