Derivative in function handle

f=@(x) x + log(x);
f1=diff(f)
f2=diff(f1)
I want to assign first derivative of 'f' to 'f1', and second derivative for 'f1' to 'f2' But i have this error "Undefined function 'diff' for input arguments of type 'function_handle'". How to fix? Thanks

Antworten (2)

José-Luis
José-Luis am 11 Sep. 2017
Bearbeitet: José-Luis am 11 Sep. 2017

1 Stimme

If you're gonna do this numerically, you need to specify an interval in which to evaluate. Note that diff doesn't really give the derivative, but I'll stick to your nomenclature.
limits = [1,10];
f = @(interval) (interval(1):interval(2)) + log(interval(1):interval(2));
f1 = diff(f(limits));
f2 = diff(f1);
You could also do it symbolically but I can't help you there because I don't have the symbolic math toolbox.
James Tursa
James Tursa am 11 Sep. 2017
Bearbeitet: James Tursa am 11 Sep. 2017

1 Stimme

E.g., if you want function handles you could get at them with the symbolic toolbox
>> syms x
>> f = @(x) x + log(x)
f =
@(x)x+log(x)
>> f1 = eval(['@(x)' char(diff(f(x)))])
f1 =
@(x)1/x+1
>> f2 = eval(['@(x)' char(diff(f1(x)))])
f2 =
@(x)-1/x^2
If you plan on feeding vectors or matrices etc to these function handles, then you could wrap the expressions appropriately with the vectorize( ) function. E.g.,
>> f1 = eval(['@(x)' vectorize(char(diff(f(x))))])
f1 =
@(x)1./x+1
>> f2 = eval(['@(x)' vectorize(char(diff(f1(x))))])
f2 =
@(x)-1./x.^2

2 Kommentare

No need for the eval()
syms x
f = @(x) x + log(x)
f1 = matlabFunction( diff(f(x)) );
f2 = matlabFunction( diff(f1(x)) );
James Tursa
James Tursa am 12 Sep. 2017
@Walter: +1

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Symbolic Math Toolbox finden Sie in Hilfe-Center und File Exchange

Gefragt:

am 11 Sep. 2017

Kommentiert:

am 12 Sep. 2017

Community Treasure Hunt

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

Start Hunting!

Translated by