Dynamic-Calibration/utils/YALMIP-master/@sdpvar/jacobian.m

33 lines
894 B
Mathematica
Raw Permalink Normal View History

2019-12-18 11:25:45 +00:00
function dfdx = jacobian(f,x)
% JACOBIAN Jacobian of scalar, vector, or matrix
%
% J = JACOBIAN(p) Jacobian w.r.t all variables in p
% J = JACOBIAN(p,x) Jacobian w.r.t the SDPVAR variables x
%
% See also INT, HESSIAN, LINEARIZE, SDISPLAY
[n,m] = size(f);
if min([n m]) > 1
f = reshape(f,[],1);
end
switch nargin
case 1
dfdx = shadowjacobian(f);
case 2
if length(getvariables(x) > length(x(:)))
% typical case is jacobian(f(X),X) with X a symmetric matrix
% Shadowjacobian assumes elements of x are independent
dfdx = shadowjacobian(f,recover(x));
x_indep = recover(x);
dfdx = map_to_original(dfdx,x,x_indep);
else
dfdx = shadowjacobian(f,x(:));
end
otherwise
error('Too many input arguments.');
end
if min([n m]) > 1
dfdx = reshape(full(dfdx),n,m,[]);
end