Calling a automatically generated vector valued function handle with a vector
显示 更早的评论
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 个评论
Matt J
2022-3-23
when I generate a function handle from a symbolic expression like in the following simple example:
There don't appear to be any symbolic expressions in this example.
Michael Gfrerer
2022-3-23
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]
回答(2 个)
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])
Walter Roberson
2022-3-23
0 个投票
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.
类别
在 帮助中心 和 File Exchange 中查找有关 Programming 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!