How to use dlgradient for computing second derivative?
14 次查看(过去 30 天)
显示 更早的评论
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 中查找有关 Startup and Shutdown 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!