How to convert a cell array containing various inline functions to a unique inline function?
3 次查看(过去 30 天)
显示 更早的评论
I need to use the fminimax function and the input has to be necessarily a single inline function. But I need several equations in this function. And I'm going to add them one by one through a for loop in a cell.
I need to convert this:
cell =
1×3 cell array
{@(x)(a(1,1)-x)^2} {@(x)(a(2,2)-x)^2} {@(x)(a(3,3)-x)^2}
For this:
func =
function_handle with value:
@(x)[(a(1,1)-x)^2;(a(2,2)-x)^2;(a(3,3)-x)^2]
0 个评论
采纳的回答
更多回答(1 个)
TADA
2019-6-5
编辑:TADA
2019-6-5
You can generate a function handle which will execute all the handles in a cell array using closures:
a = magic(3);
myFunctions = [{@(x)(a(1,1)-x)^2} {@(x)(a(2,2)-x)^2} {@(x)(a(3,3)-x)^2}];
aggregatedFunctionHandle = genFunHandle(myFunctions);
disp(aggregatedFunctionHandle(10));
function foo = genFunHandle(handles)
function y = func(x)
y = cellfun(@(fh) fh(x), reshape(handles, numel(handles), 1));
end
foo = @func;
end
output:
6724
4900
6084
but if your functions are always of that format: @(x)(a(i,i)-x)^2
do this instead:
f = @(x) (diag(a)-x).^2
1 个评论
TADA
2019-6-5
also possible with an inline closure like that:
a = magic(3);
myFunctions = [{@(x)(a(1,1)-x)^2} {@(x)(a(2,2)-x)^2} {@(x)(a(3,3)-x)^2}];
aggregatedFunctionHandle =...
@(x) cellfun(@(fh) fh(x), reshape(myFunctions, numel(myFunctions), 1));
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Function Creation 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!