# Undefined function 'diff' for input arguments of type 'function_handle'.

32 views (last 30 days)
Sarah Johnson on 23 Jan 2020 at 4:02
Answered: Walter Roberson on 23 Jan 2020 at 4:16
I am trying to produce a function that receives an inital input x0 (for example, x0 = 1) and the result should be the function e^2sin(x) - x at x0 and it's derivative's function at x0. I keep getting the error "Undefined function 'diff' for input arguments of type 'function_handle'." and I'm not sure why. Any advice would be appreciated!
function [Val1, Val2] = nonlinear1(x0)
syms x;
f = @(x) exp(2*sin(x)) - x;
Val1 = f(x0);
g = diff(f);
Val2 = g(x0);
end

KSSV on 23 Jan 2020 at 4:14
function [Val1, Val2] = nonlinear1(x0)
syms x;
f = exp(2*sin(x)) - x;
Val1 = f(x0);
g = diff(f);
Val2 = g(x0);
end
Don't use @(x)....as it is symbolic, straight away use the expression.

Walter Roberson on 23 Jan 2020 at 4:16
There are two major diff() functions in MATLAB. One of them is the numeric difference operator, roughly
x(:, 2:end) - x(:, 1:end-1)
This is applicable only to numeric arrays. A function handle is not a numeric array so this kind of diff() does not apply to it.
The other major diff() function is part of the Symbolic Toolbox. The first parameter to it must be a symbolic array, or a symbolic function. The operation performed is calculus differentiation. A function handle is not a symbolic array and is not a symbolic function, so this kind of diff() does not apply to it.
There is no diff() function defined to operate on function handles.
What you need is
g(x) = diff(f(x), x);