Calling a automatically generated vector valued function handle with a vector
Mostrar comentarios más antiguos
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 comentarios
Matt J
el 23 de Mzo. de 2022
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
el 23 de Mzo. de 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]
Respuestas (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])
2 comentarios
Michael Gfrerer
el 24 de Mzo. de 2022
Matt J
el 24 de Mzo. de 2022
Can you give an example?
Walter Roberson
el 23 de Mzo. de 2022
0 votos
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.
Categorías
Más información sobre Programming en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!