How to use dlgradient for computing second derivative?
조회 수: 10 (최근 30일)
이전 댓글 표시
Rahul Gulati
2021년 9월 10일
댓글: Sanaz Zanjani Foumani
2021년 12월 29일
The following code gives me an error.
x0 = dlarray([-1,2]);
[fval,gradval] = dlfeval(@rosenbrock,x0)
function [y,dy2dx] = rosenbrock(x)
y = 100*(x(2) - x(1).^2).^2 + (1 - x(1)).^2;
dydx = dlgradient(y,x);
dy2dx= dlgradient(dydx,x);
end
I am using dlgradient to compute the second derivative but getting the following error:
"Error using dlfeval (line 43)
Value to differentiate must be a traced dlarray scalar."
Any help on what am i doing wrong? Thanks.
댓글 수: 0
채택된 답변
Abolfazl Chaman Motlagh
2021년 9월 10일
Hi, You are using dlgradient wrong, first agument of dlgradient should be scalar. after 1 gradient from y respect to x. gradient return 1by2 vector. they are
and
. so you cannot use dydx again in dlgradient. also for second derivative you have 4 elements :
,
,
, 
also you should specify option EnableHigherDerivatives in dlgradient.
so substiture your function with this :
function [y,dy2dx] = rosenbrock(x)
y = 100*(x(2) - x(1).^2).^2 + (1 - x(1)).^2;
dydx = dlgradient(y,x,'EnableHigherDerivatives',true);
dy2dx(1,1:2)= dlgradient(dydx(1),x);
dy2dx(2,1:2)= dlgradient(dydx(2),x);
end
댓글 수: 5
Sanaz Zanjani Foumani
2021년 12월 29일
Do you know how I can use dlgradiet in fmincon? I mean I want to use automatic derevative in fmincon insted of analytical derevative.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Operations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!