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

5 ビュー (過去 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 Center および File ExchangeProgramming についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by