Fréchet derivative of the matrix square root. function [D, fX] = dsqrtm(X, H) Computes the directional derivative (the Fréchet derivative) of sqrtm at X along H (square matrices). Thus, D = lim_(t -> 0) (sqrtm(X + tH) - sqrtm(X)) / t. The second output is fX = sqrtm(X), though it may be less accurate. Note: the adjoint of dsqrtm(X, .) is dsqrtm(X', .), which is a fact often useful to derive gradients of matrix functions involving sqrtm(X). (This is wrt the inner product inner = @(A, B) real(trace(A'*B))). See also: dfunm dlogm dexpm
0001 function [D, fX] = dsqrtm(X, H) 0002 % Fréchet derivative of the matrix square root. 0003 % 0004 % function [D, fX] = dsqrtm(X, H) 0005 % 0006 % Computes the directional derivative (the Fréchet derivative) of sqrtm at 0007 % X along H (square matrices). 0008 % 0009 % Thus, D = lim_(t -> 0) (sqrtm(X + tH) - sqrtm(X)) / t. 0010 % 0011 % The second output is fX = sqrtm(X), though it may be less accurate. 0012 % 0013 % Note: the adjoint of dsqrtm(X, .) is dsqrtm(X', .), which is a fact often 0014 % useful to derive gradients of matrix functions involving sqrtm(X). 0015 % (This is wrt the inner product inner = @(A, B) real(trace(A'*B))). 0016 % 0017 % See also: dfunm dlogm dexpm 0018 0019 % This file is part of Manopt: www.manopt.org. 0020 % Original author: Nicolas Boumal, July 3, 2015. 0021 % Contributors: 0022 % Change log: 0023 % 0024 % June 14, 2019 (NB): now also outputs sqrtm(X) as a by-product. 0025 0026 % Note: following Higham, 'Functions of Matrices', 2008, page 58: this 0027 % could also be computed as fX = sqrtm(X), then solving the Sylvester 0028 % equation fX*D + D*fX = H, e.g. via , D = sylvester(fX, fX, H). 0029 % If X has special structure (e.g., if it is symmetric or Hermitian), 0030 % then this may be faster and more accurate. This should be tested 0031 % before considering a replacement. 0032 0033 [D, fX] = dfunm(@sqrtm, X, H); 0034 0035 end