How to use dlgradient for computing second derivative?
    9 views (last 30 days)
  
       Show older comments
    
    Rahul Gulati
 on 10 Sep 2021
  
    
    
    
    
    Commented: Sanaz Zanjani Foumani
 on 29 Dec 2021
            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 Comments
Accepted Answer
  Abolfazl Chaman Motlagh
      
 on 10 Sep 2021
        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 Comments
  Sanaz Zanjani Foumani
 on 29 Dec 2021
				Do you know how I can use dlgradiet in fmincon? I mean I want to use automatic derevative in fmincon insted of analytical derevative.
More Answers (0)
See Also
Categories
				Find more on Operations in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!