How to return a vector output when a vector input is given to a function_handle representing a constant function?
2 次查看(过去 30 天)
显示 更早的评论
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!
0 个评论
回答(1 个)
Torsten
2024-5-7
编辑:Torsten
2024-5-7
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])
% 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])
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Partial Differential Equation Toolbox 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!