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!