Calling a automatically generated vector valued function handle with a vector
3 views (last 30 days)
Show older comments
Hello everyone,
I am frequently running into the following problem when I generate a function handle from a symbolic expression like in the following simplified example:
syms x
f = [x,0]
fh = matlabFunction(f) % this is equivalent to fh = @(x) [x,0.0]
X = [1;2;3]
fh(X)
The code above produces the obvious error:
Error using horzcat
Dimensions of arrays being concatenated are not consistent.
Error in symengine>@(x)[x,0.0]
Until now I used the 'File' option of matlabFunction and changed the definiton of the function inside the generated file to
fh = @(x) [x,0*x]
but this requires user intervention, which I want to avoid.
Can anybody think of a general solution wich dous not require user intervention and also works for an arbitrary number of collums returend by the function handle?
Thank you!
3 Comments
Matt J
on 23 Mar 2022
But the only reason the function definition works in the symbolic domain is because x is a scalar. If this weren't the case, you would have the same problem, e.g.,
syms x [3,1]
f = [x,0]
Answers (2)
Matt J
on 23 Mar 2022
Edited: Matt J
on 23 Mar 2022
Because the original symbolic function is defined only on R^1, you must post-vectorize the matlabFunction output.
syms x
f = [x,0]; %scalar form
fh = matlabFunction(f);
fh=@(x) cell2mat( arrayfun(fh,x,'uni',0)); %add vectorization
fh([1;2;3])
2 Comments
Walter Roberson
on 23 Mar 2022
No, there is no method at the moment other than hand manipulation.
I created a service request about related issues a couple of months ago. I suggest you also create a service request, as they prioritize in part according to how much user request there has been.
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!