How can I multiply each element of a cell array, defined as an anonymous function handle?
6 次查看(过去 30 天)
显示 更早的评论
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).
0 个评论
采纳的回答
Walter Roberson
2018-9-26
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);
9 个评论
Georgios Koutsakis
2019-10-4
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
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!