How to return a vector output when a vector input is given to a function_handle representing a constant function?
조회 수: 4 (최근 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에서 Equation Solving에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!