How to tell an multi-output anonymous function to vectorize its output components which are constant

1 次查看(过去 30 天)
Hello friends,
I have an apparently simple but very annoying problem. Consider the function handle
f=@(x,y) [x+y;2;x*y;x^2-1;3];
When I want to calculate the expression f([1 2],3) then matlab gives an error message ('mismatch between dimensions'). Of course, I can easily fix this problem by re-defining the above function handle as
f=@(x,y) [x+y;2+x-x;x*y;x^2-1;3+x-x];
However, the problem is that my anonymous function is defined whithin a for-loop where I cannot mannually add x-x to the constants plus that
I do not know beforehand which outputs are constant and which are not. The natural way to fix this problem seems to be to update f like
f=@(x,y) f(x,y)+[0;x-x;0;0;x-x];
But, this trick does not work, unfortunately.
It is greatly appreciated if anybody has an idea how to fix this really annoying problem.
Thanks in advance
Babak Shojaei Arani

采纳的回答

Matt J
Matt J 2021-10-16
编辑:Matt J 2021-10-16
One way,
f=@(x,y) completeRows({x+y;2;x*y;x.^2-1;3});
f([1 2],3)
ans = 5×2
4 5 2 2 3 6 0 3 3 3
function out=completeRows(C)
n=max(cellfun('length',C));
for i=1:numel(C)
if isscalar(C{i}), C{i}=repelem(C{i},1,n); end
end
out=cell2mat(C);
end

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Argument Definitions 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by