How to return a vector output when a vector input is given to a function_handle representing a constant function?

2 views (last 30 days)
I want to define a function handle that represents the constant function , pass an n-length vector input, and get out an n-length vector whose values are c. But there's a catch. My code is like:
% Usual Case
syms x; syms t;
u = symfun(x^2,x);
u_x = diff(u,x);
u_x = matlabFunction(u_x);
u_x([0 1 2])
ans = [0 2 4];
So, I input a vector, and I get back a vector, which I would consider the "expected" behavior. But it might happen that the input function happens to have a constant derivative, like
% Exceptional Case
syms x; syms t;
u = symfun(x,x);
u_x = diff(u,x);
u_x = matlabFunction(u_x);
u_x([0 1 2])
ans = 1
Now, I put in a vector and suddenly MATLAB returns a scalar.
So if I only ever had the exceptional case, I would just do something like u_x(0) * ones(1,3) to get my desired vector of constants. But actually, I almost never have the exceptional case; most of the time the input function does not have a constant derivative, and so inputing a vector into the differentiated function returns a vector already.
What I want is for MATLAB to do what I would consider the obvious thing: If I input a vector, I get back a vector, even if the function_handle represents a constant function...how do I do?
Thanks!

Answers (1)

Torsten
Torsten on 7 May 2024
Edited: Torsten on 7 May 2024
This works in both cases:
% Usual Case
syms x; syms t;
u = symfun(x^2,x);
u_x = diff(u,x);
u_x = matlabFunction(u_x);
u_x = @(x)u_x(x).*ones(size(x));
u_x([0 1 2])
ans = 1x3
0 2 4
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
% Exceptional Case
syms x; syms t;
u = symfun(x,x);
u_x = diff(u,x);
u_x = matlabFunction(u_x);
u_x = @(x)u_x(x).*ones(size(x));
u_x([0 1 2])
ans = 1x3
1 1 1
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>

Categories

Find more on Partial Differential Equation Toolbox in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!