Derivative in function handle

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

답변 (2개)

José-Luis
José-Luis 2017년 9월 11일
편집: José-Luis 2017년 9월 11일
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 2017년 9월 11일
편집: James Tursa 2017년 9월 11일
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 2017년 9월 11일
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 2017년 9월 12일
@Walter: +1

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Assumptions에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by