33 lines
894 B
Matlab
Executable File
33 lines
894 B
Matlab
Executable File
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 |