MATLAB Answers

Derivative in function handle

조회 수: 441(최근 30일)
vincenzo
vincenzo 11 Sep 2017
댓글: James Tursa 12 Sep 2017
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

  댓글 수: 0

로그인 to comment.

답변(2개)

James Tursa
James Tursa 11 Sep 2017
편집: James Tursa 11 Sep 2017
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

Walter Roberson
Walter Roberson 11 Sep 2017
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 12 Sep 2017
@Walter: +1

로그인 to comment.


José-Luis
José-Luis 11 Sep 2017
편집: José-Luis 11 Sep 2017
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.

  댓글 수: 0

로그인 to comment.

이 질문에 답변하려면 로그인을(를) 수행하십시오.


Translated by